Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Podzapytanie to instrukcja SELECT zagnieżdżona wewnątrz instrukcji SELECT, SELECT... DO, WSTAW... Instrukcja INTO, DELETE lub UPDATE albo w innej podzapytaniu.

Składnia

Do utworzenia podzapytania można użyć trzech form składni:

porównanie [ANY | WSZYSTKIE | SOME] (sqlstatement)

wyrażenie [NOT] IN (sqlstatement)

[NIE] EXISTS (sqlstatement)

Podzapytanie zawiera następujące segmenty:

Segment

Opis

Porównanie

wyrażenie i operator porównania, który porównuje wyrażenie z wynikami podzapytania.

wyrażenie

Wyrażenie, dla którego przeszukiwany jest zestaw wyników podzapytania.

instrukcja_sql

Instrukcja SELECT zgodna z tym samym formatem i regułami co każda inna instrukcja SELECT. Musi być ujęta w nawiasy.


Spostrzeżenia

Zamiast wyrażenia można użyć podzapytania na liście pól instrukcji SELECT lub klauzuli WHERE lub HAVING. W podzapytaniu należy użyć instrukcji SELECT w celu udostępnienia zestawu co najmniej jednej konkretnej wartości do oszacowania w wyrażeniu klauzuli WHERE lub HAVING.

Aby pobrać w zapytaniu głównym rekordy spełniające kryteria porównania z wszelkimi rekordami pobranymi w podzapytaniu, należy użyć predykatu ANY lub SOME, które są synonimem. W poniższym przykładzie są zwracane wszystkie produkty, których cena jednostkowa jest większa niż cena każdego produktu sprzedawanego z rabatem 25 procent lub większym:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Orzeczenie ALL umożliwia pobranie tylko tych rekordów w zapytaniu głównym, które spełniają kryteria porównania ze wszystkimi rekordami pobranymi w podzapytaniu. Jeśli w poprzednim przykładzie zmieniono wartość ANY na ALL, zapytanie zwróci tylko te produkty, których cena jednostkowa jest większa niż w przypadku wszystkich produktów sprzedanych z rabatem 25 procent lub większym. Jest to o wiele bardziej restrykcyjne.

Predykat IN służy do pobierania tylko tych rekordów w zapytaniu głównym, dla których niektóre rekordy w podzapytaniu zawierają jednakową wartość. W poniższym przykładzie zwracane są wszystkie produkty z rabatem w wysokości co najmniej 25 procent:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Z drugiej strony można użyć funkcji NIE IN, aby pobrać tylko te rekordy w zapytaniu głównym, dla których żaden rekord w podzapytaniu nie zawiera równej wartości.

W porównaniu prawda/fałsz należy użyć predykatu EXISTS (z opcjonalnym wyrazem zastrzeżonym NOT) w celu określenia, czy podzapytanie zwraca jakiekolwiek rekordy.

Aliasów nazw tabel można także używać w podzapytaniu, aby odwoływać się do tabel wymienionych w klauzuli FROM poza podzapytaniem. W poniższym przykładzie są zwracane imiona i nazwiska pracowników, których zarobki są równe lub większe niż średnia pensja wszystkich pracowników mających to samo stanowisko. Tabela Pracownicy ma alias "T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

W poprzednim przykładzie słowo zastrzeżone AS jest opcjonalne.

Niektóre podkwitryny są dozwolone w zapytaniach krzyżowych — w szczególności jako orzeczenie (w klauzuli WHERE). Podkwitary jako dane wyjściowe (znajdujące się na liście SELECT) nie są dozwolone w zapytaniach krzyżowych.



Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×