Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Подзаявката е команда SELECT, вложена в SELECT, SELECT... В, ВМЪКВАНЕ... КОМАНДА INTO, DELETE или UPDATE или в друга подзаявка.

Синтаксис

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

сравнение [ANY | ВСИЧКИ | SOME] (sqlstatement)

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

[НЕ] [НЯМА] EXISTS (sql_команда)

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

Част

Описание

Сравнение

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

израз

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

sql_инструкция

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


Забележки

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

Използвайте предиката ANY или SOME, които са синоними, за да извлечете записи в основната заявка, които удовлетворяват сравнението с всички записи, извлечени в подзаявката. Следващият пример връща всички продукти, чиято единична цена е по-голяма от тази на всеки продукт, продаден с отстъпка от 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 извън подзаявката. Следващият пример връща имената на наетите лица, чиито заплати са равни на или по-големи от средната заплата на всички служители с еднаква длъжност. На таблицата Employees се дава псевдонимът "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;

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

Някои подзаявки са разрешени в кръстосани заявки – по-конкретно като предикати (тези в клаузата WHERE). Подзаявките като изход (тези в списъка SELECT) не са разрешени в кръстосани заявки.



Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

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

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

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

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

×