ВЛОЖЕННЫЕ ЗАПРОСЫ

Простые вложенные запросы

Вложенные запросы поддерживаются MySQL, начиная с версии 4.1. Вложенные запросы обеспечивают мощный, удобный и лаконичный способ выражения комплексных данных, требуемых в коротких инструкциях SQL. Начнем с простых примеров, а затем перейдем к более сложным.

Принцип работы вложенных запросов

С помощью выражения INNER JOIN можно найти название преступной группировки, в которую входит конкретный преступник (рис. 8.1):

mysql> SELECT gruppirovka_name FROM

  • -> gruppirovka INNER JOIN prestupnik
  • -> USING (gruppirovka_id)
  • -> WHERE prestupnik_name =
  • -> "Belov Aleksandr Petrovich";

! gruppirouka_name !

+------------------+

i Matueeuskaya !

+------------------+

1 row in set <0.03 sec)

Рис. 8.1. Поиск группировки по фамилии

Однако есть еще один способ с использованием вложенного запроса (рис. 8.2):

mysql> SELECT gruppirovka_name FROM gruppirovka

  • -> WHERE gruppirovka_id = (SELECT gruppi-rovka_id
  • -> FROM prestupnik WHERE prestup-nik_name ="Belov
  • -> Aleksandr Petrovich");

! gruppirovka_name !

+------------------+

! Matueeuskaya !

+------------------+

1 rou in set <0.02 sec)

Рис. 8.2. Использование вложенного запроса

Запрос называется вложенным в том случае, когда один запрос включает в себя другой. Внутренний запрос, или подзапрос, является вложенным и заключен в круглые скобки. Он определяет значение gruppirovka_id для преступника с именем «Belov Aleksandr Petrovich». Для внутренних запросов всегда следует использовать круглые скобки. Внешний запрос перечисляется первым и в данном случае не заключается в скобки. Он выполняет поиск значения gruppirovka_name для преступной группировки со значением gruppirovka_id, соответствующим результату подзапроса. Таким образом, внутренний запрос выполняет поиск значения gruppirovka_id, а внешний — использует его для поиска названия преступной группировки.

Какой метод более предпочтителен? Этот вопрос следует проработать. С точки зрения производительности, вложенные запросы сложнее оптимизировать, и они практически всегда работают медленней, чем невложенные. Но в некоторых ситуациях они представляют собой единственный способ написания отдельного запроса. Кроме того, иногда вложенные запросы могут выдавать информацию, которую сложно извлечь другими методами. А еще вложенные запросы более четко выражены. После усваивания основной идеи такие запросы легко понимаются. Многие проектировщики SQL считают, что вложенные запросы следует изучать перед альтернативами, связанными с объединениями.

В предыдущем примере был использован оператор оценки —- знак равенства (=). Можно использовать в своих кодах все типы операторов сравнения: меньше чем (<), меньше или равно (<=), больше чем (>), больше или равно (>=), а также не равно (!= или о).

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >