Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Select имя_столбца from имя_таблицы where часть условия IN



(SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN

(SELECT имя_столбца FROM имя_таблицы WHERE условие))

Пример:

Узнаем, кто создал тему «велосипеды» на форуме:

То есть, после ключевого слова WHERE, в условие мы записываем еще один запрос. MySQL сначала обрабатывает подзапрос, возвращает id_author=2, и это значение передается в предложение WHERE внешнего запроса.

Обратите внимание, что подзапросы могут выбирать только один столбец, значения которого они будут возвращать внешнему запросу. Попытка выбрать несколько столбцов приведет к ошибке.

Пример 2:

Узнаем, какие сообщения на форуме оставлял автор темы «велосипеды»:

Теперь усложним задачу, узнаем, в каких темах оставлял сообщения автор темы "велосипеды":

Давайте разберемся, как это работает.

· Сначала MySQL выполнит самый глубокий запрос:

SELECT id_author FROM topics WHERE topic_name='велосипеды'

· Полученный результат (id_author=2) передаст во внешний запрос, который примет вид: SELECT id_topic FROM posts WHERE id_author IN (2);

· Полученный результат (id_topic:4,1) передаст во внешний запрос, который примет вид: SELECT topic_name FROM topics WHERE id_topic IN (4,1);

· И выдаст окончательный результат (topic_name: о рыбалке, о рыбалке). Т.е. автор темы "велосипеды" оставлял сообщения в теме "О рыбалке", созданной Сергеем (id=1) и в теме "О рыбалке", созданной Светой (id=4).

Есть два момента, на которые стоит обратить внимание:

· Не рекомендуется создавать запросы со степенью вложения больше трех. Это приводит к увеличению времени выполнения и к сложности восприятия кода.

· Приведенный синтаксис вложенных запросов, скорее наиболее употребительный, но вовсе не единственный. Например, мы могли бы вместо запроса

SELECT name FROM users WHERE id_user IN

(SELECT id_author FROM topics WHERE topic_name='велосипеды');

написать

SELECT name FROM users WHERE id_user =

(SELECT id_author FROM topics WHERE topic_name='велосипеды');

Т.е. мы можем использовать любые операторы, используемые с ключевым словом WHERE.





Дата публикования: 2014-10-20; Прочитано: 454 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...