Pe această pagina veți găsi detalii pentru a vă conecta pe conturile voastre de pe APPEX (Oracle Application Express).
Vă rog sa fiți atenți la instrucțiuni și să le urmați întocmai. Pentru diferite probleme semnalați imediat.
INTRAȚI la adresa: https://iacademy3.oracle.com
- La Workspace introduceți: RO_A920_SQL_Snn unde nn este de la 01 la 50
- La Student username introduceți: RO_A920_SQL_Snn unde nn este de la 01 la 50
- Parola: Programarecurabdare2018
EXEMPLU
- Workspace: RO_A920_SQL_S01
- Student username: RO_A920_SQL_S01
- Parola: Programarecurabdare2018
SAU
- Workspace: RO_A920_SQL_S02
- Student username: RO_A920_SQL_S02
- Parola: Programarecurabdare2018
și tot așa până la contul cu numărul 50.
De pe prima pagina faceți click pe SQL Workshop și apoi pe SQL Commands.
Scriptul pentru crearea tabelelor este: elevi
SQL (Structured Query Language)
- Comenzi DDL (de definire a datelor): CREATE, DROP, ALTER
- Comenzi DML (de manipulare a datelor): INSERT, DELETE, UPDATE, SELECT
În forma Backus-Naur cele mai uzuale comenzi SQL. Convenţiile de sintaxă în acest format sunt următoarele:
<> reprezintă o variabilă de substituţie
| reprezintă disjuncţia
[…] reprezintă elemente opţionale
{…|…|…} reprezintă exact un element din listă
Inserarea înregistrărilor:
INSERT INTO <nume_tabel> [ (lista_coloane) ] VALUES (lista_valori) INSERT INTO elevi VALUES ('124', 'Anghelescu', 'Anca', 12, 350, TO_DATE('10/05/1999', 'dd/mm/yyyy')); (describe elevi)
Actualizarea valorilor:
UPDATE <nume_tabel> SET <nume_coloana1> = valoare1 [, <nume_coloana2> = valoare2...] [WHERE conditie] UPDATE elevi SET bursa=450 WHERE nr_matricol=124;
Ştergerea înregistrărilor:
DELETE FROM <nume_tabel> [WHERE conditie] DELETE FROM elevi WHERE nr_matricol=124;
COMANDA SELECT
SELECT [DISTINCT | ALL] {* | [expresie_coloana [AS <nume_nou>]] [,...] } FROM <nume_tabel> [alias] [, ...] [WHERE conditie] [GROUP BY lista_coloane] [HAVING conditie] [ORDER BY exp1 [ASC/DESC] [,exp2...]]
SELECT * FROM elevi;
SELECT nume, prenume FROM elevi;
SELECT nume AS „Nume Profesor” FROM profesori;
SELECT clasa FROM elevi;
SELECT DISTINCT clasa FROM elevi;
CLAUZA WHERE
Operatori de comparare
– returnează TRUE sau FALSE, sunt aplicabili pentru toate tipurile de date
Operator | Descriere | Exemplu |
= > >= < <= <> |
Operatori binari, semnificaţia uzuală | SELECT nume, prenume FROM elevi WHERE clasa = 9; |
ANY/ SOME |
Operator aplicat unei liste sau rezultatului unei interogări în conjuncţie cu unul din operatorii de comparare uzuali de mai sus, cu semnificaţia următoare: operatorul uzual primeşte ca al doilea operand fiecare din valorile din listă; returnează TRUE dacă pt. cel puţin o valoare din listă rezultatul e TRUE, altfel returnează FALSE. | SELECT * FROM elevi WHERE clasa = SOME (9,10); |
ALL | Ca şi ANY/SOME, cu diferenţa rezultatul este TRUE doar dacă operatorul uzual returnează TRUE pentru toate valorile din listă. | SELECT * FROM elevi WHERE clasa >= ALL (10, 11); |
IN | Verifică apartenenţa valorii primului operand la mulţimea specificată de al doilea operand. Este echivalent cu „=ANY” | SELECT * FROM elevi WHERE prenume IN (‘Adrian’, ‘Alex’); |
NOT IN | Returnează FALSE dacă valoarea primului operand nu face parte din lista specificată de al doilea operand. Este echivalent cu „<>ANY” | SELECT * FROM elevi WHERE clasa NOT IN (9,10); |
BETWEEN x AND y | Îl putem considera ca pe un operator ternar: returnează TRUE dacă primul operand satisface simultan condiţiile >=x şi <=y, unde x şi y reprezentă alţi doi operanzi | SELECT nume, prenume FROM elevi WHERE clasa BETWEEN 10 AND 11; |
LIKE | Operator binar, verifică dacă primul operand este în conformitate cu un şablon specificat de al doilea operand. Şablonul este un şir de caractere, ce poate conţine unul din caracterele speciale:
Dacă cele două simboluri speciale trebuiesc interpretate ca atare se utilizează caracterul ESCAPE: \% şi \_ |
SELECT * FROM elevi WHERE nume LIKE ‘%andr%’; |
IS [NOT] NULL | Operator unar. Singurul mod de test pentru null | SELECT * FROM elevi WHERE bursa IS NOT NULL AND bursa > 200; |
SELECT nota+ 1 FROM catalog;
SELECT nume, prenume FROM elevi WHERE bursa IS NOT NULL;
SELECT nume, prenume FROM elevi WHERE bursa IS NOT NULL AND clasa = 9;
SELECT nume, prenume FROM elevi WHERE nume LIKE ‘%escu’;
- Scrieți și executați o interogare pentru a afișa în mod unic valorile burselor.
- Scrieți o interogare pentru a afișa numele, prenumele, clasa de studiu si data nașterii pentru toți elevii.
- Afișați numele, prenumele și data de naștere a elevilor născuți între 1 ianuarie 1995 si 10 iunie 1997. Ordonați descendent după clasa de studiu.
- Afișați numele și prenumele precum și clasa de studiu pentru toți elevii născuți în 1995.
- Afișați elevii (toate informațiile pentru aceștia) care nu iau bursă.
- Afișați elevii (nume și prenume) care iau bursă și sunt în clasa 10 și 11 de studiu. Ordonați alfabetic ascendent după nume și descendent după prenume.
- Afișați elevii care iau bursă, precum și valoarea bursei dacă aceasta ar fi mărită cu 15%.
- Afișați elevii al căror nume începe cu litera P și sunt în clasa a-10 a de studiu.
Afișarea informațiilor din mai multe tabele
SELECT * FROM elevi JOIN catalog ON elevi.nr_matricol = catalog.nr_matricol ORDER BY nume;
SELECT * FROM elevi JOIN catalog ON elevi.nr_matricol = catalog.nr_matricol WHERE prenume=’Andrei’;
SELECT nume, prenume, nota , e.nr_matricol FROM elevi e JOIN catalog c ON e.nr_matricol = c.nr_matricol;
SELECT nume, prenume, titlu_curs, nota FROM elevi e JOIN catalog n ON e.nr_matricol = n.nr_matricol JOIN cursuri c ON c.id_curs = n.id_curs;
- Afişaţi elevii şi notele pe care le-au luat si profesorii care le-au pus acele note.
- Afisati elevii care au luat nota 10 la materia ‘Informatica’.
- Afisaţi profesorii (numele şi prenumele) impreuna cu cursurile pe care fiecare le ţine.
Funcţii de agregare în SQL
SELECT COUNT(*) AS „Total elevi” FROM elevi;
SELECT COUNT(bursa) AS „Elevi bursieri” FROM elevi;
SELECT AVG(nota) FROM catalog;
SELECT MAX(bursa) FROM elevi;
SELECT MAX(nota), nr_matricol FROM catalog GROUP BY nr_matricol;
SELECT nr_matricol, id_curs, MAX(nota) FROM catalog GROUP BY nr_matricol, id_curs ORDER BY nr_matricol;
SELECT id_curs, COUNT(nota) "nr note" FROM catalog WHERE nota>9 --câte note de 10 sunt pe curs GROUP BY id_curs ORDER BY id_curs; (Pentru verificare, cursul 29 are 6 note de 10: select * from catalog order by id_curs desc;)
SELECT id_curs, COUNT(nota) "nr note" FROM catalog GROUP BY id_curs HAVING COUNT(nota)>25 ORDER BY id_curs; --câte cursuri au mai mult de 25 de note