Instrucțiunea subdotare - programare sql

O subchetare este o subchetare. Anumite subiecte pot apărea în diferite părți ale instrucțiunilor SQL.

Următoarele tipuri de subcheiri sunt acceptate în SQL.







Subcomerii care recuperează o singură valoare. Acesta este tipul de sub-solicitări cel mai bine susținute de diferite platforme.

Subdotări care recuperează mai multe valori. Acest tip de subansamblu preia valorile din mai multe coloane.

Nivele de subdiviziuni ale tabelei

Subdotări care recuperează mai multe coloane și mai multe rânduri.

Subtraveriile scalare și vectoriale pe unele platforme pot face parte din expresia din lista elementelor selectabile ale instrucțiunii SELECT, introduceți clauza WHERE și clauza HAVING. Nivelele de subdiviziuni ale tabelelor, ca regulă, apar în clasele FROM din instrucțiunile SELECT.

O subcorelare corelată este o subchetare care depinde de valoarea din interogarea exterioară. Prin urmare, interogarea internă este executată o singură dată pentru fiecare înregistrare extrasă de interogarea externă. Dacă există mai multe nivele de cuibare subcorelare, subdotarea corelată se poate referi la orice nivel al interogării principale care este mai mare decât nivelul propriu.

Funcționarea subchetei este supusă unor reguli diferite, în funcție de oferta în care este inclusă. Gradul de susținere pentru subcontrate în diferite platforme este, de asemenea, diferit. Unele platforme suportă subqueries în toate propozițiile menționate anterior (SELECT, FROM, WHERE și ON VING) și alte platforme - numai în una sau două dintre aceste propoziții.

Subcheile sunt de obicei asociate cu o instrucțiune SELECT. Deoarece sub-interogările pot fi în clauza WHERE poate fi utilizat în orice instrucțiune SQL care acceptă o clauză WHERE, inclusiv SELECT, INSERT SELECT, DELETE, am UPDATE.

Scalarele și subcheile de tabele, precum și subtraveriile de tabelă imbricate au următoarea sintaxă generală.

Subdotările corelate sunt mai complexe, deoarece valorile unor astfel de subruturi depind de valorile extrase de interogarea principală. De exemplu:

Rețineți că clauza IN este utilizată doar ca exemplu. Puteți utiliza orice operator de comparare.

Cuvinte cheie

O subdotare scalară este adăugată la lista elementelor de instrucțiuni SELECT sau la o clauză WHERE sau o interogare HAVING.

imbricate tabel subdotare

Un subset de tabel imbricat este adăugat numai la clauza FROM, iar clauza AS este de asemenea utilizată.

O subdiviziune de tabelă se adaugă numai la o clauză WHERE utilizând operatori precum IN, ANY, SOME, EXISTS sau ALL care acționează pe mai multe valori. Subdivizările de tabele returnează una sau mai multe rânduri care conțin aceeași valoare.

Reguli generale

Subdotările vă permit să obțineți una sau mai multe valori și să le plasați într-o instrucțiune SELECT, INSERT, UPDATE sau DELETE sau într-o altă subchetare. Subqueries pot fi utilizate ori de câte ori sunt permise expresii. De asemenea, sub-cererile pot fi adesea înlocuite cu instrucțiuni JOIN. Performanța subdotărilor poate fi mai mică decât performanța declarațiilor JOIN (depinde de platformă).

Subtragerile sunt întotdeauna închise în paranteze.

Subinterogarilor poate fi utilizat în clauza SELECT o listă de elemente constând din cel puțin un element din clauza FROM de referință unul sau mai multe tabele sau vizualizări, sau în propunerile și UNDE HAVING.

Subdotarea scalară poate returna o singură valoare. Unii operatori clauza WHERE va accepta doar o singură valoare (de exemplu, =.> == = AVG (SELECTcolumn 1 din salesTable ...). Această limitare poate fi, dacă rulați unitatea într-o subinterogare, nu în interogare exterioară.

Sfaturi și trucuri de programare

Cele mai multe platforme de furnizori nu vă permit să vă referiți la tipuri mari de date (de exemplu, CLOB și BLOB în Oracle și IMAGE și TEXT în SQL Server), precum și la tipurile de matrice (de exemplu, TABLE sau CURSOR în SQL Server).







Toate platformele suportă subtraveriile, dar nu toți furnizorii suportă toate tipurile de subcheiri. 3.6 arată tipurile de interogări acceptate de diferiți furnizori.

Subcomerările nu se limitează la instrucțiunile SELECT. Ele pot fi folosite și în instrucțiunile INSERT, UPDATE și DELETE care conțin o clauză WHERE. Subqueries sunt adesea folosite în următoarele scopuri.

  • Pentru a specifica rândurile care sunt inserate în tabela destinație folosind INSERT ... SELECT, CREATE TABLE ... SELECT sau SELECT ... INTO.
  • Pentru a specifica liniile de prezentare sau o vizualizare materializată în instrucțiunea CREATIE VIEW.
  • Pentru a specifica valorile asociate cu șirurile existente utilizând instrucțiunea UPDATE.
  • Pentru a specifica valorile pentru condițiile din clauzele WHERE și HAVING ale instrucțiunilor SELECT, UPDATE și DELETE.
  • Pentru a crea o vizualizare de tabelă (tabele) "în zbor" (adică submateriale de tabel imbricate).

Această secțiune oferă exemple care sunt la fel de potrivite pentru DB2, MySQL, Oracle, PostgreSQL și SQL Server.

Următoarea este o subcotare scalară simplă în lista de instrucțiuni SELECT.

Nivelele de subdiviziuni ale tabelei sunt echivalente din punct de vedere funcțional cu solicitările de vizualizare. În exemplul următor, vom cere un nivel de masă subquery nested educației (edlevel) și salariu (salariu), apoi efectuați agregarea valorilor de masă derivate din interogare exterioară.

Rețineți că pe anumite platforme această solicitare poate să nu funcționeze fără clauza AS, în care tabelul derivat are un nume.

Următorul exemplu prezintă o subdiviziune de tabele standard în clauza WHERE. În acest caz, avem nevoie de toate numerele de proiect ale angajaților din departamentul A00.

Subcheierea de mai sus este executată o singură dată într-o interogare externă.

În următorul exemplu, dorim să obținem numele angajaților și nivelul vechimii acestora. Setul de rezultate este obținut utilizând o subcotare corelată.

Spre deosebire de cea anterioară, această subchetare este executată o singură dată pentru fiecare rând recuperat de o interogare externă. Timpul de procesare pentru astfel de interogări poate fi destul de mare, deoarece interogarea internă poate fi executată de mai multe ori când se generează un set de rezultate.

Subdotările corelate depind de valorile primite de interogarea externă, care trebuie să fie primite înainte ca interogarea internă să fie procesată. Aceste solicitări sunt greu de stăpânit, dar oferă capabilități software unice. În exemplul următor, obținem informații despre comenzi, atunci când cantitatea cantității este mai mică decât media numărului de alte vânzări de bunuri cu același nume.

Putem atinge același obiectiv folosind o conexiune reflexivă (auto-aderare). Cu toate acestea, există situații în care o subcotare corelată este singura modalitate de a obține rezultatul dorit.

Următorul exemplu arată modul în care puteți utiliza o subcotare corelată pentru a actualiza valorile dintr-un tabel.

În mod similar, puteți utiliza subdotări pentru a determina ce rânduri să ștergeți. În exemplul următor, o subdotare corelată este utilizată pentru a șterge rânduri dintr-un tabel pe baza rândurilor aferente dintr-un alt tabel.

Platforma DB2 acceptă tipul de subclaterie ANSI. Se acordă permisiunea de a utiliza subinterogările scalare în instrucțiunea SELECT, lista de articole, subinterogari de masă imbricate - în clauza FROM, precum și scalare și vectoriale subinterogari în cazul în care și având o parte a propunerilor. Platforma DB2 vă permite să aplicați subdotare corelate în lista elementelor de instrucțiuni SELECT și în clauzele WHERE și VING.

Platforma MySQL acceptă utilizarea submateriilor de tabelă imbricate în listele de elemente și în propoziție.

Platforma suportă subansamble ANSI, deși se folosește o nomenclatură diferită. În Oracle, subunitățile de tabelă imbricate folosite în clauza FROM se numesc vederi inline. Și acest lucru este corect, deoarece submăsurile de tabel imbricate reprezintă, de fapt, reprezentări create "în mișcare". În Oracle, subcheile care sunt folosite în clauzele WHERE și HAVING se numesc subdotări imbricate. Oracle vă permite să utilizați subdotare corelate în lista elementelor din instrucțiunea SELECT și în clauzele WHERE și HAVING.

PostgreSQL

Platforma PostgreSQL suportă subcărți ANSI în clauzele FROM, WHERE și HAVING. Cu toate acestea, subcheile din clauza HAVING nu pot include clauzele ORDER BY, UPDATE și LIMIT. În prezent, PostgreSQL nu acceptă subcheiri din lista elementelor de instrucțiuni SELECT.

SQL Server

Platforma SQL Server suporta subsubturile ANSI. Subquerile scalare pot fi folosite aproape oriunde, unde pot fi folosite expresii standard. Subgramele SQL Server nu pot conține clauzele COMPUTE și FOR BROWSE. Puteți utiliza clauza ORDER BY dacă utilizați și clauza TOP.

Informații suplimentare despre acest subiect

Unele reguli și metode pentru utilizarea instrucțiunii SET în baze de date pe diferite platforme

Reguli și metode pentru utilizarea instrucțiunii INSERT în baze de date pe diferite platforme

Reguli și metode de utilizare a instrucțiunii MERGE în baze de date pe diferite platforme

Unele reguli și metode pentru utilizarea instrucțiunii SET ROLE în baze de date pe diferite platforme







Articole similare

Trimiteți-le prietenilor: