Subcomerii care returnează mai multe valori

Acest grup include subcheiri care încep cu IN, NOT IN sau un operator de comparare cu cuvintele cheie ORICE sau TOATE.

Subqueries începând cu IN și NOT IN







Rezultatul subchetei, începând cu IN și NOT IN, este o listă care include zero până la câteva valori. După ce subansamblul returnează rezultatele, o interogare externă va începe să fie procesată.

Lista de selecție a subdotării interne poate include numai o expresie sau un nume de coloană.

Coloana a cărei denumire specificați în clauza WHERE a instrucțiunii exterioare trebuie să fie compatibilă pentru compararea cu coloana al cărei nume le specificați în lista de selectare a subdocumentului.

Obțineți o listă de clienți din Seattle care au încheiat un contract de închiriere de echipamente.

SQL:
SELECTați numele de familie, numele, regiunea
Din tbl_clients
WHERE regiune = 'Seattle' ȘI client_id IN (
SELECT client_id
FROM tbl_contract
JOIN tbl_service ON tbl_contract.service_id = tbl_service.service_id
WHERE serviciu = 'Inchiriere de echipament')

Acordați atenție admisibilității utilizării uniunii și a mai multor condiții din clauza WHERE atât în ​​interogarea internă, cât și în cea externă.

Obțineți o listă de clienți din Seattle care au semnat un contract de leasing pe echipament (un exemplu este inversul celor de mai sus).

SQL:
SELECTați numele de familie, numele, regiunea
Din tbl_clients
WHERE regiune = 'Seattle' ȘI client_id NOT IN (
SELECT client_id
FROM tbl_contract
JOIN tbl_service ON tbl_contract.service_id = tbl_service`service_id
WHERE serviciu = 'Inchiriere de echipament')







Urmăriri subiacente începând cu operatorii de comparație și includând cuvintele cheie ORICE sau TOATE

Într-un alt tip de subcheiri care nu se întorc sau nu returnează mai multe rânduri, se utilizează un operator de comparație, modificat cu cuvintele cheie ORICE sau TOATE.

Dacă subcheierea este precedată de cuvântul ALL, condiția de comparație este îndeplinită numai dacă este executată pentru toate valorile din coloana de subchetare rezultată.

SQL:
SELECT contract_id, contract_date
FROM tbl_contract
WHERE contract_date> ALL (
SELECT contract_date
FROM tbl_contract JOIN tbl_service ON tbl_contract.service_id = tbl_service.service_id
WHERE serviciu = 'Inchiriere de echipament')

Interogarea este executată în două etape. În primul rând, interogarea internă selectează o listă de date la care au fost încheiate contractele de închiriere a echipamentului. Interogarea externă găsește cea mai mare valoare din lista de date și pentru fiecare contract din tabel, tbl_contract determină dacă câmpul contract_date conține o dată mare.

Astfel, primim o listă de contracte încheiate după toate contractele de închiriere de echipamente.

ALL operatorului, de regulă, este utilizată în mod eficient cu inegalitățile, și nu cu ecuațiile, deoarece valoarea „toți egali“, care trebuie să se întoarcă în acest caz, ca urmare a interogării secundare, poate avea loc numai în cazul în care toate rezultatele sunt identice.

În SQL, expresia <> Totul înseamnă că nu este egal cu niciunul dintre rezultatele subcotării.

Dacă textul de subchetare este precedat de cuvântul cheie ORICE, atunci condiția de comparație va fi îndeplinită dacă este îndeplinită pentru cel puțin o valoare (sau mai mult) în coloana rezultată a subchetei.

SQL:
SELECT contract_id, contract_date
FROM tbl_contract WHERE contract_date SELECT contract_date
FROM tbl_contract JOIN tbl_serviceON tbl_contract.service_id = tbl_service.service_id
WHERE serviciu = 'Inchiriere de echipament')

Cererea de mai sus constată contractele încheiate anterior încheierii primului contract de servicii.

Dacă subdotarea interioară, pornind de la ALL sau ANY, returnează o valoare goală, se consideră că întreaga interogare a eșuat. În acest caz, nu veți obține rezultate, deoarece nu puteți compara cu valoarea NULL.







Articole similare

Trimiteți-le prietenilor: