Условие 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 строк из базы и указать вместо конкретных полей *, то можно будет увидеть значительное падение производительности. А чем медленнее загружается ваш сайт, тем меньше посетителей на него будут заходить. Поэтому всегда старайтесь оптимизировать свои запросы к базе.