Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

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:

ImieNazwisko
JanKowalski
AdamAdamiak
JakubWawrzyniak

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

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , ,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest