Home › Page › Programare cu rabdare – Baze de date

Warning: array_key_exists() expects parameter 2 to be array, boolean given in /disk2/usr/local/www/cdid/wp-content/plugins/wp-postviews/wp-postviews.php on line 184

Programare cu rabdare – Baze de date

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

  1. La Workspace introduceți:                RO_A920_SQL_Snn      unde nn este de la 01 la 50
  2. La Student username introduceți:      RO_A920_SQL_Snn      unde nn este de la 01 la 50
  3. Parola:                                           Programarecurabdare2018

EXEMPLU

  1. Workspace:                 RO_A920_SQL_S01
  2. Student username:       RO_A920_SQL_S01
  3. Parola:                        Programarecurabdare2018

SAU

  1. Workspace:                 RO_A920_SQL_S02
  2. Student username:      RO_A920_SQL_S02
  3. 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)

  1. Comenzi DDL (de definire a datelor): CREATE, DROP, ALTER
  2. 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:

% semnifică orice şir de caractere, chiar şirul vid (de lungime 0)
_ suplineşte un singur caracter

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’;

  1. Scrieți și executați o interogare pentru a afișa în mod unic valorile burselor.
  2. Scrieți o interogare pentru a afișa numele, prenumele, clasa de studiu si data nașterii pentru toți elevii.
  3. 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.
  4. Afișați numele și prenumele precum și clasa de studiu pentru toți elevii născuți în 1995.
  5. Afișați elevii (toate informațiile pentru aceștia) care nu iau bursă.
  6. 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.
  7. Afișați elevii care iau bursă, precum și valoarea bursei dacă aceasta ar fi mărită cu 15%.
  8. 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;
  1. Afişaţi elevii şi notele pe care le-au luat si profesorii care le-au pus acele note.
  2. Afisati elevii care au luat nota 10 la materia ‘Informatica’.
  3. 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