SQL подзаявки

Важно : Тази статия е преведена машинно – вижте отказа от отговорност. Английската версия на тази статия за справка можете да намерите тук .

Подзаявката е команда SELECT, вложена в команда SELECT, SELECT...INTO, INSERT...INTO, DELETE или UPDATE или в друга подзаявка.

Синтаксис

За да създадете подзаявка, можете да използвате три форми на синтаксис:

сравнение [ANY | ALL | SOME] (sql_команда)

израз [NOT] IN (sql_команда)

[NOT] EXISTS (sql_команда)

Подзаявката има следните части:

Част

Описание

сравнение

израз и оператор за сравнение, сравняващ израза с резултатите от подзаявката.

израз

Израз, за който се търси резултат от подзаявката.

sql_команда

Команда SELECT, създадена в същия формат и по същите правила като всяка друга команда SELECT. Тя трябва да бъде поставена в скоби.


Забележки

Можете да използвате подзаявка вместо израз в списъка с полета на команда SELECT или в клауза WHERE или HAVING. В подзаявката се използва командата SELECT, за да се предостави набор от една или повече конкретни стойности за оценяване в клаузата WHERE или израза HAVING.

Използвайте предиката ANY или SOME, които са синоними, за да извлечете записи в основната заявка, удовлетворяващи сравнението със записите, извлечени в подзаявката. Следващият пример връща всички продукти (Products), чиято единична цена (UnitPrice) е по-голяма от цената на който и да е продукт, продаден с отстъпка (Discount) от 25 процента или повече:

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

Използвайте предиката ALL, за да извлечете само тези записи в основната заявка, които удовлетвори сравнението с всички данни, извлечени в подзаявката. Ако в предишния пример промените ANY на ALL, заявката ще върне само тези продукти, чиято единична цена е по-голяма от тази на всички продукти, продадени с отстъпка от 25 процента или повече. Това е много по-ограничаващо.

Използвайте предиката IN, за да извлечете само тези записи в основната заявка, за които някой запис в подзаявката съдържа същата стойност. Следващият пример връща всички продукти с отстъпка от 25 процента или повече:

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

Използвайте предиката NOT IN, за да извлечете само тези записи в основната заявка, за които никой запис в подзаявката не съдържа същата стойност.

Използвайте предикат EXISTS (с незадължителната запазената дума NOT) в сравнения от типа "Да/не", за да определите дали подзаявката връща записи.

Можете също да използвате име на псевдоними на таблици в подзаявка да препращат към таблици, изброени в клаузата FROM извън подзаявката. Следващият пример връща имената на служителите, чиито заплати са равни или по-голямо от средни заплати на всички служители, които имат една и съща длъжност. Таблица служители се дава псевдоним "В1":

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

В горния пример запазена дума AS не е задължителна.

В кръстосаните заявки са разрешени някои подзаявки – по-конкретно, като предикати (тези в клаузата WHERE). В кръстосаните заявки не са разрешени подзаявки като резултат (тези в списъка за ИЗБОР).



Забележка : Отказ от отговорност за машинен превод: Тази статия е преведена от компютърна система без човешка намеса. Microsoft предлага тези машинни преводи, за да помогне на потребителите, които не говорят английски, да се възползват от съдържанието за продукти, услуги и технологии на Microsoft. Тъй като статията е преведена машинно, е възможно да съдържа грешки в речника, синтаксиса и граматиката.

Разширете уменията си
Преглед на обучението
Получавайте първи новите функции
Присъединете се към участниците в Office Insider

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×