Corelate și necorelate subinterogările - studopediya

ALL operatorul este folosit pentru a compara expresia cu fiecare valoare din listă. Această listă poate fi întoarce atât fixe și subinterogarea. ALL este utilizat în combinație cu un semn egal <(или <=),> (Sau> =) =.

> ALL (> = ALL) înseamnă că expresia trebuie să fie mai mare decât (mai mare sau egal) din fiecare valoare din listă. Această condiție este îndeplinită în cazul în care expresia este mai mare (mai mare sau egal) valoarea maximă din listă.

= ALL - înseamnă că expresia trebuie să fie egală cu fiecare valoare din listă. (Desigur, acesta va fi executat numai în cazul în care lista de una sau mai multe din valoarea de aceeași valoare.)

Exemplu: Găsiți angajații care au fost angajați înainte de toți angajații din pozițiile „Warehouse Manager“:

UNDE START_DATE

UNDE title = 'Warehouse Manager');

După cum sa menționat deja, o condiție cu operatorul

UNDE START_DATE <(SELECT MIN(start_date)

UNDE title = 'Warehouse Manager');

În unitățile subcereri de adiție de pe o singură linie și multi-line, există o diviziune în subinterogari corelate și necorelate. Aceste subinterogare necorelate selectate nu depinde de cererea externă. Toate prelegeri în exemplul subcereri necorelate utilizat mai sus. subinterogare Corelat conține o trimitere la o solicitare de date externă și se realizează mai mult de o dată, și fiecare rând în interogare exterioară.

Exemplu: Găsește toți angajații al căror salariu este la fel ca un angajat al Ngao nume:

UNDE IN 'Ngao' (SELECT LAST_NAME

Aici vom folosi o subinterogare multi-corelate, se va uita la modul în care funcționează. După cum sa menționat deja, sub-interogare este executată pentru fiecare rând din interogare exterioară. Asta este, pentru fiecare nume, care selectează interogarea exterioară, interogarea secundară selectează angajații cu același salariu ca și cea a angajatului selectat de interogare exterioară. Dacă subinterogare în rândul angajaților selectate au angajat la numele Ngao, atunci angajatul selectat de interogare exterioară îndeplinește condițiile problemei și ar trebui să ajungă la setul de rezultate.

Orice subinterogare necorelate poate fi rescrisă ca corelat, dar există o problemă care poate fi rezolvată numai prin intermediul sub-interogări corelate.

Exemplu: Găsește toți angajații al căror salariu depășește salariul mediu în departamentul lor:

SELECT LAST_NAME, salariu

UNDE salariu> (SELECT AVG (salariu)

Aici vom folosi un singur corelat subinterogare. Pentru fiecare interogare exterior angajat selectat, o subinterogare calculează salariul mediu departamentul în care lucrează angajatul. În cazul în care salariul angajatului selectat cererea externă depășește salariul mediu selectat de către un subinterogare, angajat trece aproape de proba.