baze de date relationale în sql - itee.elth.pub.rovbucata/ia/cursuri/curs5.pdf · de exemplu:...
TRANSCRIPT
Baze de date relat,ionale în SQL(Informatica Aplicata 1 - Cursul 5)
Victor BUCATA
Facultatea de Inginerie Electrica - U.P.B.
2 Decembrie 2019
Partea I
Modelul relat,ional al bazelor de date
Cuprins Partea I-a
1 Concepte fundamentale
2 Entitat,i, Tabele, Relat,ii
3 Tipuri de chei s, i relat,ionarile tabelelor
4 Integritatea referent,iala
5 Valori nule
6 Normalizarea datelor
Obiectivele acestei part,i
I Prezentarea conceptelor fundamentale s, i a terminologieimodelului relat, ional (introdus de E.F. Codd de la IBM în 1970).
I Înt,elegerea modului în care relat, iile sunt diferite fat,a de tabelelenerelat,ionale.
I Înt,elegerea semnificat,iei s, i a important,ei cheilor, ale cheilor straines, i ale conceptelor corelate.
I Înt,elegerea modului în care cheile straine construiesc relat, ionarile(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 pentruo organizat,ie s, i care trebuie sa fie reprezentat într-o baza de date.
I O entitate este reprezentata de o tema, de un subiect sau de unconcept 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 caracteristicispeciale (pe slideul urmator).
I Dimensiunile tabelului, la fel ca în cazul unei matrice constau dinrâ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 entitat,i (în exemplulanterior cu angajat,i, fiecare rând reprezinta un singur angajat).
I Coloanele cont,in date despre atributele entitat,ii.
I Celulele tabelului (intersect, ia dintre un rând cu o coloana) cont,in osingura valoare.
I Toate valorile dintr-o coloana sunt de acelas, i fel (acelas, i tip dedate). De exemplu Id-urile sunt de tip întreg.
I Fiecare coloana are un nume unic în tabelul respectiv. Pot existacoloane cu acelas, i nume dar în tabele diferite.
I Ordinea coloanelor nu este importanta.
I Ordinea rândurilor nu este importanta.
I Nu pot exista rânduri identice.
Ce este o relat,ie - exemplu, contraexemplu
Exemplu:
Contraexemplu:
Acest tabel are câteva probleme care-l descalifica de a fi o relat,ie.
I Exista o celula ce cont,ine doua valori.I Doua 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.Urmatorii termeni sunt folosit,i interschimbabil (sinonime):
I Tabel = Fis, ier (folosit mai rar) = Relat,ie
I Rând = Înregistrare = Tuplu (folosit mai rar)
I Coloana = 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 principala: Prin cheie înt,elegem de obicei o coloana sau maimulte ale unei relat,ii ale carei valori sunt folosite pentru a identificaun 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 înregistrari.
I Prin urmare, cheia va identifica un set de înregistrari.
Ce este o cheie non-unica - exemplu:
Clasificarea cheilor:
Cheile compuse - exemplu
I O cheie compusa este o cheie care este compusa din doua saumai multe atribute.
I Se combina una sau mai multe coloane pentru a obt,ine unicitatea.
I Adesea, pentru ca o cheie sa fie unica, ea trebuie sa fie compusa.
Cheile compuse - exemplu
I Ilustram acest concept cu un exemplu din viat,a reala: presupunemca dorim sa mergem cu un tren pe ruta Bucures, ti - Craiova într-oanumita data.
I Un tren cu un anumit numar nu circula decât o data pe zi pe rutarespectiva.
I Pentru a identifica o calatorie specifica trebuie sa combinamnumarul trenului cu data calatoriei. Aceasta combinat,iereprezinta o cheie compusa.
Cheile candidat:
I O cheie „candidat” este denumita astfel deoarece poate devenicheie primara.
I O cheie candidat este o cheie unica.
Cheile primare:
I O cheie primara este o cheie candidat aleasa drept cheia principalaa relat,iei.
I Daca este cunoscuta valoarea cheii primare, atunci oriceînregistrare din tabel poate fi identificata în mod unic.
Cheile surogat
I O cheie surogat este o valoare numerica unica care este adaugatarelat,iei pentru a servi drept cheie primara.
I Valorile cheilor surogat nu au nicio semnificat, ie pentru utilizatori s, isunt de obicei ascunse pe formulare, interogari s, i rapoarte.
I Adesea o cheie surogat este folosita în locul unei chei primarecompuse.
Relat,ionarile (asocierile) dintre tabele
I Un tabel poate fi relat,ionat cu alte tabele.
I Vom introduce conceptul de cheie straina.I Exemple:
I Un Angajat lucreaza într-un Departament.I Un Director controleaza un Proiect.
I În cazul unui departament, acesta poate avea mai mult, i angajat, idar un angajat apart,ine unui singur departament.
I Bazele de date relat, ionale permit folosirea acestor relat,ionariierarhice.
Cheile straine
I Pentru a stabili relat,ionarile (asocierile), trebuie folosita o cheiestraina.
I O cheie straina este o cheie primara dintr-un tabel care esteplasata în alt tabel.
I Cheia este denumita „cheie straina” în tabelul care primes, te cheia.
Exemplu:
Integritatea referent,iala
I Integritatea referent,iala stipuleaza ca toate valorile unei chei strainetrebuie sa corespunda valorii unei chei primare existente.
I Aceasta serves, te la ment,inerea calitat,ii datelor din baza de date.
I Exemplu (Nu exista clientul cu IdClient=5. (Obs: cheia straina poateavea valori multiple - este non-unica.))
Valori nule (Null)
I O valoare nula (Null) înseamna ca nu exista date în acel loc.
I Putem privi o valoarea nula ca o celula goala 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 nula conduce adesea la ambiguitat, i.
Posibilitat,i:
I Valoarea atributului respectiv nu este potrivita pentru tipul de dataal coloanei.
I Valoarea atributului nu a fost înca decisa.
I Valoarea coloanei este necunoscuta.
I Toate acestea pot avea implicat,ii complet diferite.
Normalizarea datelor:Dependent,ele funct,ionale
I Dependent,a funct,ionala este un tip de relat,ie între atribute prin careun atribut (sau un grup de atribute) dicteaza valoarea altui atributdin cadrul aceluias, i tabel.
I Exemplu: Pret,ul unei cutii de chibrituri determina pret,ul unei duzine.
I (PretCutie,Cantitate) -> PretDuzina
Determinant,ii:
I Atributul (sau atributele) care este folosit drept punct de plecare alrelat,iei (adica variabila din partea stânga a ecuat,iei) se numes, tedeterminant .
I (PretCutie,Cantitate) -> PretDuzina
I (PretCutie,Cantitate) este determinantul.
Cheile primare / Cheile candidat s, i dependent,a funct,ionala:
I Prin definit,ie, o cheie candidat a unei relat,ii va determina funct, ionaltoate celelalte atribute care nu sunt chei din înregistrare.
I Prin extensie o cheie primara a unei relat,ii va determina funct,ionaltoate 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,iipentru a asigura ca aceasta este bine structurata.
I Normalizarea implica descompunerea relat,iilor cu anomalii în relat,iimai mici s, i bine structurate.
I Mai precis, daca o relat,ie este normalizata (este bine structurata),rândurile pot fi introduse, s, terse sau modificate fara a creaanomalii. (Exista trei tipuri de anomalii: anomalii de s, tergere,anomalii de actualizare s, i anomalii de inserare)
Principiile normalizarii:I Principiile de proiectare relat,ionala a relat,iilor normalizate sunt:
I Orice determinant trebuie sa fie o cheie candidat.I Orice relat,ie care nu este bine structurata trebuie descompusa în
doua sau mai multe relat,ii bine-structurate!
I Artificiu: Ca o regula generala, o relat, ie bine structurata nu vacont, ine mai mult de un concept organizat, ional.
Normalizarea datelor - Exemplul 1
(IdStudent) -> (NumeStudent, NumarulCaminului, CostulCaminului)
, dar daca:
(NumarulCaminului) -> (CostulCaminului)
atunci atributul CostulCaminului va trebui plasat în relat,ia sa proprierezultând relat,iile:
(IdStudent) -> (NumeleStudentului, NumarulCaminului)(NumarulCaminului) -> (CostulCaminului)
Normalizarea datelor - Exemplul 2
(IdAvocat, IdClient) -> (NumeClient, DataS, edint,ei, Durata)
, dar daca:
(IdClient) -> (NumeClient)
atunci atributul NumeClient va trebui plasat în relat,ia sa proprie rezultândrelat,iile:
(IdAvocat, IdClient) -> (DataS, edint,ei, Durata)(IdClient) -> (NumeClient)
Pas, ii pentru normalizarea datelor
Obs: Exista s, i forme normale cu grad mai mare, netratate aici.
Prima forma normala
I Tabelul nu cont,ine atribute cu mai multe valori.I Toate atributele sunt atomice (nu se pot diviza).
I Exemplul de pe slideul urmator nu este în forma normala 1, deci nueste o relat,ie.
I Toate relat, iile sunt în prima forma normala. (Reamintesc: Toaterelat,iile sunt tabele dar nu toate tabelele sunt relat,ii!)
Exemplu de tabel ce NU respecta prima forma normala
Tabelul (Relat,ia) ce respecta prima forma normala
A doua forma normala
I Include prima forma normala PLUS „orice atribut care nu estecheie trebuie sa fie complet dependent funct, ional de cheiaprimara ÎN TOTALITATEA EI”.
I Orice atribut care nu este cheie trebuie sa fie definit prin cheiaîntreaga, nu numai printr-o parte a cheii.
I Nu sunt permise dependent,e part, iale.
Exemplu de diagrama a dependent,elor
Obs: cheia primara este exprimata prin câmpurile subliniate.IdComanda -> DataComanda, IdClient, NumeClient, AdresaClientIdClient -> NumeClient, AdresaClientIdProdus -> Descriere, PretUnitarIdComanda, IdProdus -> CantitateDe aceea nu este în Forma Normala 2!Strategia de trecere de la o forma normala inferioara la o forma normalasuperioara este descompunerea relat, iilor în relat, ii mai mici.
Eliminarea dependent,elor part,iale
Dependent,ele part,iale au fost eliminate dar exista înca dependent,etranzitive în tabelul ComenzileClientilor.
A treia forma normala
I Include a doua forma normala PLUS „nu trebuie sa existedependent,e funct, ionale de atributele care nu sunt cheiprimare”.
I Astfel de dependent,e sunt denumite tranzitive deoarece cheiaprimara determina un alt atribut care la rândul lui determina un altatribut.
I Solut,ie: Determinant,ii care nu sunt chei cu dependent,e tranzitive setrec într-un tabel nou; determinantul repectiv devine cheie primaraîn noul tabel s, i ramâne cheie straina în vechiul tabel.
Eliminarea dependent,elor tranzitive
Dependent,ele tranzitive au fost eliminate!
Regula de aur
Regula de aur se enunt,a astfel:FIECARE TABEL (DENUMIT S, I RELAT, IE) TREBUIE SA CONT, INADOAR UN SINGUR CONCEPT ORGANIZAT, IONAL (TEMA, 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 Sintaxa, 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, pentrucomunicarea cu ea.
I pronuntare: es-q-l sau precum cuvântul englezesc "sequel".
I limbaj neprocedural, declarativ (un limbaj procedural foloseste oserie de instructiuni executate secvential).
I se spune calculatorului ce rezultate se doresc fara a spune cum seobtin.
I SQL este adesea folosit în combinatie cu un limbaj procedural sauorientat spre obiecte (ex: MySQL+PHP).
Istoric al limbajului SQL
I Sfârsitul anilor ’70 - cercetatori de la IBM dezvolta System/R bazatpe lucrarile Dr. E. F. Codd.
I Oracle dezvolta Relational Software.
I Relational Technology dezvolta Ingres.
I 1982 - IBM SQL/DS.I standardizari (utile pentru portabilitate):
I 1986 - standardul ANSII 1987 - standardul ISOI 1989 - standardul SQL-89I 2016 - ultimul standard
I Oracle Database 19c - ultima versiune stabila: 13 februarie 2019
Structura unui sistem SQL
I Structura de tip client/server
Sisteme SQL
I Clienti în linia de comandaI Clienti cu interfata graficaI Clienti interfata bazata pe web
Sisteme SQL:
I Access: produs de Microsoft, nu are client SQL; clientul, interfata simotorul pe acelasi calculator
I SQL Server: produs de Microsoft, clientul (iSQL sau QueryAnalyzer) ruleaza ca aplicatie în linia de comanda într-un nucleu decomenzi Microsoft Windows
I MySQL: sub licenta libera (locul 2 în clasamentul SGBDR gratuiteca utilizare) cumparat în 2010 de Oracle prin achizitia SunMicrosystems care la rândul ei l-a cumparat de la o firma suedeza.Client în linia de comanda sub diferite sisteme de operare
I Oracle: clienti iSQL*Plus, SQL*Plus, SQL Worksheet
I Sybase: client iSQL
Conventii de sintaxa SQL
I Mai departe vom folosi termenul de tabel în loc de termenul relat,ie
I Fiecare instructiune începe cu o comanda, de obicei sub formaunui singur cuvânt
I Fiecare instructiune se termina cu punct si virgula (;)
I O instructiune se poate scrie pe mai multe liniiI Instructiunile sunt organizate într-o serie de clauze care trebuie sa
apara într-o anumita ordineI Nu se face diferenta între majuscule si minuscule - case-insensitive
(cu exceptia numelor de tabele)
I Virgulele sunt folosite pentru separarea articolelor dintr-o lista
Conventii de sintaxa SQL (continuare)
I Sirurile de caractere se pun între ghilimeleI Numele obiectelor bazei de date sunt formate numai din litere, cifre
si liniute de subliniere
I Exista un set de cuvinte rezervateI Un comentariu pe o singura linie începe cu doua liniute de
despartire s, i apoi spat,iu (−− )
I Un comentariu pe mai multe linii se include între /* si */
Categorii de instructiuni 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 ManipulationLanguage): INSERT, UPDATE, DELETE
I Limbajul pentru controlul datelor (DCL - Data Control Language):GRANT, ALTER
I Comenzile pentru controlul tranzactiilor (Transaction ControlCommands)
Crearea si manipularea tabelelor
Dorim sa cream un tabel cu numele STUDENTI care pe lânga cheiaprimara id sa cont,ina s, i nume, prenume, grupa, varsta s, i numar derestant,e, ca în figura de mai jos:
Crearea si manipularea tabelelor
Se foloseste instructiunea CREATE TABLE:
I numele noului tabelI numele si definitiile coloanelor separate prin virgule
I precizarea constrângerii cheie primara
I dupa ultimul rând din tabel nu se pune virgula
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 si manipularea tabelelor
Pentru a vedea structura tabelului creat anterior folosim comandaDESCRIBE Studenti;
Chei primare
CREATE TABLE Angajati(id_angajati INT(11) NOT NULL PRIMARY KEY,....);
sau:
ALTER TABLE AngajatiADD CONSTRAINT PRIMARY KEY (id_angajati);
Chei externe (straine)
CREATE TABLE Angajati(...id_functie INT(4) NOT NULL
REFERENCES Posturi(id_posturi););
sau:
ALTER TABLE AngajatiADD CONSTRAINTFOREIGN KEY (id_functie)
REFERENCES Posturi(id_posturi);
Actualizarea definitiilor tabelelor - instructiunile ALTER siDROP
Modificarea tabelelor:
ALTER TABLE AngajatiADD email_ang VARCHAR(25);
sau:
ALTER TABLE AngajatiDROP COLUMN spor_noapte;
Stergerea tabelelor:
DROP TABLE AngajatiCopie;
Inserarea datelor - instructiunea INSERT
I pentru a insera o singura înregistrare completaI pentru a insera o singura înregistrare partialaI pentru a insera rezultatele unei interogari
Exemple:
INSERT INTO AngajatiVALUES ("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 si stergerea datelor - instructiunile UPDATE siDELETE
Se foloseste instructiunea UPDATE, formata din trei componente:
I tabelul care urmeaza a fi actualizat
I numele coloanelor si noile valori ale acestora
I conditia de filtrare care determina înregistrarile ce urmeaza a fiactualizate
Pentru a sterge date (înregistrari) dintr-un tabel se foloseste instructiuneaDELETE. Exemplu:
DELETE FROM AngajatiWHERE id_angajati=8;
Pentru a sterge anumite coloane se foloseste instructiunea UPDATEatribuind valori NULL. Daca se omite clauza WHERE, operatiile deactualizare/stergere vor fi aplicate tuturor rândurilor din tabel.
Exemplu instructiunea UPDATE
UPDATE AngajatiSET tel_ang = "07112233"WHERE id_angajati = 7;
Instructiunea SELECT
Regasirea datelor - Instructiunea SELECT (face parte din categoria DQL- Data Query Language)
I SELECT este instructiunea SQL cea mai folosita.
I e nevoie de doua informatii: ce se selecteaza + de unde seselecteaza
Exemplul 1 - selectarea unei coloane
SELECT nume_studentFROM Studenti;
Exemplul 2 - selectarea mai multor coloane
SELECT nume_student, prenume_student, varstaFROM Studenti;
Exemplul 3 - selectarea tuturor coloanelor
Pentru a selecta toate coloanele se foloseste semnul asterisc (*)
SELECT *FROM Studenti;
Exemplul 4 - sortarea datelor regasite
Instructiunile SQL sunt alcatuite din clauze, unele obligatorii (deexemplu FROM în instructiunea SELECT), altele optionale.Pentru a sorta datele se foloseste clauza ORDER BY.
SELECT nume_student, prenume_student FROM StudentiORDER BY nume_student;
Exemplul 5 - sortarea în functie de mai multe coloane
SELECT id, nume_student, prenume_student,varsta
FROM StudentiORDER BY varsta, nume_student;
Exemplul 6 - sortarea în functie de pozitia coloanei
SELECT id, nume_student, prenume_student,varsta
FROM StudentiORDER BY 4, 2;
Exemplul 7 - specificarea directiei de sortare
Pentru ordine descrescatoare se foloseste cuvântul cheie DESC.
SELECT id, nume_student, prenume_studentFROM StudentiORDER BY nume_student DESC;
Filtrarea datelor: utilizarea clauzei WHERE
I Se folosesc criterii de cautare (adica "conditii de filtrare").
I Clauza ORDER BY trebuie plasata dupa WHERE.
I Operatorii clauzei WHERE: =,<>,!=,<,<=,>,>= ,BETWEEN,IS NULL
I când o coloana nu contine nicio valoare, se spune ca include ovaloare NULL (cu totul altfel decât un câmp care contine 0 sauspatiu)
Exemplul 8 - clauza WHERE
SELECT nume_student, prenume_student, varstaFROM StudentiWHERE varsta = 20;
Exemplul 9 - operatorii clauzei WHERE
SELECT id, nume_student, prenume_student,grupa
FROM StudentiWHERE grupa <> "112A";
Exemplul 10 - operatorii clauzei WHERE
SELECT id, nume_student, prenume_student,varsta
FROM StudentiWHERE varsta BETWEEN 21 AND 23;
Exemplul 11 - filtrarea avansata (operatorul AND)
SELECT nume_student, prenume_studentFROM StudentiWHERE grupa = "111A" AND varsta > 21;
Exemplul 12 - filtrarea avansata (operatorul OR)
SELECT nume_student, prenume_student, grupa,varsta
FROM StudentiWHERE grupa = "111A" OR varsta < 21;
Exemplul 13 - filtrarea avansata (operatorul IN)
SELECT nume_student, prenume_student, varstaFROM StudentiWHERE varsta IN (20, 21, 22);
Exemplul 14 - filtrarea avansata (operatorul NOT)
SELECT nume_student, prenume_student, varstaFROM StudentiWHERE NOT varsta = 20;
Exemplul 15 - filtrarea avansata (operatorul LIKE)
I caracterul de înlocuire (oricâte): procent(%)I caracterul de înlocuire (un singur caracter): liniuta de subliniere (_)
SELECT nume_student, prenume_student, grupaFROM StudentiWHERE prenume_student LIKE "S%";
Exemplul 16 - filtrarea avansata (operatorul LIKE)
SELECT nume_student, prenume_student, varsta,grupa
FROM StudentiWHERE grupa LIKE "11_ _";
Exemplul 17 - alias-uri
Un alias este un nume alternativ al unui câmp sau al unei valori. Seatribuie 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;
Functii pentru manipularea datelor
I functii pentru manipularea sirurilor de caractere (eliminarea saucompletarea cu valori, conversia în majuscule sau minuscule)I LENGTH()I LOWER()I UPPER()I RTRIM() - elimina spatiile albe de la dreapta sirului
I pentru operatii matematiceI ABS()I COS()I EXP()I PI()I SQRT()
I de tip data si oraI functii de sistem
Exemplul 19 - functii pentru manipularea datelor
SELECT CONCAT(UPPER(nume_student), " ",prenume_student)AS NUME
FROM Studenti;
Exemplul 20 - functii matematice
SELECT PI(), SQRT(625), SIN(PI()/2);
Sintetizarea datelor
Utilizarea functiilor agregatI lucreaza cu seturi de înregistrari pentru a calcula si returna o
singura valoare
I AVG() - media valorilor dintr-o coloana
I COUNT() - numarul de înregistrari dintr-un tabel sau de înregistraricare satisfac un anumit criteriu
I MAX(), MIN()
I SUM()
Exemplul 21 - functia AVG()
SELECT AVG(varsta) AS "Varsta medie"FROM Studenti;
Exemplul 22 - functia COUNT()
SELECT COUNT(nume_student)AS Numarul_studentilor
FROM Studenti;
Exemplul 23 - functia MAX()
SELECT MAX(varsta) AS Varsta_maximaFROM Studenti;
Exemplul 24 - argumentul DISTINCT
SELECT AVG(DISTINCT varsta) AS "Varsta medie"FROM Studenti;
Gruparea datelor
I Grupurile permit împartirea datelor în seturi logice pentru a puteaefectua calcule de sinteza cu fiecare grup.
I Se foloseste clauza GROUP BY plasata dupa clauzele WHERE siORDER BY.
I Grupurile pot fi filtrate cu clauza HAVING (spre deosebire de clauzaWHERE care filtreaza înregistrari, HAVING filtreaza grupuri).
Exemplul 25 - Gruparea datelor
SELECT grupa, SUM(restante) AS Restante_grupaFROM StudentiGROUP BY grupa;
Exemplul 26 - clauza HAVING
SELECT grupa, SUM(restante) AS Restante_grupaFROM StudentiGROUP BY grupaHAVING SUM(restante) >= 5;
Exemplul 27 - sub-interogari
SQL permite crearea sub-interogarilor, adica a interogarilor care suntînglobate în alte interogari.
SELECT nume_ang, prenume_ang, tel_angFROM AngajatiWHERE id_functie IN (SELECT id_postFROM PosturiWHERE sal_min >= 4000);
Exemplul 27 - sub-interogari
Exemplul 28 - sub-interogari (crearea de câmpuri cu valoarecalculata)
SELECT den_post, (SELECT COUNT(*)FROM AngajatiWHERE Angajati.id_functie = Posturi.id_post) AS Nr_posturiFROM Posturi;
Exemplul 29 - unirea tabelelor
SELECT nume_ang, prenume_ang, den_post, sal_minFROM Angajati, PosturiWHERE Angajati.id_functie = Posturi.id_post;
Exemplul 30
SELECT nume_ang, prenume_ang, den_post, sal_minFROM Angajati, Posturi;
Exemplul 31 - uniune interioara
SELECT nume_ang, prenume_ang, den_post, sal_minFROM Angajati INNER JOIN PosturiON Angajati.id_functie = Posturi.id_post;
Exemplul 32 - uniune exterioara
Se foloseste RIGHT sau LEFT pentru a specifica tabelul din careurmeaza a se include toate rândurile.
SELECT nume_ang, prenume_ang, den_postFROM Angajati RIGHT OUTER JOIN PosturiON Angajati.id_functie = Posturi.id_post;
Exemplul 33 - combinarea interogarilor
SELECT nume_ang, prenume_ang, varsta_angFROM AngajatiWHERE varsta_ang > 40UNIONSELECT nume_ang, prenume_ang, varsta_angFROM Angajati, PosturiWHERE Angajati.id_functie = Posturi.id_post
AND spor_noapte > 15;
Exemplul 33 - combinarea interogarilor
Caracteristici avansate: Gestiunea prelucrarii tranzactiilor
Grupuri de operatii SQL ce se executa în totalitate sau deloc. Exemplu înMySQL:
START TRANSACTION...
Comanda SQL ROLLBACK este folosita pentru anularea instructiunilor.Pentru a crea un punct de salvare se foloseste instructiunea SAVEPOINT.
Caracteristici avansate: Securitatea bazelor de date
I autorizarea si autentificarea utilizatorilor
I securitatea este gestionata prin intermediul instructiunilor 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, ilimbajul SQL.
I Am vazut ce înseamna o relat,ie, ce sunt cheile s, i tipurile lor.
I Am vazut cum se proiecteaza o baza de date relat,ionala.
I Am vazut ce sunt formele normale 1, 2 s, i 3.
I O prezentare a modelului relat,ional precum s, i alte informat,ii despreSGBD gasit,i lahttp://www.youtube.com/watch?v=4Z9KEBexzcM (întotal 8 cursuri).
I Am prezentat limbajul SQL folosind numeroase exemple.
Întrebari ?
Va mult,umesc pentru atent,ie!