Команда SQL для выборки из базы данных (SELECT, WHERE, LIKE, AND, OR)

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,741
Реакции
1,448
Credits
25,126
Команда SELECT позволяет получить данные из базы. Существует возможность задать различные фильтры и лимиты на выборку. Попробуем привести несколько примеров SQL запросов с ограничением выборки в таблице USERS, в которой содержатся данные пользователей.

Условие WHERE в SQL запросе​

Получение всех записей в таблице в одном запросе - это очень редкий случай в реальных проектах. Зачастую нужна либо одна запись, либо диапазон, к примеру из 10 или 100 записей либо отвечающее определённому условию. Такую выборку можно сделать с помощью команды условия WHERE в SQL запросе (слово WHERE переводится с английского как "ГДЕ").

Сравнение (=, !=, <, >, <=, >=)​

Продемонстрируем это условие на ограничении выборки по ID пользователя. Приведём сразу несколько примеров запросов:

Код:
SELECT * FROM `USERS` WHERE `ID` = 2;
SELECT * FROM `USERS` WHERE `ID` != 2;
SELECT * FROM `USERS` WHERE `ID` < 2;
SELECT * FROM `USERS` WHERE `ID` <= 2;
SELECT * FROM `USERS` WHERE `ID` > 2;
SELECT * FROM `USERS` WHERE `ID` >= 2;
Как можно догадаться по математическим символам в этих запросах, выборка ограничена по ID пользователя (по целому числу). При каждом условии может возвращаться разное количество строк из таблицы. К примеру, если указано "WHERE `ID` = 2", то вернётся только одна строка, потому что поле "ID" зачастую уникально (то есть у столбца установлено свойство "PRIMARY KEY"). Если в запросе есть символ неравенства "!=" или сравнения "<, >, <=, >=", то в результатах выборки может присутствовать сразу несколько строк из таблицы.

Поиск подстроки (LIKE) и полное соответствие (=)​

Знак равенства "=" можно использовать в SQL запросах не только для чисел, но и для строк. Представим что нам нужно получить выборку из базы, в которой будут содержаться данные о пользователе с именем "Мышь". Запрос получится такой:
Код:
SELECT * FROM `USERS` WHERE `NAME` = 'Мышь';
В результате мы получим все строки, в которых в столбце имени пользователя "NAME" содержится строка "Мышь". Обратите внимание, что совпадение должно быть полным. То есть в выборку не попадут пользователи, имена которых "Мышь серая", "Мышь белая", "Мышь чёрная". Чтобы выбрать и этих пользователей, необходимо сделать текстовый поиск по значению столбца. Для этого используется команда "LIKE" (в переводе с английского этот предлог звучит как "ПОДОБНО", "ВРОДЕ" или "СЛОВНО").
С помощью команды "LIKE" можно искать подстроку в столбце. Чтобы сделать это поставьте знак процента "%" с той стороны подстроки, с которой могут находиться другие символы. К примеру:
Код:
SELECT * FROM `USERS` WHERE `NAME` LIKE 'Мышь%';
В результаты выборки попадёт не только пользователь с именем "Мышь", но и "Мышь серая", "Мышь белая", "Мышь чёрная". Если поставить знак процента ещё и до подстроки:
Код:
SELECT * FROM `USERS` WHERE `NAME` LIKE '%Мышь%';
то в выборку попадут не только все предыдущие результаты, но и пользователь с именем "Большая мышь".
LIKE делает поиск независимо от регистра. То есть результаты от '%мышь%' и '%МЫШЬ%' будут одинаковыми.

Логика "и" (AND) и "или" (OR)​

Бывают случаи, когда необходимо задать несколько ограничений, связанных логикой. К примеру, если надо выбрать пользователей с ID от 2 до 5, то можно использовать условие с "AND":
Код:
SELECT * FROM `USERS` WHERE `ID` >= 2 AND `ID` < 5;
Количество условий и "AND" неограниченно:
Код:
SELECT * FROM `USERS` WHERE `ID` >= 2 AND `ID` < 5 AND `NAME` LIKE 'Мышь%';
Существует возможность использовать логику "ИЛИ" благодаря условию "OR". Продемонстрируем это:
Код:
SELECT * FROM `USERS` WHERE `ID` < 2 OR `ID` > 5;
С помощью круглых скобок ( ) можно группировать условия OR и AND:
Код:
SELECT * FROM `USERS` WHERE (`ID` >= 2 AND `ID` < 5) OR (`ID` > 10 AND `NAME` LIKE 'Мышь%');

Выбор определённых столбцов в SELECT​

В этой статье во всех SELECT запросах к базе запрашивались все поля. Потому что после слова SELECT стояла звёздочка *. Но чем больше объём данных вы выборке, тем медленнее база данных возвращает ответ. Поэтому старайтесь запрашивать у базы только то, что будете использовать. К примеру, если нужно получить только ID пользователя и имя 'NAME', то перечислите эти поля через запятую после слова SELECT:
Код:
SELECT `ID`, `NAME` FROM `USERS` WHERE `ID` <= 5;
Базы данных сайтов не приспособлены к получению больших выборок. Быстрее всего они работают на объёмах до 100 строк. Если попробовать запросить 100 000 строк из базы и указать вместо конкретных полей *, то можно будет увидеть значительное падение производительности. А чем медленнее загружается ваш сайт, тем меньше посетителей на него будут заходить. Поэтому всегда старайтесь оптимизировать свои запросы к базе.