Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Вложенные запросы

CuBook25

Результаты, возвращаемые оператором Select, можно использовать в другом операторе Select. Причем это относится и к операторам, возвращающим совокупные характеристики, и к операторам, возвращающим множество значений. Ниже приведен пример с помощью вложенных запросов:
SELECT Fam,Year_b FROM Pers WHERE Year_b=(SELECT max(Year_b) FROM Pers)
В этом операторе второй вложенный оператор SELECT max(Year_b) FROM Pers возвращает максимальный год рождения, который используется в элементе WHERE основного оператора Select для поиска сотрудника (или сотрудников), чей год рождения совпадает с максимальным.
 
Вложенные запросы могут обращаться к разным таблицам. Пусть, например, имеем две аналогичных по структуре таблицы Pers и Pers1, относящиеся к разным организациям, и хотим в таблице Pers найти всех однофамильцев сотрудников другой организации. Чтобы проверить работу с несколькими таблицами, можно открыть в Database Desktop свою таблицу Pers, выполнить команду Table | Restructure, ничего не меняя в структуре, щелкнуть на кнопке Save as и сохранить ту же таблицу в том же каталоге, где была исходная таблица Pers, но под новым именем Pers1. Если хотите, можно в ней внести записи, отличные от таблицы Pers, чтобы эти таблицы чем-то различались. Впрочем, можно все это и не делать, заменив в приведенных ниже примерах таблицу Pers1 таблицей Pers, т.е. работая с одной таблицей. Смысл операторов все равно будет понятен.
 
Итак, вернемся к задаче определения всех однофамильцев в этих двух таблицах. Это можно сделать оператором:
SELECT * FROM Pers WHERE Fam IN(SELECT Fam FROM Pers1)
Вложенный оператор Select Fam from Pers1 возвращает множество фамилий из таблицы Pers1, а конструкция WHERE основного оператора Select отбирает из фамилий в таблице Pers те, которые имеются в множестве фамилий из Pers1.
 
При работе в условии WHERE с множествами записей можно использовать ключевые слова: All и Any. All означает, что условие выполняется для всех записей, a Any хотя бы для одной записи. Например, оператор:
SELECT * FROM Pers WHERE Year_b >= ALL (SELECT Year_b FROM Pers1)
ищет сотрудников в Pers, которые не старше любого сотрудника в Pers1. Кстати, если в этом операторе заменить Pers1 на Pers, то получим список самых молодых сотрудников организации, который мы получали ранее другим способом. А оператор:
SELECT * FROM Pers WHERE Year_b > ANY (SELECT Year_b FROM Pers1)
ищет сотрудников в Pers, которые моложе хотя бы одного сотрудника в Pers1.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий