Использование подзапросов
Упражнения
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
Тесты
- Какой тип связывания таблиц используется в запросе тогда, когда необходимо извлечь записи одной таблицы независимо от наличия или отсутствия соответствующих записей в другой?
- Какая часть оператора SQL задает условия связывания таблиц?
- Какой тип связывания используется тогда, когда необходимо задать эквивалентность строк связываемых таблиц?
- Что будет, если в запросе указать выборку из двух таблиц, но не связать их?
- Рассмотрите следующие таблицы.
ORDERS_TBL
PRODUCTS TBL
Правильно ли составлен следующий оператор, если предполагалось внешнее связывание этих таблиц?
SELECT C.CUST_ID, C.CUST_NAME, О.ORD_NUM
FROM CUSTOMER_TBL С JOIN ORDERS_TBL O
WHERE C.CUST_ID = O.CUST_ID
- Запишите оператор SQL, возвращающий EMP_ID, LAST_NAME и FIRST NAME из таблицы EMPLOYEE_TBL; SALARY и BONUS из таблицы EMPLOYEE_PAY_TBL.
- Выберите из таблицы CUSTOMERS_TBL столбцы CUST_ID и CUST "NAME из таблицы PRODUCTS_TBL – столбцы PROD_ID и COST, а из таблицы ORDERS_TBL – ORD_NUM и QTY. Объедините три эти таблицы в одном операторе SQL.
В ходе этого урока мы ознакомимся с концепцией использования подзапросов, делающих работу с базой данных более эффективной. Основными на этом уроке будут следующие темы.
- Что такое подзапрос?
- Выравнивание выводимых данных с помощью подзапросов.
- Примеры типичных подзапросов к базе данных.
- Использование подзапросов с операторами языка манипуляций данными.
- Вложенные подзапросы.
Что такое подзапрос?
Подзапрос – это запрос, содержащийся в выражении ключевого слова WHERE другого запроса с целью дополнительных ограничений на выводимые данные. Подзапросы называют также вложенными запросами. Подзапрос в содержащем его запросе используют для наложения условий на выводимые данные. Подзапросы могут использоваться с операторами SELECT, INSERT, UPDATE или DELETE.
В некоторых случаях подзапрос можно использовать вместо связывания таблиц, тем самым, связывая данные таблиц неявно. При использовании в запросе подзапроса сначала выполняется подзапрос, а только потом – содержащий его запрос, причем с учетом условий выполнения подзапроса. Результаты выполнения подзапроса используются при обработке условий в выражении ключевого слова WHERE основного запроса Подзапрос можно использовать либо в выражении ключевого слова WHERE, либо в выражении ключевого слова HAVING главного запроса. Логические операции и операции сравнения типа =, >, <, IN, NOT IN, AND, OR и т. п. можно использовать как в подзапросе, так и для обработки результатов подзапроса в выражениях ключевых слов WHERE и HAVING.
Все, что применимо к обычному запросу, применимо и к подзапросу. Операции связывания, функции, преобразования данных и многое другое можно использовать и в подзапросах.
При составлении подзапросов необходимо придерживаться следующих правил.
- Подзапрос необходимо заключить в круглые скобки.
- Подзапрос может ссылаться только на один столбец в выражении своего ключевого слова SELECT, за исключением случаев, когда в главном запросе используется сравнение с несколькими столбцами из подзапроса.
- Ключевое слово ORDER BY использовать в подзапросе нельзя, хотя в главном запросе ORDER BY использоваться может. Вместо ORDER BY в подзапросе можно использовать GROUP BY.
- Подзапрос, возвращающий несколько строк данных, можно использовать только в операторах, допускающих множество значений, например в IN.
- В списке ключевого слова SELECT не допускаются ссылки на значения типа BLOB, ARRAY, CLOB илиNCLOB.
- Подзапрос нельзя непосредственно использовать как аргумент допускающей множество значений функции.
- Операцию BETWEEN по отношению к подзапросу использовать нельзя, но ее можно использовать в самом подзапросе.
Базовый синтаксис оператора с подзапросом выглядит следующим образом.
SELECT имя_столбиа FROM таблица
WHERE имя_столбца = (SELECT имя_столбца FROM таблица WHERE условия);
Рассмотрим примеры правильного и неправильного использования операции BETWEEN в операторе с подзапросом.
Вот пример правильного использования BETWEEN:
SELECT имя_столбца FROM таблица
WHERE имя_столбца ОПЕРАЦИЯ
(SELECT имя_столбца FROM таблица WHERE значение BETWEEN значение);
Вот пример неправильного использования BETWEEN:
SELECT имя_столбца FROM таблица
WHERE имя_столбца
BETWEEN значение AND (SELECT имя_столбца FROM таблица);