Conectează-te Înregistrare gratuită
Informatică Liceu (9-12)

Baze de date (SQL, interogari, proiectare minimala)

Pe scurt

O bază de date relațională organizează datele în tabele cu rânduri și coloane, fiind manipulată prin limbajul SQL. Interogările SELECT cu clauze precum WHERE, JOIN, GROUP BY și HAVING permit extragerea și agregarea datelor, iar proiectarea minimală respectă principii de normalizare (1NF, 2NF) pentru a evita redundanța.

Structura unei baze de date relaționale

O bază de date relațională este o colecție de date organizată sub formă de tabele (relații), fiecare tabel având rânduri (tupluri) și coloane (atribute).

Limbajul SQL și componentele sale

Pentru a defini și manipula datele, se utilizează limbajul SQL (Structured Query Language). SQL are mai multe componente:

  • DDL (Data Definition Language) – pentru crearea tabelelor: CREATE TABLE, ALTER TABLE, DROP TABLE
  • DML (Data Manipulation Language) – pentru interogări și modificări: SELECT, INSERT, UPDATE, DELETE

La nivelul liceului, accentul cade pe interogări SELECT cu clauze esențiale:

  • WHERE – pentru filtrare
  • ORDER BY – pentru sortare
  • GROUP BY și HAVING – pentru agregare (funcții ca COUNT, SUM, AVG, MIN, MAX)
  • JOIN – pentru combinarea datelor din mai multe tabele (INNER JOIN, LEFT JOIN)

Proiectarea minimală a unei baze de date

Proiectarea minimală respectă principiile normalizării

  • Prima formă normală (1NF) – atribute atomice, fără repetiții
  • A doua formă normală (2NF) – eliminarea dependențelor parțiale

De exemplu, într-o bază pentru o școală, vom separa tabelele Student, Profesor, Materie și Nota, legate prin chei primare și chei externe.

Concepte importante în interogări

  • NULL reprezintă o valoare lipsă, iar în condiții se folosește IS NULL, nu = NULL
  • Subinterogările (subqueries) pot fi folosite în clauza WHERE sau în FROM
  • Pentru bacalaureat, se cer interogări cu cel mult 3 tabele și funcții de grup simple

Exemple de interogări

Exemplul 1: Avem tabelele Student (id, nume, clasa) și Nota (id_student, materie, valoare). Să se afișeze numele studenților care au luat nota 10 la matematică.

Interogare: SELECT s.nume FROM Student s INNER JOIN Nota n ON s.id = n.id_student WHERE n.materie = 'matematica' AND n.valoare = 10

Explicație: INNER JOIN combină rândurile care au id-ul corespunzător; WHERE filtrează după materie și notă.

Exemplul 2: Să se afișeze numele fiecărui profesor și numărul de materii pe care le predă. Tabele: Profesor (id, nume) și Materie (id, nume, id_profesor).

Interogare: SELECT p.nume, COUNT(m.id) AS numar_materii FROM Profesor p LEFT JOIN Materie m ON p.id = m.id_profesor GROUP BY p.id, p.nume

Explicație: LEFT JOIN include și profesorii fără materii (COUNT va fi 0); GROUP BY este necesar pentru a agrega pe profesor.

Exemplul 3: Să se afișeze media notelor pentru fiecare student, dar numai pentru cei care au media peste 7. Tabele: Student (id, nume), Nota (id_student, valoare).

Interogare: SELECT s.nume, AVG(n.valoare) AS medie FROM Student s JOIN Nota n ON s.id = n.id_student GROUP BY s.id, s.nume HAVING AVG(n.valoare) > 7

Explicație: HAVING filtrează după funcția de grup (AVG), nu se poate folosi WHERE pe agregări.

Verifică-te!

  1. Care sunt cele două componente principale ale limbajului SQL și ce operații include fiecare?
  2. Ce diferență există între clauzele WHERE și HAVING în cadrul unei interogări SELECT?
  3. Ce reprezintă NULL într-o bază de date și cum se verifică prezența acestuia într-o condiție?

Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.

Creează cont