Метасимволы оператора LIKE




Поиск с использованием метасимволов может осуществляться только в текстовых полях. Самый распространенный метасимвол – %. Он означает любые символы.

Например, если надо найти слова, начинающиеся с букв «вел», то напишем LIKE 'вел%', а если необходимо найти слова, которые содержат символы «клуб», то напишем LIKE '%клуб%'.

Например:

Еще один часто используемый метасимвол – _. В отличие от %, который обозначает «несколько или ни одного символа», нижнее подчеркивание обозначает «ровно один символ».

Например:

Обратите внимание на пробел между метасимволом и «рыб», если его пропустить, то запрос не сработает, т.к. метасимвол _ обозначает ровно один символ, а пробел – это тоже символ.

Вложенные запросы

Пусть необходимо узнать, кто создал тему «Велосипеды», делаем для этого соответствующий запрос:

Вместо имени автора получен его идентификатор, т.к. был сделан запрос к одной таблице – Темы, а имена авторов тем хранятся в другой таблице – Пользователи. Поэтому, узнав идентификатор автора темы, необходимо сделать еще один запрос – к таблице «Пользователи», чтобы узнать его имя:

В SQL предусмотрена возможность объединять такие запросы в один путем превращения одного из них в подзапрос (вложенный запрос). Итак, чтобы узнать, кто создал тему «Велосипеды», делаем следующий запрос:

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

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

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

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

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

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

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

Сначала 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).

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

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

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

Например, можно вместо запроса

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.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: