Podzapytania: Podzapytania powiązane w SQL cz. II
Ćwiczenia
Pobierzmy informację o pracownikach mieszkających poza „Warszawą”:
SELECT Imie, Nazwisko FROM pracownicy AS P WHERE Miasto IN (SELECT miastoZamieszkaniaID FROM miastoZamieszkania WHERE P.miasto <> 'Warszawa');
Rezultat:
Imie | Nazwisko |
Jan | Kowalski |
Adam | Adamiak |
Jakub | Wawrzyniak |
Nasze podzapytanie:
SELECT miastoZamieszkaniaID FROM miastoZamieszkania WHERE P.miasto <> 'Warszawa'
wykorzystuje dane zwrócone przez zapytanie zewnętrzne (co prawda w tym przykładzie trochę na siłę) co z definicji powoduje, że jest podzapytaniem powiązanym. Dodatkowo w tym ćwiczeniu będzie ono uruchamiane dla każdego wiersza z tabeli pracownicy
(czyli w przeciwieństwie do podzapytań niepowiązanych będzie uruchamiane wiele razy). Drugą rzeczą na którą należy zwrócić uwagę jest to, że powyższa kwerenda zwraca tabelę (zbiór danych) więc aby poprawnie wszystko zadziałało musieliśmy zastosować operator IN.
Wykorzystajmy kwerendę z poprzedniego ćwiczenia ale z małą modyfikacją:
SELECT Imie, Nazwisko FROM pracownicy AS P WHERE Miasto IN (SELECT miastoZamieszkaniaID FROM miastoZamieszkania AS P WHERE P.imie <> '3');
Jak widać, zastosowaliśmy ten sam alias w zapytaniu zewnętrznym oraz wewnętrznym. Po uruchomieniu tego przykładu powinniśmy otrzymać błąd podobny do tego:
Msg 207, Level 16, State 1, Line 3
Invalid column name 'imie’.
Czyli serwer zasygnalizował nam próbę podania niepoprawnej nazwy kolumny, gdyż w tabeli miastoZamieszkania
nie ma kolumny o nazwie imie
.
Warto jeszcze na koniec wspomnieć, że zarówno zapytanie zewnętrzne jak i wewnętrzne może odwoływać się do tej samej tabeli.
Strony: 1 2