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
INlubNOT IN - Z
ANYlubALL - Z
EXISTSlubNOT EXISTS - W
UPDATE,DELETE, lubINSERTinstrukcja - 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 BikesicodeRowery 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. >