P. 1
LIMBAJUL SQL

LIMBAJUL SQL

|Views: 64|Likes:
Published by alma_black
SQL
SQL

More info:

Categories:Types, School Work
Published by: alma_black on Feb 07, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

01/28/2014

pdf

text

original

LIMBAJUL SQL

• SQL (Structured Query Language), a fost conceput iniţial de firma IBM, pentru produsul dBASE, ca un limbaj standard de descriere a datelor şi de acces la informţtiile din bazele de date. Limbaj de interogare a bazelor de date relaţionale, SQL a fost utilizat pe scară largă şi pană în prezent au fost dezvoltate şapte versiuni ale standardului SQL, trei dintre ele aparţinînd Institutului National American de Standarde (ANSI), celelalte fiind concepute de firme de prestigiu ca IBM, Microsoft şi Borland sau de cãtre consorţii ca SAG (The SQL Access Group) şi X/Open.

• Primul standard SQL a fost creat in anul 1989 de cãtre ANSI fiind cunoscut sub numele de ANSISQL'89 şi a fost revizuit in octombrie 1992 sub noua denumire: ANSI-SQL'92. • In anul 1992, firma Microsoft, in calitate de membru SAG, a lansat pe piata produsul ODBC (Open Database Connectivity), un standard API-SQL care defineste o interfatã de programare a aplicaţiilor (API) pentru accesul la bazele de date.

dupa cum urmeaza: • clauza SELECT mentioneaza o lista de atribute şi corespunde proiectiei din algebra relaţionalã.• Clauzele SELECT. . FROM şi WHERE • Clauzele SQL SELECT. FROM şi WHERE pot fi puse în corespondentã cu operatorii din algebra relaţionalã. • clauza WHERE descrie un predicat de selectie şi corespunde selectiei din algebra relaţionalã. • clauza FROM mentioneazã o listã de relatii (tabele) şi corespunde produsului cartezian din algebra relaţionala.

... An FROM R1. Rm WHERE P Unde: Ai sunt atribute care apar în cel putin una dintre relatiile Ri.An(p(R1 X R2 X…XRm)) .• • • • • • • • • O interogare simpla SQL este de forma: SELECT A1... A2.. Interogarea este echivalentã cu urmatoarea expresie din algebra relaţionalã: A1.A2. ..…. Ri sunt relatii (tabele). P este un predicat de selectie. R2.

• Intotdeauna rezultatul unei interogari SQL este o relatie (o tabela). • Lista de atribute care apare in clauza SELECT din SQL poate fi inlocuita cu simbolul * daca se doreste selectarea tuturor atributelor care apar in relatiile din clauza FROM.• In SQL. . "select" desemneaza proiectia iar in algebra relaţionala acelasi termen desemneaza selectia dupa un predicat de selectie.

. nume_produs. cod_furnizor. • Tabela COMENZI cu schema de relatie (nr_comanda.• Tabela FURNIZORI cu schema de relatie (cod_furnizor. • Tabela FLORI cu schema de relatie (cod_produs. data_comenzii. timp_livrare. culoare. cantitate). pret_unitar). inaltime. cod_produs. nume_furnizor. adresa_furnizor).

• • • •

1) "Sa se afiseze toate datele despre toti furnizorii" SELECT * FROM furnizori 2) "Sa se afiseze orasele de resedinta ale tuturor furnizorilor" • SELECT oras • FROM furnizori • Ca rezultat al acestei interogari se va obtine o tabela cu o singura coloana, care contine numele oraselor de resedinta ale furnizorilor. Se va observa ca se repeta numele oraselor, deoarece se vor afisa orasele pentru fiecare furnizor in parte din tabela FURNIZORI.

• O interogare SQL are urmatoarea forma generala: • SELECT [DISTINCT/ALL] <lista de atribute> • FROM <lista de relatii> • [WHERE <conditie> / GROUP BY< lista de atribute> / • HAVING <conditie> / ORDER BY <lista de atribute> • [ASC / DESC] / UNION <sub_interogare>]; ... ...

• Dupã cum se observã, singurele elemente obligatorii intr-o interogare SQL sunt clauzele SELECT cu lista de atribute ce vor fi extrase şi clauza FROM cu relatiile din care fac parte atributele. Asadar o interogare SQL trebuie sa contina cel putin urmatoarele informatii: • SELECT <lista de atribute> • FROM <lista de relatii> • restul clauzelor sunt optionale.

în ordinea în care au fost definite în aceastã relatie (in locul acestei liste se poate utiliza semnul "*"). • toate atributele din relatia asupra careia se aplica interogarea. MIN( ). de la stanga la dreapta. • -variabile de memorie. COUNT( ). • expresii care contin functii SQL agregat cum ar fi AVG( ).• Lista de atribute poate consta din : • o serie de atribute separate prin virgulã care vor apãrea în tabelarezultat în ordinea explicitatã în linia de comandã. SUM( ) .. MAX( ). • -constante.. • expresii formate din urmatoarele elemente: • -atribute şi operatori aritmetici (de exemplu: cantitate*pret_unitar) • -functii standard (de exemplu CTOD( )). .

• In exemplele de mai sus. In acest mod numai prima aparitie a unui tuplu este afisatã în tabela-rezultat. • EXEMPLU: • "Sa se afiseze toate orasele resedinte ale furnizorilor. dar sa apara fiecare oras o singura data in tabelarezultat" • SELECT DISTINCT oras • FROM furnizori . pentru a evita repetarea unor informatii in tabelele rezultat se poate utiliza cuvintul cheie DISTINCT. Optiunea DISTINCT permite eliminarea tuplelor duplicat.

(numite alias) numelor de tabele ce vor fi utilizate în interogare. este utilã atribuirea unor prescurtãri..• Clauza FROM are forma generala: • FROM <<nume relatie>/ <nume view>[<alias>] . . In cazul în care se operazã cu mai multe tabele. > • si specifica relatiile (pot fi şi nume de view) din care vor fi regãsite datele..

cod_furnizor=B.cod_furnizor . B.• 1) "Sa se afiseze codurile furnizorilor şi numerele de comanda corespunzatoare pentru toti furnizorii care a cel putin o comanda" • SELECT 1. comenzi B • WHERE 1.numar_comanda • FROM furnizori 1.cod_furnizor.

numar_comanda • FROM furnizori A.cod_furnizor.cod_furnizor . comenzi B • WHERE A. numele furnizorilor. nume_furnizor.• 2) "Sa se afiseze codurile furnizorilor. cantitate. cantitatile. şi numerele comenzilor pentru toti furnizorii care au cel putin o comanda" • SELECT A.cod_furnizor=B.

• A se observa ca in al doilea exemplu nu sa mai utilizat notatia cu alias pentru atributul numar_comanda din tabela comenzi deoarece nu este pericol de confuzie. In schimb s-a utilizat notatia pentru a deosebi atributul cod_furnizor din tabela furnizori de atributul cu acelasi nume din tabela comenzi. .

• Numai tuplele care satisfac predicatul de selectie vor fi incluse in tabela-rezultat .• Pentru a restrange tuplele ce apar în tabela-rezultat. • Clauza WHERE are forma generala: • WHERE <predicat> / <expresie>. se specificã o conditie de cãutare prin utilizarea unui predicat de selectie in clauza WHERE.

operatori SQL: IN./ * ** ^ • .aritmetici: + . EXISTS. ANY .relaţionali: < > <= >= <> != = • . ALL.logici: NOT AND OR • .• Predicatul de cãutare poate fi specificat printr-o conditie logica in care se utilizeaza urmatoarele elemente: • operatori: • .

se pot utiliza atribute.• sub-interogãri (exprimate prin interogari SQL).cu observatia cã acestea vor fi primele evaluate şi tabela-rezultat trebuie sã corespundã operatorilor ce i se aplicã în continuare. • Ca operanzi. functii sau expresii algebrice. • Operatorii aritmetici • Acesti operatori sunt binecunoscuti şi mentionam aici doar faptul ca şi ** şi ^ reprezinta ridicarea la putere. . constante. Expresiile algebrice pot aparea in clauzele SELECT sau WHERE.

• "Sa se afiseze codul produsului şi valoarea pe care o reprezinta cantitatea de produs comandata la diversi furnizori" • SELECT cod_produs. cantitate*pret_unitar • FROM comenzi • WHERE cantitate<>0 .

!<(nu mai mic). >. Se obtin operatorii: !=(diferit). <= mai mic sau egal => mai mare sau egal <> diferit Facem observatia că valorile comparate trebuie să apartină unor tipuri de date compatibile (care se pot compara intre ele). .• • • • • • • • Operatorii relaţionali < mai mic > mai mare ! negarea operatorilor <. !>(nu mai mare). =.

" • SELECT cod-produs • FROM flori • WHERE culoare='alb' .• "Sa se afiseze codurile plantelor de culoare alba.

Operatorul NOT are cea mai mare prioritate. tipul de operator logic este dat de precedenta operatorilor. evaluarea se va face de la stanga la dreapta. .• Operatorii logici • Dacã o clauzã WHERE contine mai multe conditii formate prin utilizarea aceluiasi tip de oparator logic. • Pentru a schimba ordinea de evaluare a unei expresii se utilizeazã parantezele rotunde (). urmat de AND şi OR care practic sunt de prioritati egale.

inaltime • FROM flori • WHERE (culoare='alb‘) OR (inaltime<50) .• 1) "Sa se afiseze numele plantelor de culoare alba şi de inaltime minima 50 cm" • SELECT nume_planta • FROM flori • WHERE culoare='alb' AND inaltime>=50 • 2) "Sa se afiseze numele. culoarea şi inaltimea plantelor care fie au culoarea alba fie sunt de inaltime mai mica de 50 cm" • SELECT nume_planta. culoare.

culoare.• 3) A se observa ca ultima interogare este echivalenta cu interogarea • SELECT nume_planta. inaltime • FROM flori • WHERE culoare='alb' OR NOT inaltime>=50 .

Pentru modificarea ordinii de afisare se utilizeazã clauza ORDER BY..• Ordonarea tuplelor (clauza ORDER BY) • În exemplele anterioare. Forma generala a acestei clauze este: • ORDER BY <(<nume atribut>/<numãr întreg>)(ASC/ DESC)>....A.. Ordinea este: 0.... tuplele tabelei-rezultat apar în aceeasi ordine în care au fost introduse. .Z.a.....9.. Afisarea în ordine descrescãtoare se poate face prin utilizarea optiunii DESC.z conform codului ASCII. • Tuplele sunt ordonate în mod implicit în ordine ascendentã (ASC)...

se poate preciza pozitia atributului în lista de atribute specificate în comanda SELECT.• "Sa se afiseze datele despre florile din evidente in ordinea alfabetica a numelor florilor. nume_furnizor • FROM furnizori • ORDER BY 1 DESC." • SELECT * • FROM flori • ORDER BY nume_planta. ASC • A se observa ca daca ar fi lipsit mentiunea ASC. 3 ASC . ordinea tuplelor ar fi fost aceeasi deoarece ordinea ascendenta este implicita. • EXEMPLU: • SELECT oras. • În loc de precizarea numelui atributului dupã care se face ordonarea. cod_furnizor.

• "Sa se afiseze toate datele despre furnizorii care au sediul in Bucuresti sau in Brasov sau in Cluj" • SELECT * • FROM furnizori • WHERE oras IN ('BUCURESTI'. 'CLUJ') . Predicatul IN testeazã dacã valoarea unui atribut specificat în lista de atribute din clauza WHERE se potriveste uneia din valorile listei specificate în predicatul IN (testeazã apartenenta la o multime).• Operatorul IN permite simplificarea predicatului de cãutare. 'BRASOV'.

Functii standard sunt: • -valoarea medie . cunoscute şi sub numele de functii agregat.• Functii standard • Functiile standard.COUNT • NOTA: Nu este permisa utilizarea acestor functii in clauza WHERE deoarece ele actioneaza la nivel de atribut şi nu la nivel de tuplu. .AVG • -valoarea minima .MAX • -total(sumare) .SUM • -numãrãtoare . apar in clauza SELECT şi se aplica atributelor din tabelele implicate in interogare.MIN • -valoarea maxima .

urmãtoarea interogare are ca rezultat afisarea cantitãtii totale şi a numãrului de produse din fisierul de comenzi.• • • • • • • • • 1) "Care este cantitatea minima comandata?" SELECT MIN(cantitate) FROM comenzi Spre exemplu. SELECT SUM(cantitate). COUNT(*) FROM comenzi 2) "Care este cantitatea medie comandata?" SELECT AVG(cantitate) FROM comenzi .

• 3) "Care este cantitatea totala comandata din planta cu cod '202'?" • SELECT SUM(cantitate) • FROM comenzi • WHERE cod_produs='202' • 4) "Cate tuple contine tabela de flori?" • SELECT COUNT(*) • FROM flori • 5) "Cate culori de flori sunt inregistrate pentru florile din fisier?" • SELECT COUNT(DISTINCT culoare) • FROM flori .

în special prin aplicarea functiilor agregat.• Gruparea rezultatelor (clauza GROUP BY) • În multe cazuri. utilizatorul doreste anumite situatii sintetice. . Pentru aceaste operatii. cum ar fi obtinerea de totaluri şi subtotaluri. limbajul SQL permite utilizarea clauzelor GROUP BY şi HAVING. Aceste clauze organizeazã tuplele în grupuri asupra cãrora se pot realiza anumite operatii.

• Clauza GROUP BY grupeazã tuplele din relatie dupã atributele cu aceeasi valoare care sunt specificate în clauzã.atribute care alcãtuiesc baza pentru grupare (cele care apar în clauza GROUP BY) • .atribute care nu participa la gruparea rezultatelor. • Atributele care apar în clauza SELECT pot fi de douã feluri: • . dar sunt constante pentru grup. şi generezã un singur tuplu pentru fiecare grup de tuple cu aceeasi valoare pe atribut. .

• • • • • • • • • 1) "In ce orase exista furnizori ai florariei?" SELECT oras FROM furnizori GROUP BY oras In urma executarii interogarii vor apare orasele din fisierul de furnizori listate o singura data. COUNT(*) FROM furnizori GROUP BY oras . 2) "Cati furnizori au sediul in fiecare oras?" SELECT oras.

.• 3) "In care orase locuiesc cel putin 3 furnizori?" • SELECT oras. COUNT(*) • FROM furnizori • GROUP BY oras • HAVING COUNT(*)>=3 • Clauza GROUP BY se poate folosi şi cu clauzele ORDER BY şi WHERE.

• 2) "Care furnizori livreaza in interval de cel mult 17 zile?" • SELECT cod_furnizor • FROM comenzi • WHERE timp_livrare<17 • GROUP BY cod_furnizor .

Sintaxa interogarii SQL difera de la un SGBD la altul dar sub o forma directa sau printr-o constructie sintactica specifica se pot realiza oricare dintre operatiile amintite. Se pot de asemenea realiza operatii ca reuniunea. intersectia şi diferenta.• Interogari pe mai multe tabele • Una dintre operatiile cele mai frecvente realizate cu mai multe tabele este jonctiunea sau produsul cartezian. Jonctiunea aminteste de operatiile din algebra relaţionala şi chiar este posibil de realizat (urmand anumite structuri ale interogarii SQL) oricare dintre tipurile de jonctiune prezentate teoretic in cadrul algebrei relaţionale. .

nr_comanda • FROM furnizori 1. numele furnizorilor.• 1) "Sa se afiseze codurile furnizorilor.cod_furnizor. comenzi b • WHERE 1. . Exista doua atribute in tabele diferite care au acelasi nume: atributele cod_furnizor. nume_furnizor.cod_furnizor • A se observa scrierea cu notarea tuplelor care apartin fiecarei tabele pentru a evita orice confuzie in legatura cu tabela din care se va extrage informatia. Modul de notare de mai sus este acceptat de sintaxa SQL şi diferentiaza atributul cod_furnizor din tabela furnizori de atributul cod_furnizor din tabela comenzi.cod_furnizor=b. cantitatile comandate şi numerele comenzilor" • SELECT 1. cantitate.

cod_furnizor AND oras='Brasov' . cantitate. comenzi b • WHERE 1.cod_furnizor=b. nume_furnizor.cod_furnizor. nr_comanda • FROM furnizori 1.• 2) "Sa se afiseze datele de mai sus dar numai pentru furnizorii care au adresa in Brasov" • SELECT 1.

p2. flori p2 • WHERE p1. p1.• 3) "Ce flori au aceeasi inaltime cu laleaua?" A se observa ca aceasta interogare necesita realizarea produsului cartezian al tabelei FLORI cu ea insasi.nume_planta.nume_planta='LALEA' . p2.nume_planta. • SELECT p1.inaltime.inaltime • FROM flori p1.inaltime AND p2.inaltime=p2.

. intersectie şi diferenta de tabele actioneaza analog cu aceleasi operatii aplicate la multimi. In cazul cand dorim sa reunim doua sau mai multe tabele.• Clauza UNION • Clauza UNION permite realizarea reuniunii de tabele. Operatiile reuniune. Aceste conditii sunt impuse tabelelor implicate in operatiile intersectie şi minus (diferenta). este obligatoriu ca acestea sa fie descrise de scheme de relatie identice (acelasi numar de atribute şi corespunzator – de la stanga la dreapta – atributele din tabele au acelasi nume şi aceeasi descriere).

Am FROM … [WHERE …] .….…. Am FROM [WHERE …] UNION SELECT A1 .• • • • • • • • Forma generala a reuniunii de tabele este: SELECT A1 .

cod_produs • FROM flori • WHERE culoare='alb' AND inaltime>50) . cod_produs • FROM flori • WHERE culoare='alb' AND inaltime<20 • UNION • (SELECT nume_planta." • SELECT nume_planta.• 1) "Sa se afiseze numele plantelor şi codurile plantelor albe care au inaltimea fie mai mica decat 20 cm fie mai mare decat 50 cm.

formate din mai multe subinterogãri simple.• . Subinterogari (clauze SELECT imbricate) • Unul din motivele pentru care SQL este considerat un limbaj puternic de interogare este acela cã oferã posibilitatea construirii interogãrilor complexe. • Aceste interogãri complexe sunt construite prin includerea în clauza WHERE a inca unei clauze SELECT. .

Forma generala a unei astfel de constructii este: • SELECT < lista atribute1 > • FROM < lista relatii1 > • WHERE < subinterogare > • Se observa ca aceasta constructie a fost deja utilizata in exemplul de mai sus care ilustreaza o clauza UNION. .• .

• In constructia de mai sus clauza SELECT interioarã genereazã valorile pentru conditia de cãutare a clauzei SELECT exterioare care o contine. .subinterogãri care returneazã o singurã valoare • .În acest sens. putem distinge: • . Clauza SELECT exterioarã genereazã o relatie pe baza valorilor generate de cãtre clauza interioarã. Modul de constuire a interogãrii exterioare depinde de numãrul valorilor returnate de cãtre interogarea interioarã .subinterogãri care returneazã mai multe valori.

• subinterogãri corelate • Valorile returnate de cãtre interogarea interioarã depind de valorile returnate de cãtre interogarea exterioarã. .• Din punctul de vedere al ordinii de evaluare al interogãrilor putem distinge: • subinterogãri simple • Interogarea interioarã este evaluatã prima. Interogarea interioarã este evaluatã repetat pentru fiecare tuplu cercetat de interogarea exterioara. Rezultatul evaluãrii interogãrii interioare este utilizat de cãtre interogarea exterioarã . independent de interogarea exterioarã.

• Subinterogãri simple care returnezã o singurã valoare • Aceste interogãri au urmãtoarea sintaxã: • SELECT < lista atribute > • FROM < lista relatii > • WHERE < atribut >  (< subinterogare >) • unde  este un operator relaţional: = < > >= <= != .

• • • • • • • • • • • • • • SELECT nume_planta FROM flori WHERE inaltime= (SELECT inaltime FROM flori WHERE nume_planta='LALEA') Aceeasi interogare poate oferi lista numelor de plante in ordine alfabetica inversa daca se utilizeaza şi o clauza ORDER BY. SELECT nume_planta FROM flori WHERE inaltime= (SELECT inaltime FROM flori WHERE nume_planta='LALEA') ORDER BY nume_planta DESC .

Rezultatul evaluãrii interogãrii interioare devine conditie de cãutare pentru interogarea exterioarã. • Valoarea obtinuta pentru atributul inaltime (sa presupunem ca laleaua are 30 cm) este stocata într-o tabela temporara.• Procesul de evaluare a acestei interogãri se desfãsoarã astfel: • Se evalueazã în primul rînd interogarea interioarã. care ar putea fi exprimata in aceasta faza ca: • SELECT nume_planta • FORM flori • WHERE inaltime=30 . Conditia de evaluare a interogãrii interioare este nume_planta='LALEA'.

• Interogarea interioarã poate contine în clauza WHERE şi conditii complexe. MAX. ce va contine tuplele a cãror inaltime este aceeasi cu valoarea stocata în tabela temporarã.• In urma executarii interogarii exterioare este creatã o relatie finalã. . …). OR) şi a functiilor agregat (AVG. AND. formate prin utilizarea operatorilor logici (NOT.

• "Sa se afiseze numele plantelor care au inaltimea minima" • SELECT nume_planta • FORM flori • WHERE inaltime= • (SELECT MIN(inaltime) • FROM flori) .

In aceastã categorie intrã operatorii (NOT) IN. (NOT) ANY. genereazã o multime de valori. . (NOT) ALL. (NOT) EXISTS.• Subinterogãri simple care returnezã mai multe valori • Principiul de construire a acestui tip de interogare imbricatã utilizeazã în clauza WHERE conditii. care evaluate.

• 1) "Care furnizori mai au inca de executat livrari?" • SELECT nume_furnizor • FROM furnizori • WHERE cod_furnizor IN • (SELECT cod_furnizor • FROM comenzi • GROUP BY cod_furnizor) .

dintre furnizorii obisnuiti ai florariei. De asemenea se poate remarca faptul ca prima interogare aminteste de apartenenta din teoria multimilor iar a doua interogare corespunde operatiei minus (diferenta).• 2) "Care furnizori. . nu mai au nimic de livrat?" • SELECT nume_furnizor • FROM furnizori • WHERE cod_furnizor NOT IN • (SELECT cod_furnizor • FROM comenzi • GROUP BY cod_furnizor) • A se observa ca cele doua interogari difera doar prin operatorul logic NOT.

. se poate construi aceasta operatie cu ajutorul predicatului NOT IN ca in exemplul de mai sus.• Daca versiunea SQL nu are un cuvant rezervat pentru operatia diferenta intre tabele.

• 3) "Care furnizori au numarul maxim de comenzi de flori?" • SELECT nume_furnizor • FROM furnizori • WHERE cod_furnizor IN • (SELECT cod_furnizor • FROM comenzi • GROUP BY cod_furnizor • HAVING COUNT(*)= • (SELECT MAX(COUNT(cod_furnizor)) • FROM comenzi • GROUP BY cod_furnizor)) .

este evaluatã interogarea interioarã. dupã care valoarea sau valorile rezultate erau utilizate de cãtre clauza WHERE din interogarea exterioarã. trebuie asigurate alias-uri pentru fiecare referintã la tabelul respectiv. caz în care interogarea exterioarã transmite repetat cîte o valoare pentru interogarea interioarã. • De fiecare datã cînd este transmisã o valoare. interogarea interioarã era evaluatã prima. Ambele interogãri accesezã tuple diferite din acelasi tabel în acelasi moment. • Exista şi o alt forma de subinterogare şi anume subinterogarea corelatã.• Subinterogãri corelate • În exemplele de panã acum. . Dacã ambele interogãri acceseazã acelasi tabel.

culoare) • ORDER BY culoare . inaltime. ordonate dupa culoare" • SELECT culoare. inaltimea şi numele plantelor pentru plantele cu inaltimea maxima. nume_planta • FROM flori f • WHERE inaltime= • (SELECT MAX(inaltime) • FROM flori • WHERE culoare=f.• "Sa se afiseze culoarea.

EXISTS ia valoarea de adevãr TRUE. operatorul EXISTS apare in clauza WHERE. operatorul EXISTS permite specificarea mai multor atribute în interogarea interioarã. ci se genereazã o valoare de adevãr (TRUE sau FALSE). Astfel. In cazul în care existã asemenea tuple.• Operatorul EXISTS • Operatorul EXISTS verificã dacã pentru fiecare tuplu al relatiei existã tuple care satisfac conditia interogãrii interioare. . Acest lucru este posibil deoarece nu se verificã valoarea unui anumit atribut ca în cazurile anterioare. dupã cum existã sau nu existã o anumitã valoare într-o relatie diferitã de cea utilizatã în interogarea exterioarã. • Ca şi operatorii ANY şi ALL.

pret_unitar) • Interogarea SELECT interioarã defineste o tabela care contine acele tuple pentru care se verifica conditia din clauza WHERE interna. pret_unitar.• "Care plante au un pret unitar egal sau mai mic cu cea mai ieftina planta de culoare alba?" • SELECT nume_planta. conditia NOT EXISTS este evaluatã la valoarea logica TRUE. Daca nu exista nici o planta de culoare alba şi care sa aiba pretul unitar mai mare decat pretul unitar din tuplul curent. . culoare • FROM flori f • WHERE NOT EXISTS • (SELECT * • FROM flori • WHERE culoare='alb' AND pret_unitar>f.

Cutii_poştale.Apartament. Nr_pers_prez. Etaj. Scara.Familii (Nr_mat.Scara.Nume) . Scara. Nr_pers. Nr_prize_tv) • . Apartament. Nr_chei) • -Locatari (Nr_Mat. Nr_bloc. Lift) • Apartamente(Nr_bloc.Supraf aţa.• Se dau următoarele relaţii cu schemele lor: • -Scări (Nr_bloc.

3 ale blocului 34 • lista apartamentelor cu suprafaţa mai mare decât 50 mp • tabel nominal cu persoanele carelocuiesc pe scara 3 bloc 34 şi nu locuiesc şi pe scara 1 a aceluiaşi bloc .• Să se exprime în SQL cererile: • (tabel nominal cu locatarii de pe scara = 3 din bloc = 34) = R1 • (tabel nominal cu locatarii de pe scara = 1 din bloc = 34) = R2 • (tabel nominal cu locatarii de pe scara = 2 din bloc = 34) = R3 • tabel nominal cu locatarii de pe scările 1.2.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->