Влагане на заявка в друга заявка или в израз с помощта на подзаявка

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

Понякога може да искате да използвате резултатите от една заявка като поле в друга заявка или като критерий за поле на заявка. Нека например да искате да видите интервала между поръчките за всеки от вашите продукти. За да създадете заявка, която показва този интервал, трябва да сравните всяка дата на поръчка с други дати на поръчки за този продукт. Сравняването на тези дати на поръчки също изисква заявка. Можете да вложите тази заявка вътре във вашата основна заявка, като използвате подзаявка.

Можете да напишете подзаявка в израз или в инструкция от езика за структурирани заявки (SQL) в SQL изглед.

В тази статия

Използване на резултатите от заявка като поле в друга заявка

Използване на подзаявка като критерий за поле на заявка

Ключови думи на SQL, често използвани в подзаявки

Използване на резултатите от заявка като поле в друга заявка

Можете да използвате подзаявка като псевдоним на поле. Използвайте подзаявка като псевдоним на поле, когато искате да използвате резултатите от подзаявката като поле във вашата основна заявка.

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

Можете да използвате подзаявка като псевдоним на поле за показване на стойности, които зависят от други стойности в текущия ред, което не е възможно без помощта на подзаявка. Например нека върнете се в примера там, където искате да видите интервала между поръчки за всеки от вашите продукти. За да определите този интервал, трябва да сравните всяка дата на поръчка за други дати на поръчки за този продукт. Можете да създадете заявка, която показва тази информация с помощта на шаблона на Northwind 2007.

Покажи ми как да настроите Northwind 2007

  1. Щракнете върху бутона Microsoft Office Изображение на бутона Office и след това изберете Създай.

  2. В левия екран под Категории шаблонищракнете върху Локален шаблони.

  3. Под Местни шаблонищракнете върху Northwind 2007и след това щракнете върху Създай.

  4. Следвайте указанията в страницата Northwind Traders (в раздела Начален екран), за да отворите базата данни, и след това затворете прозореца "Диалог за влизане".

  1. В раздела Създаване, в групата Други щракнете върху Проектиране на заявка.

  2. В диалоговия прозорец Показване на таблица щракнете върху раздела Заявки и след това щракнете двукратно върху Поръчки за продукта.

  3. Затворете диалоговия прозорец Показване на таблица.

  4. Щракнете двукратно върху полето ИД на продукта и полето Дата на поръчката, за да ги добавите към мрежата за проектиране на заявката.

  5. В реда Сортиране на колоната ИД на продукта от мрежата изберете Възходящо.

  6. В реда Сортиране на колоната Дата на поръчката от мрежата изберете Низходящо.

  7. В третата колона от мрежата щракнете с десния бутон върху реда Поле и след това щракнете върху Мащабиране в контекстното меню.

  8. В диалоговия прозорец Мащабиране въведете или поставете следния израз:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date]
    < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID]
    = [Product Orders].[Product ID])

    Този израз е подзаявката. За всеки ред подзаявката избира последната дата на поръчка, по-стара от последната дата на поръчка, която вече е асоциирана с реда. Забележете как използвате ключовата дума AS, за да създадете псевдоним на таблица, така че да можете да сравнявате стойности в подзаявката със стойности в текущия ред на основната заявка.

  9. В четвъртата колона от мрежата, в реда Поле въведете следния израз:

Interval: [Order Date]-[Prior Date]

Този израз изчислява интервала между всяка дата на поръчка и датата на предишната поръчка за този продукт, като използва стойността за предишна дата, която дефинирахме с помощта на подзаявка.

  1. В раздела Проектиране, в групата Резултати, щракнете върху Изпълни.

    Заявката се изпълнява и показва списък с имена на продукти, дати на поръчки, предишни дати на поръчки и интервали между дати на поръчки. Резултатите са сортиран първо по ИД на продукт (във възходящ ред) и след това по дата на поръчка (в низходящ ред).

    Забележка : Тъй като "ИД на продукт" е справочно поле, по подразбиране Access показва стойностите от справката (в този случай името на продукта), а не действителните идентификатори на продуктите. Въпреки че това променя стойностите, които се показват, то не променя реда на сортиране.

  2. Затворете базата данни Northwind.

Най-горе на страницата

Използване на подзаявка като критерий за поле на заявка

