• Список вибору внутрішнього підзапита, що починається з оператора чи порівняння IN, може включати тільки одне або ім'я стовпця. Стовпець, ім'я якого ви вказуєте в WHERE зовнішнього оператора, повинний бути сумісним для з’єднання зі стовпцем, ім'я якого ви вказуєте в списку вибору підзапита.
• Список вибору підзапита, що починається з EXISTS, майже завжди включає "зірочку" (*). У даному випадку немає необхідності вказувати імена стовпців, оскільки ви лише виконуєте перевірку на існування (чи "неіснування") будь-яких рядків, що задовольняють зазначеним критеріям. (Ви можете задати приналежність рядків таблицям у WHERE підзапита.) В інших випадках правила списку вибору для підзапиту, що починаєтьсязEXISTS, ідентичні правилам для стандартного списку вибору.
• Підзапити, що починаються з немодифікованого оператора порівняння (оператор порівняння, за яким не випливає ключове слово ANY або ALL), не можуть включати GROUP BY і HAVING, якщо тільки ви не визначили заздалегідь, що в результаті групування буде повертатися єдине значення.
• Підзапити не можуть маніпулювати своїми результатами усередині себе, тобто підзапит не може включати ORDER BY або ключове слово INTO.
Підзапити з оператором порівняння.
Розглянемо, наприклад, задачу складання списку всіх викладачів, що мають мінімальну норму навантаження (ми не знаємо коду чи назви посади, що має мінімальну норму). За допомогою з’єднань цю задачу можна було б виконати в два прийоми.
1. Знайти мінімальну норму навантаження.
SELECT MIN(NrNv)
FROM POST;
Min-NrNv |
600 |
2. Одержати прізвища викладачів, які мають таку норму.
SELECT TCHS.NmTh, POST.NmPs, POST.NrNv
FROM TCHS, POST
WHERE price = 600;
Якщо зробити це з допомогою підзапиту, то нам буде потрібно тільки один оператор:
SELECT TCHS.NmTh, POST.NmPs, POST.NrNv
FROM TCHS INNER JOIN POST ON TCHS.CdPs = POST.CdPs
WHERE (((POST.NrNv)=(select MIN(NrNv) from POST)));
NmTh |
NmPs |
NrNv |
Собчак А.О. |
професор |
600 |
Махно Н.Є. |
професор |
600 |
Мунтян Р.Д. |
професор |
600 |
Середа І.С. |
професор |
600 |
Здатність обчислювати значення агрегатної функції "на льоту" і повертати його в зовнішній запит для порівняння відноситься до переваг підзапитів; з’єднання не справляється з цією задачею.
Підзапити з предикатом IN (Not In)
Запит – знайти усіх викладачів, які мають усі ті посади, що є на кафедрі №2 .
SELECT TCHS.NmTh, TCHS.CdCf, TCHS.CdPs
FROM TCHS
WHERE (((TCHS.CdPs) In (select CdPs from TCHS where CdCf=2)));
NmTh |
CdCf |
CdPs |
Бандура В.М. |
6 |
02 |
Сірко В.В. |
7 |
02 |
Оприско Ю.Й. |
2 |
02 |
Батура О.Й. |
6 |
02 |
Балагура А.М. |
2 |
04 |
Черно Ф.М. |
2 |
04 |
А якщо треба, що в результатній таблиці не було викладачів кафедри №2, то
SELECT TCHS.NmTh, TCHS.CdCf, TCHS.CdPs
FROM TCHS
WHERE (((TCHS.CdCf)<>2) AND ((TCHS.CdPs) In (select CdPs from TCHS where CdCf=2)));
NmTh |
CdCf |
CdPs |
Бандура В.М. |
6 |
02 |
Сірко В.В. |
7 |
02 |
Батура О.Й. |
6 |
02 |
Запит – знайти усіх викладачів, які мають посади, яких немає на кафедрі №2 .
SELECT TCHS.NmTh, TCHS.CdCf, TCHS.CdPs
FROM TCHS
WHERE (((TCHS.CdPs) Not In (select CdPs from TCHS where CdCf=2)));
NmTh |
CdCf |
CdPs |
Середа І.С. |
6 |
01 |
Мунтян Р.Д. |
7 |
01 |
Колчак А.Д. |
12 |
03 |
Махно Н.Є. |
7 |
01 |
Собчак А.О. |
12 |
01 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.