- Подзапросы с несколькими строками Подзапросы с несколькими строками возвращают одну или несколько строк во внешний оператор SQL. Вы можете использовать оператор IN, ANY или ALL во внешнем запросе для обработки подзапроса, который возвращает несколько строк. Использование оператора IN с многострочным подзапросом Использование оператора NOT IN с подзапросом из нескольких строк Использование оператора ANY с подзапросом из нескольких строк Подзапросы из нескольких столбцов Подзапросы SQL с использованием DISTINCT SQL: Использование оператора IN с подзапросом нескольких строк Оператор IN используется для проверки значения в пределах набора значений. Список значений может быть получен из результатов, возвращаемых подзапросом. См. Следующий пример: Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code’ и ‘agent_code’ из таблицы ‘orders’ при следующих условиях: Пример таблицы: агенты Пример таблицы: заказы во внешнем запросе: ‘agent_code’ таблицы ‘orders’ должен быть в списке внутри оператора IN во внутреннем запросе: во внутреннем запросе: ‘рабочая_ область’ таблицы ‘агентов’ должна быть ‘Бангалор’, Вот полный оператор SQL: SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code IN (SELECT agent_code FROM agentWHERE working_area = 'Bangalore'); Вывод: ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CODE ---------- ---------- -------- - ---------- ---------- 200130 2500 30-ИЮЛ-08 C00025 A011 200105 2500 18-ИЮЛ-08 C00025 A011 200117 800 20-ОКТ-08 C00014 A001 200124 500 20-ИЮН-08 C00017 A007 20011 2 2000 30-MAY-08 C00016 A007 Давайте разберем вышеуказанный запрос и проанализируем, что происходит во внутреннем запросе. Вот код внутреннего запроса: ВЫБРАТЬ код_агента ОТ агентовWHERE working_area = 'Bangalore'; Вывод: AGENT_CODE ---------- A001A007A011 Приведенный выше запрос возвращает два кода агента «A011» и «A001». Наглядное представление: SQL: использование оператора NOT IN с подзапросом из нескольких строк Вы также можете использовать оператор NOT IN для выполнения логической противоположности оператору IN. См. Следующий пример: Пример таблицы: заказы Пример таблицы: агенты Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code’ и ‘agent_code’ из таблицы ‘orders’ со следующими условиями: во внешнем запросе: ‘agent_code’ таблицы ‘orders’ должен отличаться от списка внутри оператора IN. во внутреннем запросе: ‘рабочая_ область’ таблицы ‘агентов’ должна быть ‘Мумбаи’ Здесь является полным оператором SQL: SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code NOT IN (SELECT agent_code FROM agentWHERE working_area = 'Bangalore'); Вывод: ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CO --------- ---------- ------ --- ---------- -------- 200129 2500 20-ИЮЛ-08 C00024 A006 200118 500 20-ИЮЛ-08 C00023 A006 200111 1000 10-ИЮЛ-08 C00020 A008 200101 3000 15-ИЮЛ-08 C00001 A008 200114 3500 15-АВГ-08 C00002 A008 200100 1000 08-ЯНВ-08 C00015 A003 200127 2500 20-ИЮЛЬ-08 C00015 A003 200113 4000 10-ИЮН-08 C00022 A002 200133 1200 29-ИЮН-08 C00009 A002 200128 3500 20-ИЮЛ-08 C00009 A002 200126 500 24-ИЮН-08 C00022 A002 200120 500 20-ИЮЛ-08 C00009 A002 200123 500 16-СЕН-08 C00022 A002 200106 2500 20-АПР-08 C00005 A002 200116 500 13 -ИЮЛ-08 C00010 A009 200132 4000 15-АВГ-08 C00013 A013 200115 200 0 08-FEB-08 C00013 A013 200125 2000 10-OCT-08 C00018 A005 200103 1500 15-MAY-08 C00021 A005 200134 4200 25-SEP-08 C00004 A005 ............... ... Давайте разберем вышеуказанный запрос и проанализируем, что происходит во внутреннем запросе. Вот код внутреннего запроса: SELECT agent_code FROM agentWHERE working_area = 'Bangalore'; Вывод: AGENT_CODE-- -------- A001A007A011 Наглядное представление: SQL: использование ANY с подзапросом из нескольких строк Вы можете использовать оператор ANY для сравнения значения с любым значением в списке. Вы должны поместить оператор =, ,>, = перед ЛЮБОЙ в вашем запросе. В следующем примере ANY используется для проверки наличия какого-либо агента из страны UK. Пример таблицы: агенты Пример таблицы: клиент Чтобы получить ‘agent_code’, ‘agent_name’, ‘working_area’, ‘Commission’ из таблицы ‘agent’ со следующими условиями — во внешнем запросе: ‘agent_code’ должен быть любым ‘agent_code’ из таблицы ‘customer’ во внутреннем запросе: ) ‘cust_country’ в таблице ‘customer’ должно быть ‘UK’, Вот полный оператор SQL: ВЫБРАТЬ код_агента, имя_агента, рабочую_зону, комиссиюFROM agentWHERE agent_code = ЛЮБОЙ (ВЫБРАТЬ код_агента ИЗ customerWHERE cust_country = 'UK'); Вывод: AGENT_CODE AGENT_NAME КОМИССИЯ РАБОЧЕЙ_Зоны ---------- ----------------------------------- ----- ----------------------------------- ---------- A009 Бенджамин Хэмпшер .11A003 Alex London .13A006 McDen London .15 Графическая презентация: SQL: подзапросы с несколькими столбцами Вы можете написать подзапросы, которые возвращают несколько столбцов. В следующем примере извлекается сумма заказа с наименьшей ценой, сгруппированная по код агента Пример таблицы: заказы выберите ord_num, agent_code, ord_date , ord_amountfrom orderswhere (agent_code, ord_amount) IN (SELECT agent_code, MIN (ord_amount) FROM orders GROUP BY agent_code); Вывод: ORD_NUM AGENT_CODE ORD_DATE ORD_AMOUNT ---------- ---------- --------- ---------- 200104 A004 13-МАР-08 1500 200121 A004 23-СЕН-08 1500 200126 A002 24-ИЮН-08 500 200120 A002 20-ИЮЛ-08 500 200123 A002 16-СЕН-08 500 200124 A007 20-ИЮН-08 500 200116 A009 13-ИЮЛ-08 500 200105 A011 18 -JUL-08 2500 200130 A011 30-JUL-08 2500 200131 A012 26-AUG-08 900 200135 A010 16-SEP-08 2000 200115 A013 08-FEB-08 2000 200117 A001 20-OCT-08 800 200111 A008 10-JUL -08 1000 200118 A006 20-ИЮЛ-08 500 200103 A005 15-МАЯ-08 1500 200100 A003 08-ЯНВ-08 1 000 Графическая презентация: SQL: подзапросы с использованием DISTINCT В этом разделе мы обсуждаем использование предложения DISTINCT в подзапросе. Пример: Пример таблицы: заказы Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code ‘и’ agent_code ‘из таблицы’ orders ‘со следующими условиями — во внешнем запросе: ‘ agent_code ‘ в таблице заказов должен быть тот же код агента, что и в таблице заказов со следующими условиями — «код_агента» в таблице заказов должен четко соответствовать следующему внутренний запрос: ; таблица ‘cust_code’ в таблице ‘orders’ должна быть ‘C00005’ Вот полный оператор SQL: ВЫБРАТЬ ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code = (SELECT DISTINCT agent_codeFROM orders WHERE cust_code = 'C00005'); Вывод: ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CODE ---------- ---------- ------- - ---------- ---------- 200106 2500 20-АПР-08 C00005 A002 200123 500 16-СЕН-08 C00022 A002 200120 500 20-ИЮЛ-08 C00009 A002 200126 500 24-JUN-08 C00022 A002 200128 3500 20-JUL-08 C00009 A002 200133 1200 29-JUN-08 C00009 A002 200113 4000 10-JUN-08 C00022 A002 Внутренняя часть приведенного выше запроса возвращает ‘agent_code’ A002. Упрощенная форма приведенного выше кода: SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code = 'A002'; Графическая презентация: Практические упражнения по SQL Упражнения по SQL , Практика, Решение SQL Получение данных из таблиц [33 упражнения] Логические операторы SQL и реляционные операторы [12 упражнений] SQL Подстановочные знаки и специальные операторы [22 упражнения] Агрегатные функции SQL [25 упражнений] Вывод запроса форматирования SQL [10 упражнений] SQL-запросы к нескольким таблицам [7 упражнений] ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений] SQL JOINS СОЕДИНЯЕТСЯ с SQL [29 упражнений] СОЕДИНЯЕТСЯ с SQL в базе данных HR [27 упражнений] ПОДзапросы SQL ПОДзапросы SQL [39 упражнений] ПОДПРОСЫ SQL в базе данных HR [55 упражнений] SQL Union [9 упражнений] Просмотр SQL [16 упражнений] Управление учетными записями пользователей SQL [16 упражнений] База данных фильмов БАЗОВЫЕ запросы к базе данных фильмов [10 упражнений] ПОДзапросы в базе данных фильмов [16 упражнений] ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения] База данных футбола Введение БАЗОВЫЕ запросы к базе данных футбола [29 упражнений] ПОДзапросы к базе данных футбола [33 упражнения] СОЕДИНЯЕТ запросы к базе данных футбола [61 упражнения] База данных больниц Введение BASIC, SUBQUERIES и JOINS [39 упражнений] База данных сотрудников BASIC запросы к базе данных сотрудников [ 115 упражнений] ПОДПРОСЫ в базе данных сотрудников [77 упражнений] Еще не все! Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.
- SQL: Использование оператора IN с подзапросом нескольких строк
- SQL: использование оператора NOT IN с подзапросом из нескольких строк
- SQL: использование ANY с подзапросом из нескольких строк
- SQL: подзапросы с несколькими столбцами
- SQL: подзапросы с использованием DISTINCT
Подзапросы с несколькими строками
Подзапросы с несколькими строками возвращают одну или несколько строк во внешний оператор SQL. Вы можете использовать оператор IN, ANY или ALL во внешнем запросе для обработки подзапроса, который возвращает несколько строк.
- Использование оператора IN с многострочным подзапросом
- Использование оператора NOT IN с подзапросом из нескольких строк
- Использование оператора ANY с подзапросом из нескольких строк
- Подзапросы из нескольких столбцов
- Подзапросы SQL с использованием DISTINCT
SQL: Использование оператора IN с подзапросом нескольких строк
Оператор IN используется для проверки значения в пределах набора значений. Список значений может быть получен из результатов, возвращаемых подзапросом. См. Следующий пример:
Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code’ и ‘agent_code’ из таблицы ‘orders’ при следующих условиях:
Пример таблицы: агенты
Пример таблицы: заказы
во внешнем запросе:
‘agent_code’ таблицы ‘orders’ должен быть в списке внутри оператора IN во внутреннем запросе:
во внутреннем запросе:
‘рабочая_ область’ таблицы ‘агентов’ должна быть ‘Бангалор’,
Вот полный оператор SQL:
SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code IN (SELECT agent_code FROM agentWHERE working_area = 'Bangalore');
Вывод:
ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CODE ---------- ---------- -------- - ---------- ---------- 200130 2500 30-ИЮЛ-08 C00025 A011 200105 2500 18-ИЮЛ-08 C00025 A011 200117 800 20-ОКТ-08 C00014 A001 200124 500 20-ИЮН-08 C00017 A007 20011 2 2000 30-MAY-08 C00016 A007
Давайте разберем вышеуказанный запрос и проанализируем, что происходит во внутреннем запросе. Вот код внутреннего запроса:
ВЫБРАТЬ код_агента ОТ агентовWHERE working_area = 'Bangalore';
Вывод:
AGENT_CODE ---------- A001A007A011
Приведенный выше запрос возвращает два кода агента «A011» и «A001».
Наглядное представление:
SQL: использование оператора NOT IN с подзапросом из нескольких строк
Вы также можете использовать оператор NOT IN для выполнения логической противоположности оператору IN. См. Следующий пример:
Пример таблицы: заказы
Пример таблицы: агенты
Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code’ и ‘agent_code’ из таблицы ‘orders’ со следующими условиями:
во внешнем запросе:
‘agent_code’ таблицы ‘orders’ должен отличаться от списка внутри оператора IN.
во внутреннем запросе:
‘рабочая_ область’ таблицы ‘агентов’ должна быть ‘Мумбаи’
Здесь является полным оператором SQL:
SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code NOT IN (SELECT agent_code FROM agentWHERE working_area = 'Bangalore');
Вывод:
ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CO --------- ---------- ------ --- ---------- -------- 200129 2500 20-ИЮЛ-08 C00024 A006 200118 500 20-ИЮЛ-08 C00023 A006 200111 1000 10-ИЮЛ-08 C00020 A008 200101 3000 15-ИЮЛ-08 C00001 A008 200114 3500 15-АВГ-08 C00002 A008 200100 1000 08-ЯНВ-08 C00015 A003 200127 2500 20-ИЮЛЬ-08 C00015 A003 200113 4000 10-ИЮН-08 C00022 A002 200133 1200 29-ИЮН-08 C00009 A002 200128 3500 20-ИЮЛ-08 C00009 A002 200126 500 24-ИЮН-08 C00022 A002 200120 500 20-ИЮЛ-08 C00009 A002 200123 500 16-СЕН-08 C00022 A002 200106 2500 20-АПР-08 C00005 A002 200116 500 13 -ИЮЛ-08 C00010 A009 200132 4000 15-АВГ-08 C00013 A013 200115 200 0 08-FEB-08 C00013 A013 200125 2000 10-OCT-08 C00018 A005 200103 1500 15-MAY-08 C00021 A005 200134 4200 25-SEP-08 C00004 A005 ............... ...
Давайте разберем вышеуказанный запрос и проанализируем, что происходит во внутреннем запросе. Вот код внутреннего запроса:
SELECT agent_code FROM agentWHERE working_area = 'Bangalore';
Вывод:
AGENT_CODE-- -------- A001A007A011
Наглядное представление:
SQL: использование ANY с подзапросом из нескольких строк
Вы можете использовать оператор ANY для сравнения значения с любым значением в списке. Вы должны поместить оператор =, ,>, = перед ЛЮБОЙ в вашем запросе. В следующем примере ANY используется для проверки наличия какого-либо агента из страны UK.
Пример таблицы: агенты
Пример таблицы: клиент
Чтобы получить ‘agent_code’, ‘agent_name’, ‘working_area’, ‘Commission’ из таблицы ‘agent’ со следующими условиями —
во внешнем запросе:
‘agent_code’ должен быть любым ‘agent_code’ из таблицы ‘customer’
во внутреннем запросе:
) ‘cust_country’ в таблице ‘customer’ должно быть ‘UK’,
Вот полный оператор SQL:
ВЫБРАТЬ код_агента, имя_агента, рабочую_зону, комиссиюFROM agentWHERE agent_code = ЛЮБОЙ (ВЫБРАТЬ код_агента ИЗ customerWHERE cust_country = 'UK');
Вывод:
AGENT_CODE AGENT_NAME КОМИССИЯ РАБОЧЕЙ_Зоны ---------- ----------------------------------- ----- ----------------------------------- ---------- A009 Бенджамин Хэмпшер .11A003 Alex London .13A006 McDen London .15
Графическая презентация:
SQL: подзапросы с несколькими столбцами
Вы можете написать подзапросы, которые возвращают несколько столбцов. В следующем примере извлекается сумма заказа с наименьшей ценой, сгруппированная по код агента
Пример таблицы: заказы
выберите ord_num, agent_code, ord_date , ord_amountfrom orderswhere (agent_code, ord_amount) IN (SELECT agent_code, MIN (ord_amount) FROM orders GROUP BY agent_code);
Вывод:
ORD_NUM AGENT_CODE ORD_DATE ORD_AMOUNT ---------- ---------- --------- ---------- 200104 A004 13-МАР-08 1500 200121 A004 23-СЕН-08 1500 200126 A002 24-ИЮН-08 500 200120 A002 20-ИЮЛ-08 500 200123 A002 16-СЕН-08 500 200124 A007 20-ИЮН-08 500 200116 A009 13-ИЮЛ-08 500 200105 A011 18 -JUL-08 2500 200130 A011 30-JUL-08 2500 200131 A012 26-AUG-08 900 200135 A010 16-SEP-08 2000 200115 A013 08-FEB-08 2000 200117 A001 20-OCT-08 800 200111 A008 10-JUL -08 1000 200118 A006 20-ИЮЛ-08 500 200103 A005 15-МАЯ-08 1500 200100 A003 08-ЯНВ-08 1 000
Графическая презентация:
SQL: подзапросы с использованием DISTINCT
В этом разделе мы обсуждаем использование предложения DISTINCT в подзапросе.
Пример:
Пример таблицы: заказы
Чтобы получить ‘ord_num’, ‘ord_amount’, ‘ord_date’, ‘cust_code ‘и’ agent_code ‘из таблицы’ orders ‘со следующими условиями —
во внешнем запросе:
‘ agent_code ‘ в таблице заказов должен быть тот же код агента, что и в таблице заказов со следующими условиями —
«код_агента» в таблице заказов должен четко соответствовать следующему
внутренний запрос:
; таблица ‘cust_code’ в таблице ‘orders’ должна быть ‘C00005’
Вот полный оператор SQL:
ВЫБРАТЬ ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code = (SELECT DISTINCT agent_codeFROM orders WHERE cust_code = 'C00005');
Вывод:
ORD_NUM ORD_AMOUNT ORD_DATE CUST_CODE AGENT_CODE ---------- ---------- ------- - ---------- ---------- 200106 2500 20-АПР-08 C00005 A002 200123 500 16-СЕН-08 C00022 A002 200120 500 20-ИЮЛ-08 C00009 A002 200126 500 24-JUN-08 C00022 A002 200128 3500 20-JUL-08 C00009 A002 200133 1200 29-JUN-08 C00009 A002 200113 4000 10-JUN-08 C00022 A002
Внутренняя часть приведенного выше запроса возвращает ‘agent_code’ A002.
Упрощенная форма приведенного выше кода:
SELECT ord_num, ord_amount, ord_date, cust_code, agent_codeFROM ordersWHERE agent_code = 'A002';
Графическая презентация:
Практические упражнения по SQL
- Упражнения по SQL , Практика, Решение
- SQL Получение данных из таблиц [33 упражнения]
- Логические операторы SQL и реляционные операторы [12 упражнений]
- SQL Подстановочные знаки и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений]
- SQL JOINS
- СОЕДИНЯЕТСЯ с SQL [29 упражнений]
- СОЕДИНЯЕТСЯ с SQL в базе данных HR [27 упражнений]
- ПОДзапросы SQL
- ПОДзапросы SQL [39 упражнений]
- ПОДПРОСЫ SQL в базе данных HR [55 упражнений]
- SQL Union [9 упражнений]
- Просмотр SQL [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнений]
- База данных фильмов
- БАЗОВЫЕ запросы к базе данных фильмов [10 упражнений]
- ПОДзапросы в базе данных фильмов [16 упражнений]
- ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения]
- База данных футбола
- Введение
- БАЗОВЫЕ запросы к базе данных футбола [29 упражнений]
- ПОДзапросы к базе данных футбола [33 упражнения]
- СОЕДИНЯЕТ запросы к базе данных футбола [61 упражнения]
- База данных больниц
- Введение
- BASIC, SUBQUERIES и JOINS [39 упражнений]
- База данных сотрудников
- BASIC запросы к базе данных сотрудников [ 115 упражнений]
- ПОДПРОСЫ в базе данных сотрудников [77 упражнений]
- Еще не все!
Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.