Можете да използвате подзаявка като критерий за поле. Използвайте подзаявка като критерий за поле, когато искате да използвате резултатите от подзаявка, за да ограничите стойностите, които полето показва.

Нека например да искате да прегледате списък с поръчки, обработени от служители, които не са представители за продажбите. За да генерирате този списък, трябва да сравните ИД на служителите за всяка поръчка със списък с ИД на служители, които не са представители за продажбите. За да създадете този списък и да го използвате като критерий за поле, използвайте подзаявка, както е показано в следната процедура:

  1. Отворете базата данни Northwind 2007.accdb и разрешете нейното съдържание.

  2. Затворете формуляра за влизане.

  3. В раздела Създаване, в групата Други щракнете върху Проектиране на заявка.

  4. В диалоговия прозорец Показване на таблица, в раздела Таблици щракнете двукратно върху Поръчки и Служители.

  5. Затворете диалоговия прозорец Показване на таблица.

  6. В таблицата "Поръчки" щракнете двукратно върху полето ИД на служителя, полето ИД на поръчката и полето Дата на поръчката, за да ги добавите към мрежата за проектиране на заявката. В таблицата "Служители" щракнете двукратно върху полето Длъжност, за да го добавите към мрежата за проектиране.

  7. Щракнете с десния бутон върху реда Критерии на колоната "ИД на служителя" и след това щракнете върху Мащабиране в контекстното меню.

  8. В полето Мащабиране въведете или поставете следния израз:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Това е подзаявката. Тя избира всички ИД на служители, за които служителят няма длъжността "Представител за продажбите", и подава тази група резултати на основната заявка. След това основната заявка проверява дали ИД на служителите от таблицата "Поръчки" са в групата резултати.

  9. В раздела Проектиране, в групата Резултати, щракнете върху Изпълни.

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

Най-горе на страницата

Ключови думи на SQL, често използвани в подзаявки

Има няколко ключови думи на SQL, които можете да използвате с подзаявка:

Забележка : Този списък не е пълен. В подзаявките можете да използвате всяка валидна ключова дума на SQL с изключение на ключови думи за дефиниране на данни.

  • ALL    Използвайте ALL в клауза WHERE, за да извлечете редовете, които удовлетворяват условието, когато се сравнят с всеки ред, върнат от подзаявката.

    Нека например да анализирате данни за студенти от колеж. Студентите трябва да поддържат минимална средна оценка, наречена GPA, която е различна за различните курсове. Курсовете и техните минимални GPA се съхраняват в таблица с име "Курсове", а информацията за съответния студент е записана в таблица с име "Записи_за_студенти".

    За да видите списък на курсовете (и техните минимални оценки), в които всеки студент има оценка над минималната, можете да използвате следната заявка:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Използвайте ANY в клауза WHERE, за да извлечете редове, които удовлетворяват условието, когато се сравнят с поне един от редовете, върнати от подзаявката.

    Нека например да анализирате данни за студенти от колеж. Студентите трябва да поддържат минимална средна оценка, наречена GPA, която е различна за различните курсове. Курсовете и техните минимални GPA се съхраняват в таблица с име "Курсове", а информацията за съответните студент е записана в таблица с име "Записи_за_студенти".

    За да видите списък на курсовете (и техните минимални оценки), в които някой студент има оценка над минималната, можете да използвате следната заявка:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Забележка : Можете също да използвате за същата цел ключовата дума SOME; ключовата дума SOME е синоним на ANY.

  • EXISTS    Използвайте EXISTS в клауза WHERE, за да укажете, че подзаявката трябва да върне поне един ред. Можете също да поставите NOT пред EXISTS, за да укажете, че подзаявката не трябва да върне нито един ред.

    Например следната заявка връща списък с продукти, които са намерени в поне една съществуваща поръчка:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    С помощта на NOT EXISTS заявката връща списък с продукти, които не са намерени поне в една съществуваща поръчка:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Използвайте IN в клауза WHERE, за да проверете дали някоя стойност в текущия ред на основната заявка е част от набора, върнат от подзаявката. Можете също да поставите отпред NOT, за да проверите дали някоя стойност в текущия ред на основната заявка не е част от набора, върнат от подзаявката.

    Например следната заявка връща списък с поръчки (с дати на поръчките), които са били обработени от служители, който не са представители за продажбите:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    С помощта на NOT IN можете да запишете същата заявка по следния начин:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Най-горе на страницата

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

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

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

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

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

×