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

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

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

В тази статия

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

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

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

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

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

  1. В раздела Файл щракнете върху Създай.

  2. Под Налични шаблони щракнете върху Примерни шаблони.

  3. Щракнете върху Northwind, след което щракнете върху Създай.

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

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

  6. Щракнете върху раздела Заявки и след това щракнете двукратно върху Поръчки за продукти.

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

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

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

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

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

    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, за да създадете псевдоним на таблица, така че да можете да сравнявате стойности в подзаявката със стойностите в текущия ред на основната заявка.

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

    Interval: [Order Date]-[Prior Date]

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

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

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

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

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

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

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

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

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

  1. Отворете Northwind.accdb и разрешете съдържанието му.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Да предположим например, че анализирате данните за учениците в колеж. Учащите трябва да поддържат минимален GPA, който варира от основно към основно. Студентите по специалности и техните минимални GPA се съхраняват в таблица с име "Специалности", а съответната информация за студентите се съхранява в таблица, наречена "Student_Records".

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

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

    Да предположим например, че анализирате данните за учениците в колеж. Учащите трябва да поддържат минимален GPA, който варира от основно към основно. Студентите по специалности и техните минимални GPA се съхраняват в таблица с име "Специалности", а съответната информация за студентите се съхранява в таблица, наречена "Student_Records".

    За да видите списък с специалности (и техните минимални 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 е синонимна на "ВСЕКИ".

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

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

    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, за да проверите дали дадена стойност в текущия ред на основната заявка е част от набора, връщан от подзаявката. Можете също да поставите пред IN с 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. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

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

×