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 lub NOT IN
  • Z ANY lub ALL
  • Z EXISTS lub NOT EXISTS
  • W UPDATE, DELETE, lub INSERT 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:

  1. Najpierw zapytanie wewnętrzne zwraca listę numerów identyfikacyjnych kategorii, które pasują do nazw Mountain Bikes i code Rowery szosowe.
  2. 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. >

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *