Sunteți pe pagina 1din 97

Baze de date relat, ionale în SQL

(Informatică Aplicată 1 - Cursul 5)

Victor BUCATĂ

Facultatea de Inginerie Electrică - U.P.B.

2 Decembrie 2019
Partea I

Modelul relat, ional al bazelor de date


Cuprins Partea I-a

1 Concepte fundamentale

2 Entităt, i, Tabele, Relat, ii

3 Tipuri de chei s, i relat, ionările tabelelor

4 Integritatea referent, ială

5 Valori nule

6 Normalizarea datelor
Obiectivele acestei părt, i
I Prezentarea conceptelor fundamentale s, i a terminologiei
modelului relat, ional (introdus de E.F. Codd de la IBM în 1970).
I Înt, elegerea modului în care relat, iile sunt diferite fat, ă de tabelele
nerelat, ionale.
I Înt, elegerea semnificat, iei s, i a important, ei cheilor, ale cheilor străine
s, i ale conceptelor corelate.
I Înt, elegerea modului în care cheile străine construiesc relat, ionările
(asocierile).
I Prezentarea scopului s, i folosirii cheilor surogat.
I Înt, elegerea semnificat, iei dependent, elor funct, ionale.
I Prezentarea procesului de normalizare a relat, iilor.
Ce este o entitate?
I O entitate este un aspect important pentru un utilizator sau pentru
o organizat, ie s, i care trebuie să fie reprezentat într-o bază de date.
I O entitate este reprezentată de o temă, de un subiect sau de un
concept organizat, ional. De exemplu: Clienti, Comenzi, Carti,
Proiecte etc.
I Exemplu:
Ce este o relat, ie?
I O relat, ie este un tabel bidimensional care are nis, te caracteristici
speciale (pe slideul următor).
I Dimensiunile tabelului, la fel ca în cazul unei matrice constau din
rânduri s, i coloane.

I Obs: Termenul „relat, ie” nu este acelas, i lucru cu termenul


„relat, ionare” („asociere”) pe care îl vom folosi ulterior.
Caracteristicile unei relat, ii
I Rândurile cont, in date despre instant, ele unei entităt, i (în exemplul
anterior cu angajat, i, fiecare rând reprezintă un singur angajat).
I Coloanele cont, in date despre atributele entităt, ii.
I Celulele tabelului (intersect, ia dintre un rând cu o coloană) cont, in o
singură valoare.
I Toate valorile dintr-o coloană sunt de acelas, i fel (acelas, i tip de
date). De exemplu Id-urile sunt de tip întreg.
I Fiecare coloană are un nume unic în tabelul respectiv. Pot exista
coloane cu acelas, i nume dar în tabele diferite.
I Ordinea coloanelor nu este importantă.
I Ordinea rândurilor nu este importantă.
I Nu pot exista rânduri identice.
Ce este o relat, ie - exemplu, contraexemplu
Exemplu:

Contraexemplu:

Acest tabel are câteva probleme care-l descalifică de a fi o relat, ie.


I Există o celulă ce cont, ine două valori.
I Două rânduri sunt identice.
Toate relat, iile sunt tabele dar nu toate tabelele sunt relat, ii!
Terminologie
Divers, i utilizatori folosesc cuvinte diferite pentru aceleas, i concepte.
Următorii termeni sunt folosit, i interschimbabil (sinonime):
I Tabel = Fis, ier (folosit mai rar) = Relat, ie
I Rând = Înregistrare = Tuplu (folosit mai rar)
I Coloană = Câmp = Atribut
Obs: Termenul „relat, ie” nu este acelas, i lucru cu termenul „relat, ionare”
(„asociere”) pe care îl vom folosi ulterior.
Ce este o cheie?
I Ideea principală: Prin cheie înt, elegem de obicei o coloană sau mai
multe ale unei relat, ii ale cărei valori sunt folosite pentru a identifica
un rând (o înregistrare).
Chei unice:
I Valorile sunt unice pentru fiecare înregistrare
I Prin urmare, cheia va identifica în mod unic un rând.
Chei non-unice:
I Valorile se pot repeta în mai multe înregistrări.
I Prin urmare, cheia va identifica un set de înregistrări.
Ce este o cheie non-unică - exemplu:

Clasificarea cheilor:
Cheile compuse - exemplu
I O cheie compusă este o cheie care este compusă din două sau
mai multe atribute.
I Se combină una sau mai multe coloane pentru a obt, ine unicitatea.
I Adesea, pentru ca o cheie să fie unică, ea trebuie să fie compusă.
Cheile compuse - exemplu
I Ilustrăm acest concept cu un exemplu din viat, a reală: presupunem
că dorim să mergem cu un tren pe ruta Bucures, ti - Craiova într-o
anumită dată.
I Un tren cu un anumit număr nu circulă decât o dată pe zi pe ruta
respectivă.
I Pentru a identifica o călătorie specifică trebuie să combinăm
numărul trenului cu data călătoriei. Această combinat, ie
reprezintă o cheie compusă.
Cheile candidat:
I O cheie „candidat” este denumită astfel deoarece poate deveni
cheie primară.
I O cheie candidat este o cheie unică.
Cheile primare:
I O cheie primară este o cheie candidat aleasă drept cheia principală
a relat, iei.
I Dacă este cunoscută valoarea cheii primare, atunci orice
înregistrare din tabel poate fi identificată în mod unic.
Cheile surogat
I O cheie surogat este o valoare numerică unică care este adăugată
relat, iei pentru a servi drept cheie primară.
I Valorile cheilor surogat nu au nicio semnificat, ie pentru utilizatori s, i
sunt de obicei ascunse pe formulare, interogări s, i rapoarte.
I Adesea o cheie surogat este folosită în locul unei chei primare
compuse.
Relat, ionările (asocierile) dintre tabele
I Un tabel poate fi relat, ionat cu alte tabele.
I Vom introduce conceptul de cheie străină.
I Exemple:
I Un Angajat lucrează într-un Departament.
I Un Director controlează un Proiect.

I În cazul unui departament, acesta poate avea mai mult, i angajat, i


dar un angajat apart, ine unui singur departament.
I Bazele de date relat, ionale permit folosirea acestor relat, ionări
ierarhice.
Cheile străine
I Pentru a stabili relat, ionările (asocierile), trebuie folosită o cheie
străină.
I O cheie străină este o cheie primară dintr-un tabel care este
plasată în alt tabel.
I Cheia este denumită „cheie străină” în tabelul care primes, te cheia.
Exemplu:
Integritatea referent, ială
I Integritatea referent, ială stipulează că toate valorile unei chei străine
trebuie să corespundă valorii unei chei primare existente.
I Aceasta serves, te la ment, inerea calităt, ii datelor din baza de date.
I Exemplu (Nu există clientul cu IdClient=5. (Obs: cheia străină poate
avea valori multiple - este non-unică.))
Valori nule (Null)
I O valoare nulă (Null) înseamnă că nu există date în acel loc.
I Putem privi o valoarea nulă ca o celulă goală din acel tabel.
I Aceasta nu este acelas, i lucru cu o valoare zero, un caracter spat, iu,
un string gol sau un caracter tab.
I O valoare nulă conduce adesea la ambiguităt, i.
Posibilităt, i:
I Valoarea atributului respectiv nu este potrivită pentru tipul de dată
al coloanei.
I Valoarea atributului nu a fost încă decisă.
I Valoarea coloanei este necunoscută.
I Toate acestea pot avea implicat, ii complet diferite.
Normalizarea datelor:Dependent, ele funct, ionale
I Dependent, a funct, ională este un tip de relat, ie între atribute prin care
un atribut (sau un grup de atribute) dictează valoarea altui atribut
din cadrul aceluias, i tabel.
I Exemplu: Pret, ul unei cutii de chibrituri determină pret, ul unei duzine.
I (PretCutie,Cantitate) -> PretDuzina
Determinant, ii:
I Atributul (sau atributele) care este folosit drept punct de plecare al
relat, iei (adică variabila din partea stângă a ecuat, iei) se numes, te
determinant.
I (PretCutie,Cantitate) -> PretDuzina
I (PretCutie,Cantitate) este determinantul.
Cheile primare / Cheile candidat s, i dependent, a funct, ională:
I Prin definit, ie, o cheie candidat a unei relat, ii va determina funct, ional
toate celelalte atribute care nu sunt chei din înregistrare.
I Prin extensie o cheie primară a unei relat, ii va determina funct, ional
toate celelalte atribute care nu sunt chei din înregistrare.

(IdAngajat) -> (Nume, Telefon)


(IdProiect) -> (NumeProiect, DataInceperii)
Normalizarea datelor
I Normalizarea datelor este un proces de analizare a unei relat, ii
pentru a asigura că aceasta este bine structurată.
I Normalizarea implică descompunerea relat, iilor cu anomalii în relat, ii
mai mici s, i bine structurate.
I Mai precis, dacă o relat, ie este normalizată (este bine structurată),
rândurile pot fi introduse, s, terse sau modificate fără a crea
anomalii. (Există trei tipuri de anomalii: anomalii de s, tergere,
anomalii de actualizare s, i anomalii de inserare)
Principiile normalizării:
I Principiile de proiectare relat, ională a relat, iilor normalizate sunt:
I Orice determinant trebuie să fie o cheie candidat.
I Orice relat, ie care nu este bine structurată trebuie descompusă în
două sau mai multe relat, ii bine-structurate!
I Artificiu: Ca o regulă generală, o relat, ie bine structurată nu va
cont, ine mai mult de un concept organizat, ional.
Normalizarea datelor - Exemplul 1

(IdStudent) -> (NumeStudent, NumărulCăminului, CostulCăminului)

, dar dacă:

(NumărulCăminului) -> (CostulCăminului)

atunci atributul CostulCăminului va trebui plasat în relat, ia sa proprie


rezultând relat, iile:

(IdStudent) -> (NumeleStudentului, NumărulCăminului)


(NumărulCăminului) -> (CostulCăminului)
Normalizarea datelor - Exemplul 2

(IdAvocat, IdClient) -> (NumeClient, DataS, edint, ei, Durată)

, dar dacă:

(IdClient) -> (NumeClient)

atunci atributul NumeClient va trebui plasat în relat, ia sa proprie rezultând


relat, iile:

(IdAvocat, IdClient) -> (DataS, edint, ei, Durată)


(IdClient) -> (NumeClient)
Pas, ii pentru normalizarea datelor

Obs: Există s, i forme normale cu grad mai mare, netratate aici.


Prima formă normală
I Tabelul nu cont, ine atribute cu mai multe valori.
I Toate atributele sunt atomice (nu se pot diviza).
I Exemplul de pe slideul următor nu este în forma normală 1, deci nu
este o relat, ie.
I Toate relat, iile sunt în prima formă normală. (Reamintesc: Toate
relat, iile sunt tabele dar nu toate tabelele sunt relat, ii!)
Exemplu de tabel ce NU respectă prima formă normală
Tabelul (Relat, ia) ce respectă prima formă normală
A doua formă normală
I Include prima formă normală PLUS „orice atribut care nu este
cheie trebuie să fie complet dependent funct, ional de cheia
primară ÎN TOTALITATEA EI”.
I Orice atribut care nu este cheie trebuie să fie definit prin cheia
întreagă, nu numai printr-o parte a cheii.
I Nu sunt permise dependent, e part, iale.
Exemplu de diagramă a dependent, elor

Obs: cheia primară este exprimată prin câmpurile subliniate.


IdComanda -> DataComanda, IdClient, NumeClient, AdresaClient
IdClient -> NumeClient, AdresaClient
IdProdus -> Descriere, PretUnitar
IdComanda, IdProdus -> Cantitate
De aceea nu este în Forma Normală 2!
Strategia de trecere de la o formă normală inferioară la o formă normală
superioară este descompunerea relat, iilor în relat, ii mai mici.
Eliminarea dependent, elor part, iale

Dependent, ele part, iale au fost eliminate dar există încă dependent, e
tranzitive în tabelul ComenzileClientilor.
A treia formă normală
I Include a doua formă normală PLUS „nu trebuie să existe
dependent, e funct, ionale de atributele care nu sunt chei
primare”.
I Astfel de dependent, e sunt denumite tranzitive deoarece cheia
primară determină un alt atribut care la rândul lui determină un alt
atribut.
I Solut, ie: Determinant, ii care nu sunt chei cu dependent, e tranzitive se
trec într-un tabel nou; determinantul repectiv devine cheie primară
în noul tabel s, i rămâne cheie străină în vechiul tabel.
Eliminarea dependent, elor tranzitive

Dependent, ele tranzitive au fost eliminate!


Regula de aur

Regula de aur se enunt, ă astfel:


FIECARE TABEL (DENUMIT S, I RELAT, IE) TREBUIE SĂ CONT, INĂ
DOAR UN SINGUR CONCEPT ORGANIZAT, IONAL (TEMĂ, ENTITATE)!

De exemplu: Clienti, Comenzi, Carti, Proiecte etc.

Astfel se obt, in automat primele 3 forme normale.


Partea II

Limbajul SQL
Cuprins Partea a II-a

1 Ce este SQL?

2 Istoricul SQL

3 Sisteme SQL

4 Sintaxă, instruct, iuni, exemple

5 Concluzii
Ce este SQL?
I Structured Query Language (Limbaj structurat de interogare).
I limbaj standard folosit pentru gestiunea bazei de date, pentru
comunicarea cu ea.
I pronunţare: es-q-l sau precum cuvântul englezesc "sequel".
I limbaj neprocedural, declarativ (un limbaj procedural foloseşte o
serie de instrucţiuni executate secvenţial).
I se spune calculatorului ce rezultate se doresc fără a spune cum se
obţin.
I SQL este adesea folosit în combinaţie cu un limbaj procedural sau
orientat spre obiecte (ex: MySQL+PHP).
Istoric al limbajului SQL
I Sfârşitul anilor ’70 - cercetători de la IBM dezvoltă System/R bazat
pe lucrările Dr. E. F. Codd.
I Oracle dezvoltă Relational Software.
I Relational Technology dezvoltă Ingres.
I 1982 - IBM SQL/DS.
I standardizări (utile pentru portabilitate):
I 1986 - standardul ANSI
I 1987 - standardul ISO
I 1989 - standardul SQL-89
I 2016 - ultimul standard
I Oracle Database 19c - ultima versiune stabilă: 13 februarie 2019
Structura unui sistem SQL
I Structură de tip client/server
Sisteme SQL
I Clienţi în linia de comandă
I Clienţi cu interfaţă grafică
I Clienţi interfaţă bazată pe web
Sisteme SQL:
I Access: produs de Microsoft, nu are client SQL; clientul, interfaţa şi
motorul pe acelaşi calculator
I SQL Server: produs de Microsoft, clientul (iSQL sau Query
Analyzer) rulează ca aplicaţie în linia de comandă într-un nucleu de
comenzi Microsoft Windows
I MySQL: sub licenţă liberă (locul 2 în clasamentul SGBDR gratuite
ca utilizare) cumpărat în 2010 de Oracle prin achiziţia Sun
Microsystems care la rândul ei l-a cumpărat de la o firmă suedeză.
Client în linia de comandă sub diferite sisteme de operare
I Oracle: clienţi iSQL*Plus, SQL*Plus, SQL Worksheet
I Sybase: client iSQL
Convenţii de sintaxă SQL
I Mai departe vom folosi termenul de tabel în loc de termenul relat, ie
I Fiecare instrucţiune începe cu o comandă, de obicei sub forma
unui singur cuvânt
I Fiecare instrucţiune se termină cu punct şi virgulă (;)
I O instrucţiune se poate scrie pe mai multe linii
I Instrucţiunile sunt organizate într-o serie de clauze care trebuie să
apară într-o anumită ordine
I Nu se face diferenţa între majuscule şi minuscule - case-insensitive
(cu excepţia numelor de tabele)
I Virgulele sunt folosite pentru separarea articolelor dintr-o listă
Convenţii de sintaxă SQL (continuare)
I Şirurile de caractere se pun între ghilimele
I Numele obiectelor bazei de date sunt formate numai din litere, cifre
şi liniuţe de subliniere
I Există un set de cuvinte rezervate
I Un comentariu pe o singură linie începe cu două liniuţe de
despărţire s, i apoi spat, iu (−− )
I Un comentariu pe mai multe linii se include între /* şi */
Categorii de instrucţiuni SQL
I Limbajul de definire a datelor (DDL - Data Definition Language):
CREATE, ALTER, DROP
I Limbajul de interogare a datelor (DQL - Data Query Language):
SELECT
I Limbajul de manipulare a datelor (DML - Data Manipulation
Language): INSERT, UPDATE, DELETE
I Limbajul pentru controlul datelor (DCL - Data Control Language):
GRANT, ALTER
I Comenzile pentru controlul tranzacţiilor (Transaction Control
Commands)
Crearea şi manipularea tabelelor
Dorim să creăm un tabel cu numele STUDENTI care pe lângă cheia
primară id să cont, ină s, i nume, prenume, grupa, varsta s, i număr de
restant, e, ca în figura de mai jos:
Crearea şi manipularea tabelelor
Se foloseşte instrucţiunea CREATE TABLE:
I numele noului tabel
I numele şi definiţiile coloanelor separate prin virgule
I precizarea constrângerii cheie primară
I după ultimul rând din tabel nu se pune virgulă
Exemplu:
CREATE TABLE Studenti(
id int auto_increment not null,
nume_student varchar(20),
prenume_student varchar(20),
grupa varchar(5),
varsta smallint,
restante smallint,
PRIMARY KEY(id)
);
Crearea şi manipularea tabelelor
Pentru a vedea structura tabelului creat anterior folosim comanda
DESCRIBE Studenti;
Chei primare

CREATE TABLE Angajati


(
id_angajati INT(11) NOT NULL PRIMARY KEY,
....);

sau:
ALTER TABLE Angajati
ADD CONSTRAINT PRIMARY KEY (id_angajati);
Chei externe (străine)

CREATE TABLE Angajati


(
...
id_functie INT(4) NOT NULL
REFERENCES Posturi(id_posturi);
);

sau:
ALTER TABLE Angajati
ADD CONSTRAINT
FOREIGN KEY (id_functie)
REFERENCES Posturi(id_posturi);
Actualizarea definiţiilor tabelelor - instrucţiunile ALTER şi
DROP
Modificarea tabelelor:
ALTER TABLE Angajati
ADD email_ang VARCHAR(25);

sau:
ALTER TABLE Angajati
DROP COLUMN spor_noapte;

Ştergerea tabelelor:
DROP TABLE AngajatiCopie;
Inserarea datelor - instrucţiunea INSERT
I pentru a insera o singură înregistrare completă
I pentru a insera o singură înregistrare parţială
I pentru a insera rezultatele unei interogări
Exemple:
INSERT INTO Angajati
VALUES ("Cristea", "Dan", "Str. Uverturii,
nr.22", NULL, 23, NULL);

sau:
INSERT INTO Angajati (nume_ang, prenume_ang,
adresa_ang, tel_ang, varsta_ang, id_functie)
VALUES ("Cristea", "Dan",
"Str. Uverturii, nr.22", NULL, 23, NULL);
Actualizarea şi ştergerea datelor - instrucţiunile UPDATE şi
DELETE
Se foloseşte instrucţiunea UPDATE, formată din trei componente:
I tabelul care urmează a fi actualizat
I numele coloanelor şi noile valori ale acestora
I condiţia de filtrare care determină înregistrările ce urmează a fi
actualizate
Pentru a şterge date (înregistrări) dintr-un tabel se foloseşte instrucţiunea
DELETE. Exemplu:
DELETE FROM Angajati
WHERE id_angajati=8;

Pentru a şterge anumite coloane se foloseşte instrucţiunea UPDATE


atribuind valori NULL. Dacă se omite clauza WHERE, operaţiile de
actualizare/ştergere vor fi aplicate tuturor rândurilor din tabel.
Exemplu instrucţiunea UPDATE

UPDATE Angajati
SET tel_ang = "07112233"
WHERE id_angajati = 7;
Instrucţiunea SELECT
Regăsirea datelor - Instrucţiunea SELECT (face parte din categoria DQL
- Data Query Language)
I SELECT este instrucţiunea SQL cea mai folosită.
I e nevoie de două informaţii: ce se selectează + de unde se
selectează
Exemplul 1 - selectarea unei coloane

SELECT nume_student
FROM Studenti;
Exemplul 2 - selectarea mai multor coloane

SELECT nume_student, prenume_student, varsta


FROM Studenti;
Exemplul 3 - selectarea tuturor coloanelor
Pentru a selecta toate coloanele se foloseşte semnul asterisc (*)
SELECT *
FROM Studenti;
Exemplul 4 - sortarea datelor regăsite
Instrucţiunile SQL sunt alcătuite din clauze, unele obligatorii (de
exemplu FROM în instrucţiunea SELECT), altele opţionale.
Pentru a sorta datele se foloseşte clauza ORDER BY.

SELECT nume_student, prenume_student FROM Studenti


ORDER BY nume_student;
Exemplul 5 - sortarea în funcţie de mai multe coloane

SELECT id, nume_student, prenume_student,


varsta
FROM Studenti
ORDER BY varsta, nume_student;
Exemplul 6 - sortarea în funcţie de poziţia coloanei

SELECT id, nume_student, prenume_student,


varsta
FROM Studenti
ORDER BY 4, 2;
Exemplul 7 - specificarea direcţiei de sortare
Pentru ordine descrescătoare se foloseşte cuvântul cheie DESC.
SELECT id, nume_student, prenume_student
FROM Studenti
ORDER BY nume_student DESC;
Filtrarea datelor: utilizarea clauzei WHERE
I Se folosesc criterii de căutare (adică "condiţii de filtrare").
I Clauza ORDER BY trebuie plasată după WHERE.
I Operatorii clauzei WHERE: =,<>,!=,<,<=,>,>= ,BETWEEN,IS NULL
I când o coloană nu conţine nicio valoare, se spune că include o
valoare NULL (cu totul altfel decât un câmp care conţine 0 sau
spaţiu)
Exemplul 8 - clauza WHERE

SELECT nume_student, prenume_student, varsta


FROM Studenti
WHERE varsta = 20;
Exemplul 9 - operatorii clauzei WHERE

SELECT id, nume_student, prenume_student,


grupa
FROM Studenti
WHERE grupa <> "112A";
Exemplul 10 - operatorii clauzei WHERE

SELECT id, nume_student, prenume_student,


varsta
FROM Studenti
WHERE varsta BETWEEN 21 AND 23;
Exemplul 11 - filtrarea avansată (operatorul AND)

SELECT nume_student, prenume_student


FROM Studenti
WHERE grupa = "111A" AND varsta > 21;
Exemplul 12 - filtrarea avansată (operatorul OR)

SELECT nume_student, prenume_student, grupa,


varsta
FROM Studenti
WHERE grupa = "111A" OR varsta < 21;
Exemplul 13 - filtrarea avansată (operatorul IN)

SELECT nume_student, prenume_student, varsta


FROM Studenti
WHERE varsta IN (20, 21, 22);
Exemplul 14 - filtrarea avansată (operatorul NOT)

SELECT nume_student, prenume_student, varsta


FROM Studenti
WHERE NOT varsta = 20;
Exemplul 15 - filtrarea avansată (operatorul LIKE)
I caracterul de înlocuire (oricâte): procent(%)
I caracterul de înlocuire (un singur caracter): liniuţa de subliniere (_)
SELECT nume_student, prenume_student, grupa
FROM Studenti
WHERE prenume_student LIKE "S%";
Exemplul 16 - filtrarea avansată (operatorul LIKE)

SELECT nume_student, prenume_student, varsta,


grupa
FROM Studenti
WHERE grupa LIKE "11_ _";
Exemplul 17 - alias-uri
Un alias este un nume alternativ al unui câmp sau al unei valori. Se
atribuie prin intermediul cuvântului cheie AS.
SELECT nume_student,
varsta AS "VARSTA STUDENTULUI"
FROM Studenti;
Exemplul 18 - efectuarea calculelor matematice

SELECT nume_student,
2018-varsta AS "AN NASTERE"
FROM Studenti;
Funcţii pentru manipularea datelor
I funcţii pentru manipularea şirurilor de caractere (eliminarea sau
completarea cu valori, conversia în majuscule sau minuscule)
I LENGTH()
I LOWER()
I UPPER()
I RTRIM() - elimină spaţiile albe de la dreapta şirului
I pentru operaţii matematice
I ABS()
I COS()
I EXP()
I PI()
I SQRT()
I de tip dată şi oră
I funcţii de sistem
Exemplul 19 - funcţii pentru manipularea datelor

SELECT CONCAT(UPPER(nume_student), " ",


prenume_student)AS NUME
FROM Studenti;
Exemplul 20 - funcţii matematice

SELECT PI(), SQRT(625), SIN(PI()/2);


Sintetizarea datelor
Utilizarea funcţiilor agregat
I lucrează cu seturi de înregistrări pentru a calcula şi returna o
singură valoare
I AVG() - media valorilor dintr-o coloană
I COUNT() - numărul de înregistrări dintr-un tabel sau de înregistrări
care satisfac un anumit criteriu
I MAX(), MIN()
I SUM()
Exemplul 21 - funcţia AVG()

SELECT AVG(varsta) AS "Varsta medie"


FROM Studenti;
Exemplul 22 - funcţia COUNT()

SELECT COUNT(nume_student)
AS Numarul_studentilor
FROM Studenti;
Exemplul 23 - funcţia MAX()

SELECT MAX(varsta) AS Varsta_maxima


FROM Studenti;
Exemplul 24 - argumentul DISTINCT

SELECT AVG(DISTINCT varsta) AS "Varsta medie"


FROM Studenti;
Gruparea datelor
I Grupurile permit împărţirea datelor în seturi logice pentru a putea
efectua calcule de sinteză cu fiecare grup.
I Se foloseşte clauza GROUP BY plasată după clauzele WHERE şi
ORDER BY.
I Grupurile pot fi filtrate cu clauza HAVING (spre deosebire de clauza
WHERE care filtrează înregistrări, HAVING filtrează grupuri).
Exemplul 25 - Gruparea datelor

SELECT grupa, SUM(restante) AS Restante_grupa


FROM Studenti
GROUP BY grupa;
Exemplul 26 - clauza HAVING

SELECT grupa, SUM(restante) AS Restante_grupa


FROM Studenti
GROUP BY grupa
HAVING SUM(restante) >= 5;
Exemplul 27 - sub-interogări
SQL permite crearea sub-interogărilor, adică a interogărilor care sunt
înglobate în alte interogări.

SELECT nume_ang, prenume_ang, tel_ang


FROM Angajati
WHERE id_functie IN (SELECT id_post
FROM Posturi
WHERE sal_min >= 4000);
Exemplul 27 - sub-interogări
Exemplul 28 - sub-interogări (crearea de câmpuri cu valoare
calculată)

SELECT den_post, (SELECT COUNT(*)


FROM Angajati
WHERE Angajati.id_functie = Posturi.id_post) AS Nr_posturi
FROM Posturi;
Exemplul 29 - unirea tabelelor

SELECT nume_ang, prenume_ang, den_post, sal_min


FROM Angajati, Posturi
WHERE Angajati.id_functie = Posturi.id_post;
Exemplul 30

SELECT nume_ang, prenume_ang, den_post, sal_min


FROM Angajati, Posturi;
Exemplul 31 - uniune interioară

SELECT nume_ang, prenume_ang, den_post, sal_min


FROM Angajati INNER JOIN Posturi
ON Angajati.id_functie = Posturi.id_post;
Exemplul 32 - uniune exterioară
Se foloseşte RIGHT sau LEFT pentru a specifica tabelul din care
urmează a se include toate rândurile.
SELECT nume_ang, prenume_ang, den_post
FROM Angajati RIGHT OUTER JOIN Posturi
ON Angajati.id_functie = Posturi.id_post;
Exemplul 33 - combinarea interogărilor

SELECT nume_ang, prenume_ang, varsta_ang


FROM Angajati
WHERE varsta_ang > 40
UNION
SELECT nume_ang, prenume_ang, varsta_ang
FROM Angajati, Posturi
WHERE Angajati.id_functie = Posturi.id_post
AND spor_noapte > 15;
Exemplul 33 - combinarea interogărilor
Caracteristici avansate: Gestiunea prelucrării tranzacţiilor
Grupuri de operaţii SQL ce se execută în totalitate sau deloc. Exemplu în
MySQL:
START TRANSACTION
...

Comanda SQL ROLLBACK este folosită pentru anularea instrucţiunilor.


Pentru a crea un punct de salvare se foloseşte instrucţiunea SAVEPOINT.
Caracteristici avansate: Securitatea bazelor de date
I autorizarea şi autentificarea utilizatorilor
I securitatea este gestionată prin intermediul instrucţiunilor SQL:
GRANT sau REVOKE
Bibliografie SQL
I https://www.w3schools.com/sql/
I https://www.tutorialspoint.com/sql/
I http://www.youtube.com/watch?v=4Z9KEBexzcM/
Concluzie s, i resurse suplimentare
I Acest curs a prezentat modelul relat, ional al bazelor de date s, i
limbajul SQL.
I Am vazut ce înseamnă o relat, ie, ce sunt cheile s, i tipurile lor.
I Am văzut cum se proiectează o bază de date relat, ională.
I Am văzut ce sunt formele normale 1, 2 s, i 3.
I O prezentare a modelului relat, ional precum s, i alte informat, ii despre
SGBD găsit, i la
http://www.youtube.com/watch?v=4Z9KEBexzcM (în
total 8 cursuri).
I Am prezentat limbajul SQL folosind numeroase exemple.
Întrebări ?

Vă mult, umesc pentru atent, ie!

S-ar putea să vă placă și