Sunteți pe pagina 1din 6

Conspect la MySQL

15

Realizarea algebrei relaionale cu ajutorul instreuciunii SELECT Pentru a demonstra c SQL este complet relaional trebuie de demonstrat c orice operator relaional poate fi exprimat n SQL. Operatorul produsului cartezian: SELECT A.Cmp1, A.Cmp2, , B.Cmp1, B.Cmp2, FROM A, B; sau SELECT A.Cmp1, A.Cmp2, , B.Cmp1, B.Cmp2, FROM A CROSS JOIN B; Operatorul proieciei: SELECT DISTINCT X, Y, , Z FROM A; Operatorul de selectare: , SELECT * FROM A WHERE c; Operatorul de adunare: SELECT * FROM A UNION SELECT * FROM B; Operatorul scderii: SELECT * FROM A EXCEPT SELECT * FROM B Operatorul relaional de redenumire RENAME se exprim prin cuvntul rezervat AS n lista cmpurilor selectate a instruciunii SELECT. Celelalte operaii a algebrei relaionale (unirea, intersecia, mprirea) se exprim prin primitive Operatorul unirii: SELECT A.Cmp1, A.Cmp2, , B.Cmp1, B.Cmp2, FROM A, B WHERE c; sau SELECT A.Cmp1, A.Cmp2, , B.Cmp1, B.Cmp2, FROM A CROSS JOIN B WHERE c; Operatorul interseciei: SELECT * FROM A INTERSECT SELECT * FROM B; Operatorul de mprire: SELECT DISTINCT A.X FROM A WHERE NOT EXIST (SELECT * FROM B WHERE NOT EXIST (SELECT * FROM A A1 WHERE A1.X = A.X AND A1.Y = B.Y)); Not. Operatorul SQL, ce realizeaz mprirea este greu de reinut, deacea vom analiza un exemplu. Fie relaia A conine date despre piese, relaia B conine lista tuturor pieselor ce pot fi furnizate. Atributul X este numrul furnizorului, Atributul Y este numrul piesei. De mprit relaia A la relaia B nseamn n acest exemplu "de selectat numerele furnizorilor, care furnizeaz toate piesele". "de selectat numerele furnizorilor, care furnizeaz toate piesele" este echivalent cu "De selectat numerele acelor furnizori dit tabelul A, pentru care nu exist piese nefurnizate n tabelul B" este echivalent cu " De selectat numerele acelor furnizori dit tabelul A, pentru care nu exist acele numere a pieselor din tabelul B, pentru care nu exist nregistrri despre furnizare n tabelul A pentru acest furnizoru i aceast pies". Concluzii: Limbajul SQL opereaz cu termeni un pic diferii de cei din algebra relaional, de exemplu, n loc de "relaii " se folosesc "tabele", n loc de "cortej" - "rnd", n loc de "atribut " - "coloane". Standardul SQL, este bazat pe teoria relaional, dar are i abateri. Baza acestul limbaj o constituie instruciunile, care sunt convenional mprite n mai multe grupe, dup funciile ndeplinite: Instruciunile DDL (Data Definition Language) - Instruciunile definirii obiectelor bazei de date. Instruciunile DML (Data Manipulation Language) - Instruciunile de manipulare a datelor. Instruciunile de protecie i dirijare a datelor i altele. Unul din cele de baz ale DML este operatorul SELECT, ce ne permite s extragem date din tabele i s obinem rspunsuri la diferite interogri. La executarea instruciunii SELECT se folosete optimizatorul, care, analiznd diferite variante de executare a interogrii, o alege pe cea mai bun din ele.

Pagina 1 din 6

Conspect la MySQL

15

Instruciunile DDL (Data Definition Language) - Instruciunile de definire a obiectelor BD. CREATE SCHEMA - crearea schemei bazei de date DROP SHEMA - a terge schema bazei de date CREATE TABLE - crearea tbliei ALTER TABLE - modificarea tbliei DROP TABLE - a terge tblia CREATE DOMAIN - crearea domeniului ALTER DOMAIN - modificarea domeniului DROP DOMAIN - a terge domeniul CREATE COLLATION - crearea seriei DROP COLLATION - a terge seriea CREATE VIEW - crearea prezentrii DROP VIEW - a terge prezentarea Instruciunile DML (Data Manipulation Language) - Instruciunile de manipulare a datelor SELECT - a selecta rnduri din tabele INSERT - a aduga rnduri n tabele UPDATE a modifica rnduri n tabel DELETE - a terge rnduri din tabel COMMIT de a fixa modificrile efectuate ROLLBACK de a anula modificrile efectuate Instruciunile de protecie i dirigare a datelor CREATE ASSERTION - crearea limitrilor DROP ASSERTION - a terge limitrile GRANT permiterea unor privelegii clientului sau aplicaiei. REVOKE anularea privelegiilor clientului sau aplicaiei. Mai sunt grupe de instruciuni de instalare a parametrilor, de primire a informaiei despre BD, instruciunile statice SQL, instruciunile dinamice SQL. Cele mai importante sunt DML.

Pagina 2 din 6

Conspect la MySQL Sintaxa instruciunii de selectare Operatorul de selectare ::=Expresie tabelar [ORDER BY {{Numele cmpului rezultant [ASC | DESC]} | {Un numr natural [ASC | DESC]}}.,..]; Expresie tabelar ::= Select-expresie [ {UNION | INTERSECT | EXCEPT} [ALL] {Select-expresie | TABLE Numele tabelei | Constructorul de valori a tabelului }]

15

Select-expresie ::= SELECT [ALL | DISTINCT] {{{expresie scalar | Funcie agregat | Select-expresie } [AS Numele cmpului ]}.,..} | {{Numele tabelului |Numele corelaiei }.*} | * FROM {{Numele tabelei [AS] [Numele corelaiei ] [(Numele cmpului .,..)]} | {Select-expresie [AS] Numele corelaiei [(Numele cmpului .,..)]} | Tabel unit }.,.. [WHERE Expresie boolean] [GROUP BY {[{Numele tabelului |Numele corelaiei }.]Numele cmpului }.,..] [HAVING Expresie boolean] Note. 1. Select-expresie din SELECT, folosit n calitate de valoare pentru cmpul selectat, trebuie s returneze un tabel, ce const dintr-un rnd i o coloan, adic o expresie scalar. 2. Expresie boolean din WHERE trebuie s fire verificat pentru toate rndurile, ce sunt candidate la mulimea rndurilor rezultate. n aceast expresie pot fi folosite subinterogri. 3. HAVING conine expresie boolean, ce se execut pentru fiecare grup, definit de lista de grupare din GROUP BY. Aceast expresie boolean poate conine funcii agregat, ce se calculeaz pentru toate grupele. Expresiea boolean, scris n WHERE, poate fi trecut n HAVING, dar nu este recomandabil pentru un programator. Trecerea condiiilor din HAVING n WHERE nu este posibil, dac expresie boolean conine funcii agregat. 4. Dac n SELECT exist funcii agregat, ele se calculeaz diferit, n dependen de existena GROUP BY. Dac GROUP BY lipsete, rezultatul interogrii returneaz nu mai mult de un rnd. Funciile agregat se calculeaz pe toate rndurile, ce satisfac condiiei din WHERE. Dac GROUP BY exist, atunci funciile agregat se calculeaz aparte pentru fiecare grup, indicat n GROUP BY. Expresie scalar - n calitate de expresii scalare n SELECT pot fi sau nume de cmp a tabelelor ce sunt n FROM, sau funcii simple, ce returneaz valori scalare. Funcie agregat ::= COUNT (*) | {{COUNT | MAX | MIN | SUM | AVG} ([ALL | DISTINCT] Expresie scalar )} Constructorul de valori a tabelului ::= VALUES Constructorul de valori a rndului .,.. Constructorul de valori al rndului::= Element al constructorului | (Element al constructorului.,..) | Select-expresie Not. Select-expresie, folosit n constructorul de valori al rndului, trebuie s returneze un singur rnd. Element al constructorului ::= Expresie pentru calcularea valorii | NULL | DEFAULT

Pagina 3 din 6

Conspect la MySQL Sintaxa unirii tabelelor n compartimentul FROM a instruciunii SELECT putem folosi unirea tabelelor Tabel unit ::= Unire ncruciat | Unire natural | Unire prin intermediul predicatului | Unire prin intermediul numelui de coloan| Unire de legtur Tipul legturii ::= INNER | LEFT [OUTER] | RIGTH [OUTER] | FULL [OUTER] Unire ncruciat::= Tabelul CROSS JOIN Tabelul Unire natural ::= Tabelul [NATURAL] [Tipul legturii] JOIN Tabelul Unire prin intermediul predicatului::= Tabelul [Tipul legturii ] JOIN Tabelul ON Predicatul Unire prin intermediul numelui de coloan::= Tabelul [Tipul legturii ] JOIN Tabelul USING (Numele cmpului .,..) Unire de legtur ::= Tabelul UNION JOIN Tabelul

15

CROSS JOIN - Unire ncruciat returneaz produsul cartezian al tabelelor. Aa unire poate fi nlocuit cu lista tabelelor prin virgul n compartimentul FROM. NATURAL JOIN - Unire natural - se efectuaz dup toate coloanele tabelor i , ce au acelai nume. n tabelul rezltat coloanele cu acelai nume se ntlnrsc numai o singur dat. JOIN ON - Unire prin intermediul predicatului unete rnduri ale tabelelor i prin intermediul predicatului indicat. JOIN USING - Unire prin intermediul numelui de coloan unete ca i n cazul unirii naturale dup coloanele comune din i B, ce sunt indicate n USING. INNER - Tipul legturii "interne". Tipul legturii interne se folosete prin convenie, cnd nu se indic tipul. n tabelele i se unesc numai acele rnduri, pentru care sa gsit coinciden. LEFT (OUTER) - Tipul legturii "de stnga (extern)". Unirea de stnga a tabelelelor i are ca rezultat toate rndurile tabelului din stnga i acele rnduri din tabelul din dreapta , pentru care sa gsit coinciden. Pentru rndurile din , la care nu sa gsit coresponden n , n coloanele extrase din , se scrie valoarea NULL. RIGHT (OUTER) - Tipul legturii "de dreapta (extern)". Unire de dreapta a tabelelor i are ca rezultat toate rndurile tabelului din dreapta B i acele rnduri din tabelul A, pentru care sa gsit coinciden. Pentru rndurile din B, la care nu sa gsit coresponden n A, n coloanele extrase din A, se scrie valoarea NULL. FULL (OUTER) - Tipul legturii "total (extern)". Este o combinaie dintre unirea de stnga i de dreapta. n unirea total sunt introduse toate rndurile din ambele tabele. Pentru rndurile ce coincid se scriu valorire reale, pentru care nu coincid se completeaz conform legilor legturii de stnga i de dreapta. UNION JOIN - Unire de legtur este invers cu unirea intern. Se includ numai acele rnduri din tabelele i , pentru care nu sau gsit coincidene. Se scrie NULL pentru cmpurile obinute din alt tabel

Pagina 4 din 6

Conspect la MySQL

15

Sintaxa expresiilor booleene din compartimentul WHERE Expresie boolean, folosit n WHERE a instruciunii SELECT trebuie s se calculeze pentru fiecare rnd candidat, ales de SELECT. Expresiea boolean poate returna una din trei valori: TRUE, FALSE sau UNKNOUN. Rndul se selecteaz numai dac rezultatul este TRUE. Expresie boolean ::= [ ( ] [NOT] {Predicatul Comparrii | Predicatul between | Predicatul in | Predicatul like | Predicatul null | Predicatul comparrii numerice | Predicatul exist | Predicatul unique | Predicatul match | Predicatul overlaps} [{AND | OR} Expresie boolean] [ ) ] [IS [NOT] {TRUE | FALSE | UNKNOWN}] Predicatul Comparrii ::= Constructorul de valori al rndului{= | < | > | <= | >= | <>} Constructorul de valori al rndului Exemplu 1. Compararea cmpului tabelului cu o valoare scalar: POSTAV.VOLUME > 100 Exemplu 2. Compararea a dou rnduri: (PD.PNUM, PD.DNUM) = (1, 25) Acest exemplu este echivalent cu: PD.PNUM = 1 AND PD.DNUM = 25 Predicatul between ::= Constructorul de valori al rndului [NOT] BETWEEN Constructorul de valori al rndului AND Constructorul de valori al rndului Exemplu 3. PD.VOLUME BETWEEN 10 AND 100 Predicatul in ::= Constructorul de valori al rndului [NOT] IN {(Select-expresie ) | (Expresie pentru calcularea valorilor.,..)} Exemplu 4. P.PNUM IN (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2) Exemplu 5 . P.PNUM IN (1, 2, 3, 5) Predicatul like ::= Expresie pentru calcularea valorii rndului cutat [NOT] LIKE Expresie pentru calcularea valorii rndului ablon [ESCAPE simbol] Not. Predicatul LIKE efectuaz cutarea rndului de cutat n rndului ablon. n rndul ablon se permite de folosit: Simbolul sublinierii "_" poate fi folosit n loc de orice alt simbol din rndului cutat, Simbolul procent "%" poate nlocui orice combinaie de semne (inclusiv 0). Predicatul null ::=Constructorul de valori al rnduluiIS [NOT] NULL Not. Predicatul NULL se folosete special pentru verificarea dac nu este egal expresia controlat cu valoarea null. Predicatul comparrii numerice ::= Constructorul de valori al rndului{= | < | > | <= | >= | <>} {ANY | SOME | ALL} (Select-expresie ) Note 1. ANY i SOME sunt sinonime. Dac se indic unul din cuvintele cheie ANY i SOME, atunci predicatul comparrii numerice returneaz TRUE, dac valoarea comparat coincide mcar cu o valoare, returnat de subinterogare (select-expresie). 2. Dac se indic ALL, predicatul comparrii numerice returneaz TRUE, dac valoarea comparat coincide cu fiecare valoare, returnat de subinterogare. Exemplu 6. P.PNUM = SOME (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2) Predicatul exist ::= EXIST (Select-expresie ) Not. Predicatul EXIST returneaz valoarea TRUE, dac rezultatul subinterogrii (select-expresie) nu este gol. Predicatul unique ::= UNIQUE (Select-expresie ) Not. Predicatul UNIQUE returneaz TRUE, dac n rezultatul subinterogrii (select-expresie) nu sunt rnduri ce coincid. Predicatul match ::= Constructorul de valori al rndului MATCH [UNIQUE] [PARTIAL | FULL] (Select-expresie ) Pagina 5 din 6

Conspect la MySQL

15

Not. Predicatul MATCH verific dac valoarea definit n constructorul de rnduri va coincide cu valoarea oricrui rnd obinut n rezultatul subinterogrii . Predicatul overlaps ::=Constructorul de valori al rndului OVERLAPS Constructorul de valori al rndului Not. Predicatul OVERLAPS, este un predicatul special, ce permite s determinm, dac perioada de timp indicat va fi mai mare ca alt perioad de timp.

Pagina 6 din 6

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