Nivelele subîncărcate și asociate în sql, predicatul există

1) Subcârieri încorporate

SQL vă permite să puneți întrebări unul în celălalt. De obicei, subcheierea returnează o valoare care este verificată pentru adevărul predicatului.







Tipuri de condiții de căutare:
• Comparație cu rezultatul interogării imbricate (=, <>.> =)
• Verificarea faptului dacă rezultatele subchetei (IN)
• Verificarea existenței (EXISTS)
• Comparație multiplă (cantitativă) (ORICE, TOATE)

Note privind interogările imbricate:
• Interogarea secundară trebuie să aleagă doar o singură coloană (cu excepția predicatului subinterogare EXISTS), precum și tipul de date al rezultatului trebuie să se potrivească cu tipul de date din valoarea specificată în predicatul.
• În unele cazuri, puteți utiliza cuvântul cheie DISTINCT pentru a vă asigura că este obținută o singură valoare.
• Nu puteți include secțiunile ORDER BY și UNION într-o interogare imbricată.
• O subchetare poate fi găsită atât la stânga cât și la dreapta condiției de căutare.
• Subcheile pot utiliza funcții agregate fără o clauză GROUP BY care oferă automat o valoare specială pentru orice număr de rânduri, un predicat special IN și expresii bazate pe coloane.
• Dacă este posibil, folosiți tabelul JOIN se alătură în loc de subtraveriri.

Exemple pentru interogări imbricate:

2) subcotări conexe

În SQL, puteți crea subcotări cu o referință la o tabelă dintr-o interogare externă. În acest caz, subcheierea este executată în mod repetat, o dată pentru fiecare rând din tabel dintr-o interogare externă. Prin urmare, este important ca subdotarea să utilizeze indexul. O subchetare poate accesa aceeași tabelă ca o tabelă externă. Dacă interogarea exterioară returnează un număr relativ mic de rânduri, subchetrarea asociată va funcționa mai repede decât subdotarea independentă. Dacă subansamblul returnează un număr mic de rânduri, interogarea asociată se va desfășura mai lent decât interogarea neafiliată.

Exemple pentru subprocesele conexe:

SELECT * FROM principală, unde agenții de vânzări 1 (SELECT AVG (Amt) din ordinele O2 UNDE O2.CNum = O1.CNum) // returnează toate comenzile, valoarea care depășește valoarea medie a comenzii pentru cumpărător

3) Predicate EXISTS

Forma sintaxei: [NU] EXISTS ()

Predicatul folosește un subquery ca argument și îl evaluează ca fiind adevărat dacă subcheta are date de ieșire și altfel este falsă. O subdiviziune este efectuată o singură dată și poate conține mai multe coloane, deoarece valorile lor nu sunt verificate, ci pur și simplu rezultatul având rânduri.

Note cu privire la predicatul EXISTS:
• EXISTS este un predicat care returnează TRUE sau FALSE și poate fi folosit separat sau împreună cu alte expresii booleene.






• EXISTS nu poate utiliza funcții agregate în subdotarea sa.
• În subrutinele corelate (dependente, corelate), predicatul EXISTS este executat pentru fiecare rând al tabelului exterior.
• Puteți combina predicatul EXISTS cu conexiunile tabelului.

Exemple privind predicatul EXISTS:

SELECTAREA * DE LA Clientul WHERE EXISTS (SELECT * FROM Customer WHERE City = 'San Jose) - returneaza toti cumparatorii daca unul din ei locuieste in San Jose.
SELECTAREA DISTINCTULUI SNUM DE LA PRIMUL CUM NU EXISTĂ (SELECTEAZĂ * DE LA Clientul Trimiteți WHERE Send.SNum = First.SNum ȘI Send.CNum<>First.CNum) - returnează numărul de vânzători care au servit doar unui singur cumpărător.
SELECT DISTINCT F.SNum, sName, F.City DE LA F agenții de vânzări, client S UNDE EXISTA (SELECT * FROM T Client UNDE S.SNum = T.SNum ȘI S.CNum<>T.CNum și F.SNum = S.SNum) - returnează numerele, numele și orașele de reședință ale tuturor vânzătorilor care au servit mai mulți cumpărători.
SELECT * FROM SalesPeople Frst WHERE EXISTĂ (SELECT * FROM Customer Trimiteți unde Frst.SNum = Send.SNum AND 1

4) predicate comparative cantitative

Forma sintaxei: [NU] | = |> ORICE | ALL ()

Aceste predicate folosesc un subquery ca argument, totuși, în comparație cu predicatul EXISTS, ele sunt utilizate în conjuncție cu predicatele relației (=,<>.> =). În acest sens, ele sunt similare cu predicatul IN, dar ele sunt aplicate numai cu subqueries. Standardul vă permite să utilizați cuvântul cheie URM în loc de NICIUN, dar nu toate DBMS îl acceptă.

Note despre predicatele de comparație:
• ALL predicate este TRUE dacă fiecare valoare selectată în timpul executării unui subquery satisface condiția specificată în predicatul interogării exterioare. Cel mai adesea este folosit cu inegalități.
• Predicatul ALOC este TRUE dacă cel puțin o valoare selectată în timpul executării subquerului satisface condiția specificată în predicatul interogării exterioare. Cel mai adesea este folosit cu inegalități.
• Dacă subrogierul nu întoarce șiruri de caractere, atunci ALL va lua automat valoarea TRUE (se presupune că este îndeplinită condiția de comparație) și pentru ORICE - FALSE.
• Dacă comparația nu are valoare TRUE pentru niciun rând și există una sau mai multe rânduri cu o valoare NULL, atunci ORICE va întoarce UNKNOWN.
• Dacă comparația nu are o valoare FALSE pentru niciun rând și există una sau mai multe rânduri cu o valoare NULL, atunci ALL se întoarce UNKNOWN.

Exemple pentru predicatul comparației cantitative:

SELECT * FROM SalesPeople WHERE Oraș = ORICE (SELECT City FROM client)
SELECT * FROM Comenzi WHERE AmtALL (SELECT Rating de la client WHERE City = 'Roma')

5) Predicatul unicității

Predicatul servește pentru a verifica unicitatea (absența duplicatelor) la ieșirea din subchetă. În predicatul UNIQUT, liniile cu valori NULL sunt considerate unice, iar în predicatul DISTINCT două valori nedefinite sunt considerate egale.

6) Predicatul coincidentelor

Predicatul MATCH verifică dacă valoarea șirului de interogare se potrivește cu valoarea oricărui șir returnat ca rezultat al subchetei. Din predicate IN și ANY, această subclasificare este diferită, deoarece vă permite să gestionați potrivirile "parțiale" (PARTIALE) care pot apărea între șirurile care au o parte din valorile NULL.

7) Interogări în clauza FROM

SELECT CName, Tot_Amt de la client, (SELECT CNum, USM (Amt) AS Tot_Amt din comenzi GROUP BY CNum) UNDE Oraș = 'Londra' AND Customer.CNum = Orders.CNum
// subdotarea returnează valoarea totală a comenzilor făcute de fiecare cumpărător din Londra.

8) Întrebări recursive

Cu RECURSIVE
Q1 AS SELECT ... DE LA ... WHERE ...
Q2 AS SELECT ... DE LA ... WHERE ...







Trimiteți-le prietenilor: