double arrow

Использование подзапросов

Упражнения

Практикум

Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".

Тесты

  1. Какой тип связывания таблиц используется в запросе тогда, когда необходимо извлечь записи одной таблицы независимо от наличия или отсутствия соответствующих записей в другой?
  2. Какая часть оператора SQL задает условия связывания таблиц?
  3. Какой тип связывания используется тогда, когда необходимо задать эквивалентность строк связываемых таблиц?
  4. Что будет, если в запросе указать выборку из двух таблиц, но не связать их?
  5. Рассмотрите следующие таблицы.

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

  1. Запишите оператор SQL, возвращающий EMP_ID, LAST_NAME и FIRST NAME из таблицы EMPLOYEE_TBL; SALARY и BONUS из таблицы EMPLOYEE_PAY_TBL.
  2. Выберите из таблицы 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 таблица);


Сейчас читают про: