Podkwerendą Fundamentals

Podkwerenda to kwerendę, która jest zagnieżdżona wewnątrz instrukcja SELECT, INSERT, UPDATE lub DELETE lub w innej podkwerendzie.Podkwerenda może służyć dowolnym wyrażeniu jest dozwolone.W tym przykładzie podkwerenda jest używany jako wyrażenie kolumna o nazwie MaxUnitPrice w SELECT Instrukcja.

USE AdventureWorks;
GO
SELECT Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)
     FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDet
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM AdventureWorks.Sales.SalesOrderHeader AS Ord

podkwerenda skrót programu wewnętrzną kwerendę lub wybierz wewnętrzne, podczas gdy instrukcja, zawierająca podkwerenda skrót programu zewnętrznego kwerendy lub wybierz zewnętrzne.

Wiele Transact-SQL instrukcje, które zawierają podkwerend można również sformułowane jako. Inne pytania mogą być związane tylko z podkwerend.W Transact-SQL, jest zazwyczaj nie wydajności różnica instrukcja, która zawiera podkwerenda i semantycznie równoważne wersja, która nie obsługuje. W niektórych przypadkach istnienia należy sprawdzić łączyć zapewnia lepszą wydajność.W przeciwnym wypadku zagnieżdżonych kwerendy muszą być przetwarzane dla każdego wyniku kwerendy zewnętrzne do zapewnienia eliminacji duplikatów.W takim wypadku metoda łączyć powoduje utworzenie lepsze wyniki.Poniżej przedstawiono przykład pokazujący obu podkwerenda SELECT i ustawić łączyć SELECT, które zwracają ten sam wynik:

/* SELECT statement built using a subquery. */
SELECT Name
FROM AdventureWorks.Production.Product
WHERE ListPrice =
    (SELECT ListPrice
     FROM AdventureWorks.Production.Product
     WHERE Name = 'Chainring Bolts' )

/* SELECT statement built using a join that returns
   the same result set. */
SELECT Prd1. Name
FROM AdventureWorks.Production.Product AS Prd1
     JOIN AdventureWorks.Production.Product AS Prd2
       ON (Prd1.ListPrice = Prd2.ListPrice)
WHERE Prd2. Name = 'Chainring Bolts'

podkwerenda zagnieżdżone w zewnętrznej instrukcja SELECT zawiera następujące składniki:

  • Zwykłe kwerendy WYBIERAJĄCEJ tym regularne lista wyboru składników.

  • A regularnie z klauzula, łącznie z jedną lub więcej nazw tabela lub widoku.

  • Opcjonalna klauzula WHERE.

  • Opcjonalne GROUP BY klauzula.

  • Opcjonalna klauzula HAVING.

Kwerendy WYBIERAJĄCEJ podkwerenda jest zawsze ujęte w nawias.Nie może zawierać COMPUTE lub FOR BROWSE klauzula i może zawierać tylko ORDER BY klauzula podczas TOP klauzula określony jest również.

podkwerenda można zagnieżdżać wewnątrz WHERE lub HAVING instrukcja SELECT, INSERT, UPDATE lub DELETE zewnętrznym lub w innej podkwerendzie.Maksymalnie 32 poziomów zagnieżdżenia jest to możliwe, chociaż limit zmienia się w zależności od dostępnej pamięci i złożoności innych wyrażeń w kwerendzie.Wykonania poszczególnych kwerend może nie obsługiwać maksymalnie 32 poziomy zagnieżdżania.podkwerenda mogą pojawiać się wszędzie wyrażenie mogą być używane, jeżeli zwraca jedną wartość.

Jeśli tabela jest wyświetlana tylko w podkwerenda i nie znajduje się w zewnętrznym kwerendy, następnie kolumny z tabeli nie może być uwzględniana w danych wyjściowych (Lista Wybierz kwerendę zewnętrzną).

Instrukcje, które zwykle obejmują podkwerenda wykonaj jedną z następujących formatów:

  • GDZIE expression [NOT] W (subquery)

  • GDZIE expression comparison_operator [WSZYSTKIE | WSZYSTKIE] (subquery)

  • W PRZYPADKU GDY ISTNIEJE [NOT**(subquery)**

W niektórych Transact-SQL instrukcje podkwerendę można szacować, tak jakby był on kwerendę niezależne. Conceptually, the subquery results are substituted into the outer query (although this is not necessarily how Microsoft SQL Server actually processes Transact-SQL statements with subqueries).

Istnieją trzy podstawowe typy podkwerend.Te, które:

  • Działają na listach wprowadzonych w systemie IN, lub które operator porównania zmodyfikowana przez ANY lub ALL.

  • Czy wprowadzone z operator porównania zostały zmodyfikowane i musi zwrócić pojedynczą wartość.

  • Czy testy istnienia wprowadzonych w systemie EXISTS.