Tabele, Relatii, SQL si Microsoft Access
Bazele de date sunt esentiale pentru stocarea si organizarea informatiilor. In aceasta lectie recapitulam conceptele fundamentale de baze de date si limbajul SQL pe care le-ai invatat in clasa a VIII-a.
O baza de date este organizata in tabele. Fiecare tabel are campuri (coloane) si inregistrari (randuri).
Tabel: ELEVI
| ID_Elev | Nume | Prenume | Clasa | Data_Nastere |
|---|---|---|---|---|
| 1 | Popescu | Ion | 8A | 2011-03-15 |
| 2 | Ionescu | Maria | 8B | 2011-07-22 |
| 3 | Vasilescu | Ana | 8A | 2011-01-08 |
| Tip | Descriere | Exemple |
|---|---|---|
INTEGER |
Numere intregi | 1, 42, -5, 2024 |
REAL / FLOAT |
Numere cu zecimale | 3.14, 9.99, -2.5 |
TEXT / VARCHAR |
Siruri de caractere | "Ion", "Matematica" |
DATE |
Date calendaristice | 2024-03-15 |
BOOLEAN |
Valori logice | TRUE, FALSE |
Identifica unic fiecare inregistrare din tabel. Nu poate avea valori duplicate
sau NULL. Exemplu: ID_Elev in tabelul ELEVI.
Face legatura intre doua tabele. Refera cheia primara din alt tabel.
Exemplu: ID_Elev in tabelul NOTE refera ELEVI.
Relatie 1:N - Un elev poate avea mai multe note
ELEVI
| ID_Elev | Nume |
|---|---|
| 1 | Popescu Ion |
| 2 | Ionescu Maria |
NOTE
| ID_Nota | ID_Elev | Nota |
|---|---|---|
| 1 | 1 | 10 |
| 2 | 1 | 9 |
| 3 | 2 | 8 |
-- Selecteaza toate coloanele din ELEVI SELECT * FROM ELEVI; -- Selecteaza doar anumite coloane SELECT Nume, Prenume FROM ELEVI; -- Cu conditie WHERE SELECT * FROM ELEVI WHERE Clasa = '8A'; -- Ordonare rezultate SELECT * FROM ELEVI ORDER BY Nume ASC; -- Conditii multiple SELECT * FROM ELEVI WHERE Clasa = '8A' AND Nume LIKE 'P%';
-- Adaugare inregistrare noua INSERT INTO ELEVI (Nume, Prenume, Clasa) VALUES ('Georgescu', 'Dan', '8B'); -- Modificare date existente UPDATE ELEVI SET Clasa = '8A' WHERE ID_Elev = 2; -- Stergere inregistrare DELETE FROM ELEVI WHERE ID_Elev = 3;
-- Numarare inregistrari SELECT COUNT(*) FROM ELEVI; -- Suma valorilor SELECT SUM(Nota) FROM NOTE; -- Media aritmetica SELECT AVG(Nota) FROM NOTE; -- Valoare maxima si minima SELECT MAX(Nota), MIN(Nota) FROM NOTE; -- Grupare rezultate SELECT ID_Elev, AVG(Nota) as Media FROM NOTE GROUP BY ID_Elev;
Creare tabel: Create > Table Design
Definire cheie primara: Click dreapta pe camp > Primary Key
Creare relatie: Database Tools > Relationships
Interogare: Create > Query Design sau Query Wizard
Formular: Create > Form pentru introducere date
Raport: Create > Report pentru afisare date
Scrie interogarile SQL pentru urmatoarele cerinte:
-- a) Afiseaza toti elevii din clasa 8A SELECT * FROM ELEVI WHERE Clasa = '8A'; -- b) Afiseaza elevii ordonati alfabetic dupa nume SELECT * FROM ELEVI ORDER BY Nume; -- c) Numara cati elevi sunt in clasa 8B SELECT COUNT(*) as Nr_Elevi FROM ELEVI WHERE Clasa = '8B'; -- d) Afiseaza elevii nascuti in 2011 SELECT * FROM ELEVI WHERE Data_Nastere BETWEEN '2011-01-01' AND '2011-12-31';
Afiseaza notele impreuna cu numele elevilor.
-- Combinam informatii din ELEVI si NOTE SELECT ELEVI.Nume, ELEVI.Prenume, NOTE.Nota FROM ELEVI INNER JOIN NOTE ON ELEVI.ID_Elev = NOTE.ID_Elev; -- Media notelor pentru fiecare elev SELECT ELEVI.Nume, ELEVI.Prenume, AVG(NOTE.Nota) as Media FROM ELEVI INNER JOIN NOTE ON ELEVI.ID_Elev = NOTE.ID_Elev GROUP BY ELEVI.ID_Elev, ELEVI.Nume, ELEVI.Prenume;
Pentru o biblioteca scolara, ce tabele ai crea?
-- Tabel CARTI CREATE TABLE CARTI ( ID_Carte INTEGER PRIMARY KEY, Titlu VARCHAR(100), Autor VARCHAR(50), An_Publicare INTEGER, Disponibila BOOLEAN ); -- Tabel IMPRUMUTURI CREATE TABLE IMPRUMUTURI ( ID_Imprumut INTEGER PRIMARY KEY, ID_Carte INTEGER, ID_Elev INTEGER, Data_Imprumut DATE, Data_Returnare DATE, FOREIGN KEY (ID_Carte) REFERENCES CARTI(ID_Carte), FOREIGN KEY (ID_Elev) REFERENCES ELEVI(ID_Elev) );