podzapytaniach SQL Server
Podsumowanie: w tym samouczku dowiesz się o podzapytaniach SQL Server i jak używać podzapytań do wykonywania zapytań dotyczących danych.
Wprowadzenie do podzapytania SQL Server
Podzapytanie to zapytanie zagnieżdżone w innej instrukcji, takiej jak SELECT
, INSERT
, UPDATE
lub DELETE
.
Zobaczmy następujący przykład.
Rozważmy orders
i customers
tabele z przykładowej bazy danych.
Poniższa instrukcja pokazuje, jak używać podzapytania w klauzuli WHERE
w SELECT
, aby znaleźć zamówienia sprzedaży klientów, którzy znajdują się w New York
:
Oto wynik:
W tym przykładzie poniższa instrukcja jest podzapytaniem:
Code language: SQL (Structured Query Language) (sql)
Pamiętaj, że zawsze musisz ująć SELECT
zapytanie podzapytania w nawiasach ()
.
Podzapytanie jest również znane jako zapytanie wewnętrzne lub wewnętrzna selekcja, podczas gdy instrukcja zawierająca podzapytanie nazywa się zewnętrzne zapytanie zaznaczające lub zewnętrzne:
SQL Serwer wykonuje powyższy przykład zapytania w następujący sposób:
Najpierw wykonuje podzapytanie w celu uzyskania listy numerów identyfikacyjnych klientów, którzy znajdują się w New York
.
Code language: SQL (Structured Query Language) (sql)
Po drugie, SQL Server podstawia numery identyfikacyjne klienta zwrócone przez podzapytanie w operatorze IN
i wykonuje zapytanie zewnętrzne, aby uzyskać ostateczny zestaw wyników.
Jak możesz s ee, używając podzapytania, możesz połączyć dwa kroki razem. Podzapytanie eliminuje potrzebę wybierania numerów identyfikacyjnych klienta i podłączania ich do zapytania zewnętrznego. Co więcej, samo zapytanie automatycznie dostosowuje się, gdy zmieniają się dane klienta.
Zagnieżdżanie podzapytania
Podzapytanie może być zagnieżdżone w innym podzapytaniu. SQL Server obsługuje do 32 poziomów zagnieżdżania. Rozważmy następujący przykład:
Po pierwsze, SQL Server wykonuje następujące podzapytanie, aby uzyskać listę numerów identyfikacyjnych marki marek Strider
i Trek
:
Po drugie, SQL Server oblicza średni cennik wszystkich produktów, które należą do tych marek.
Code language: SQL (Structured Query Language) (sql)
Po trzecie, SQL Server znajduje produkty, których cena katalogowa jest wyższa niż średnia cena katalogowa wszystkich produktów z lub Trek
.
Typy podzapytań SQL Server
Podzapytania można używać w wielu miejscach:
- Zamiast wyrażenia
- Z
IN
lubNOT IN
- Z
ANY
lubALL
- Z
EXISTS
lubNOT EXISTS
- W
UPDATE
,DELETE
, lubINSERT
instrukcja - W klauzuli
FROM
podzapytanie SQL Server jest używane zamiast wyrażenia
Jeśli podzapytanie zwraca pojedynczą wartość, może być użyte wszędzie tam, gdzie używane jest wyrażenie.
W poniższym przykładzie podzapytanie jest używane jako wyrażenie kolumnowe o nazwie max_list_price
w instrukcji SELECT
.
podzapytanie SQL Server jest używane z operatorem IN
Podzapytanie używane z zwraca zestaw zawierający zero lub więcej wartości. Po zwróceniu wartości przez podzapytanie, zapytanie zewnętrzne wykorzystuje je.
Następujące zapytanie znajduje nazwy wszystkich rowerów górskich i szosowych, które sprzedają sklepy rowerowe.
To zapytanie jest oceniane w dwóch krokach:
- Najpierw zapytanie wewnętrzne zwraca listę numerów identyfikacyjnych kategorii, które pasują do nazw
Mountain Bikes
icode
Rowery szosowe. - Po drugie, wartości te są zastępowane w zewnętrznym zapytaniu, w którym nazwy produktów, których numer identyfikacyjny kategorii są zgodne z jedną z wartości na liście.
podzapytanie SQL Server jest używane z dowolnym operatorem
Podzapytanie jest wprowadzane za pomocą operatora ANY
ma następującą składnię:
Code language: SQL (Structured Query Language) (sql)
Zakładając, że podzapytanie zwraca listę wartości v1, v2,… vn. Operator ANY
zwraca TRUE
, jeśli jedna z par porównań (scalar_expression
, vi) zwraca do TRUE
; w przeciwnym razie zwraca FALSE
.
Na przykład poniższe zapytanie znajduje produkty, których ceny katalogowe są większe lub równe średniej cenie katalogowej produktów dowolnej marki .
W przypadku każdej marki podzapytanie znajduje maksymalną cenę katalogową. Zapytanie zewnętrzne wykorzystuje te maksymalne ceny i określa, który katalogowy cennik pojedynczego produktu jest większy lub równy maksymalnej cenie katalogowej dowolnej marki.
Podpytanie SQL Server jest używane z operatorem ALL
ALL
ma taką samą składnię jak operator ANY
:
Code language: SQL (Structured Query Language) (sql)
Operator ALL
zwraca TRUE
, jeśli wszystkie pary porównań (scalar_expression
, vi) dają wynik TRUE
; w przeciwnym razie zwraca FALSE
.
Następujące zapytanie wyszukuje produkty, których cena katalogowa jest większa lub równa średniej cenie katalogowej zwróconej przez podzapytanie:
podzapytanie SQL Server jest używane z ISTNIEJE lub NIE ISTNIEJE
Poniższy rysunek ilustruje składnię podzapytania wprowadzonego z operatorem EXISTS
:
Code language: SQL (Structured Query Language) (sql)
Operator EXISTS
zwraca TRUE
, jeśli podzapytanie zwróci wyniki; w przeciwnym razie zwraca FALSE
.
Z drugiej strony NOT EXISTS
jest przeciwieństwem .
Poniższe zapytanie znajduje klientów, którzy kupili produkty w 2017 roku:
Jeśli użyjesz NOT EXISTS
zamiast EXISTS
, możesz znaleźć klientów, którzy nie kupili żadnych produktów w 2017 roku.
podzapytanie SQL Server w klauzuli FROM
Załóżmy, że chcesz znaleźć średnią z sumy zamówień wszystkich sprzedawców. Aby to zrobić, możesz najpierw znaleźć liczbę zamówień według sztabów:
Następnie możesz zastosować funkcję AVG()
do tego zestawu wyników. Ponieważ zapytanie zwraca zestaw wyników, który wygląda jak wirtualna tabela, możesz umieścić całe zapytanie w klauzuli FROM
innego zapytania, na przykład:
Zapytanie umieszczone w FROM
musi mieć alias tabeli. W tym przykładzie użyliśmy t jako aliasu tabeli dla podzapytania. Aby uzyskać ostateczny wynik, SQL Server wykonuje następujące kroki:
- Wykonaj podzapytanie w klauzuli
FROM
. - Użyj wyniku podzapytania i wykonaj zapytanie zewnętrzne.
W tym samouczku poznałeś koncepcję podzapytania SQL Server i jak używać różnych typów podzapytań do wykonywania zapytań dotyczących danych. >