Podkwerendą podstawy

podzapytanie to kwerendy, która jest zagnieżdżona wewnątrz instrukcja SELECT, INSERT, UPDATE lub DELETE albo w innej podkwerendzie.podzapytanie można użyć gdziekolwiek wyrażenie jest dozwolone.W tym przykładzie podzapytanie jest używany jako wyrażenie kolumna o nazwie MaxUnitPrice w SELECT instrukcja.

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

podzapytanie skrót wewnętrzną kwerendą lub wybierz wewnętrzne, podczas gdy kwerenda zewnętrznego lub zewnętrzne wybierz instrukcja zawierające podkwerendę jest również nazywany.

Wiele Transact-SQL instrukcji, które obejmują podkwerend można alternatywnie sformułowane jako sprzężenia.Inne pytania można powodowanego tylko z podkwerendy.W Transact-SQL, jest zazwyczaj nie wydajności różnica instrukcji, która obejmuje podzapytanie i semantycznie równoważne wersja, które nie.Jednak w niektórych przypadkach, gdzie należy sprawdzić istnienie łączyć daje lepszą wydajność.W przeciwnym razie zapytanie zagnieżdżone muszą być przetwarzane dla każdego wyniku kwerendy zewnętrzne do zapewnienia eliminacji duplikatów.W takich przypadkach podejście łączyć hydrofon lepsze wyniki.Oto przykład pokazujący zarówno podzapytanie wybierz i łączyć wybierz zwracające takie same zestaw wyników:

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

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

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

  • Regularne kwerendy WYBIERAJĄCEJ, włączając regularne lista wyboru składników.

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

  • Opcjonalna klauzula WHERE.

  • Opcjonalnej klauzula GROUP BY.

  • Opcjonalna klauzula HAVING.

Kwerenda WYBIERAJĄCA podzapytanie jest zawsze ujęte w nawias.Nie może zawierać komputerowe lub PRZEGLĄDAJ, aby klauzulai może zawierać tylko zamówienia przez klauzula po z góry klauzula określony jest również.

podzapytanie może być zagnieżdżone wewnątrz WHERE lub HAVING klauzula zewnętrzne instrukcja SELECT, INSERT, UPDATE lub DELETE albo w innej podkwerendzie.Maksymalnie 32 poziomów zagnieżdżenia jest możliwe, chociaż limit zależy dostępną pamięć i złożoności inne wyrażenia w kwerendzie.Wykonania poszczególnych kwerend może nie obsługiwać maksymalnie 32 poziomy zagnieżdżania.podzapytanie może się pojawić gdziekolwiek można użyć wyrażenie, zwraca pojedynczą wartość.

Jeśli tylko w podzapytanie, a nie w zewnętrznej kwerendy zostanie wyświetlona tabela, kolumny z tabeli nie uwzględnione w danych wyjściowych (Lista Wybierz kwerendę zewnętrzną).

Sprawozdania zawierające podzapytanie zazwyczaj zastosowane jedno z tych formatów:

  • WHERE expression [NOT] IN (subquery)

  • GDY expression comparison_operator [ANY | ALL] (subquery)

  • W przypadku gdy ISTNIEJE [NOT**(subquery)**

W niektórych Transact-SQL instrukcji podzapytanie może zostać oceniony, tak jakby niezależnych kwerend.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 wprowadzone z W, lub te, które operator porównania modyfikowane przez wszystkie.

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

  • Istnienie badań są wprowadzane z EXISTS.