Ajutați - pentru - sql (dml) utilizând mai multe tabele din interogare

Redenumirea este necesară, de asemenea, dacă clauza FROM folosește o subchetare. Deci, primul exemplu poate fi rescris după cum urmează:

SELECT DISTINCT PC.model, producator






Din PC,
(SELECT maker, model
Din produs) AS prod
WHERE PC.model = prod.model ȘI preț <600;

Rețineți că în acest caz nu mai puteți folosi calificatorul de produs în alte instrucțiuni SELECT. deoarece tabelul Produs nu mai este utilizat. În schimb, utilizează aliasul prod. În plus, acum vă puteți referi doar la acele câmpuri din tabelul Produs. care sunt listate în subchetă.

În clauza FROM, puteți specifica o operație explicită de îmbinare pentru două sau mai multe tabele. Printre numărul de operațiuni de conectare descrise în standardul SQL, multe servere de baze de date suportă doar o operație de integrare a predicatelor. Sintaxa de conectare prin predicate arată astfel:

Conexiunea poate fi internă (INNER) sau una dintre cele externe (OUTER). Cuvinte funcționale interioare și exterioare pot fi omise, deoarece conexiunea externă este definită în mod unic în funcție de tipul său - stânga (stânga), DREAPTA (dreapta) sau FULL (plin), ci pur și simplu se vor alătura vor însemna o conexiune internă.

Predicatul specifică condiția pentru asocierea șirurilor din diferite tabele. Astfel INTERIOARĂ ÎNSCRIEȚI înseamnă că setul de rezultate va include numai acei compuși de rânduri de două tabele, pentru care valoarea predicatului egal cu adevărat. Ca o regulă, predicatul definește un equi-join cu cheile externe și primare ale tabelelor conectate, deși acest lucru nu este necesar.







Un exemplu. Găsiți producătorul, numărul de model și prețul fiecărui computer disponibil în baza de date:

SELECT maker, Product.model AS model_1, PC.model AS model_2, pret
Din produsul INNER JOIN PC PC PC.model = Product.model
ORDER BY maker, PC.model;


În acest exemplu, numai acele rânduri de pe PC și tabelele de produse vor fi unite în setul de rezultate. care au aceleași numere de model.
Pentru control, rezultatul este inclus ca număr de model din tabela PC. și din tabelul Produs:

Deoarece modelele 2111 și 2112 din tabelul Produs nu se găsesc în tabelul PC. Câmpurile din tabela PC conțin NULL.
Conexiunea RIGHT JOIN se întoarce la conexiunea LEFT JOIN. și anume Setul de rezultate include toate rândurile din al doilea tabel care se va conecta numai la acele rânduri din primul tabel pentru care este îndeplinită condiția de conectare. În cazul nostru, legătura stângă

Produsul LEFT PC JOIN PC ON PC.model = Product.model

va fi echivalentul conexiunii corecte

PC RIGHT JOIN Produs ON PC.model = Product.model

SELECT maker, Product.model AS model_1, PC.model AS model_2, pret
Din produsul RIGHT JOIN PC ON PC.model = Product.model
ORDER BY maker, PC.model;


Acesta va da aceleași rezultate ca și conexiunea internă, deoarece tabelul din dreapta (PC) nu există modele care au fost absente în tabelul din stânga (produs), care este destul de natural pentru conexiunea, cum ar fi „unu-la-multe“, care este disponibil între masa de PC- și Produsului. În cele din urmă, compusul complet (FULL join) din tabela rezultat nu se încadrează numai acele rânduri care au aceleași valori în coloanele fiind comparate, dar, de asemenea, toate rândurile de tabele sursă care nu au valori corespunzătoare în celălalt tabel. În aceste rânduri, toate coloanele din tabel în care nu s-au găsit rezultate nu sunt completate cu valori NULL. O conexiune completă este o combinație de conexiuni externe stânga și dreapta.
Astfel, interogarea pentru tabelele A și B, dată la începutul capitolului,

SELECT A. *, B. *
DE LA UN COMPLET
Pe A.a = B.c;


dă următorul rezultat:







Articole similare

Trimiteți-le prietenilor: