Конструкция WHERE в SQL
При выборке записей из таблицы практически всегда требуется задавать определённые условия, по которым мы определяем, какие записи нам нужны, а какие - нет. И именно эти условия можно задавать с помощью конструкции WHERE в SQL. Я уже знакомил Вас с ней, но в этой статье решил познакомить с WHERE немного поближе.
Начну с простого примера выборки с использованием конструции WHERE в SQL:
SELECT * FROM table WHERE count=5
Вернутся записи, в которых поле "count" имеет значение 5. Теперь усложним запрос:
SELECT * FROM table WHERE count=5 AND id < 100
Таким образом, вернутся записи, у которых поле "count" имеет значение 5 И поле "id" имеет значение меньше 100.
Разумеется, Вы можете использовать и другие логические операции. Их полный список:
- ! (отрицание)
- AND (И)
- OR (ИЛИ)
- XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ, иногда ещё называют МОНТАЖНОЕ ИЛИ, но такое название встречается в основном в микропроцессорной литературе)
Пример с использованием нескольких логических операторов:
SELECT * FROM table WHERE !(id <= 120 AND (count=10 OR date > "10/11/1980"))
Вот такой, на первый взгляд, сложный SQL-запрос. Постарайтесь в нём разобраться самостоятельно.
Также конструкция WHERE в SQL может содержать LIKE. LIKE позволяет определить, совпадает ли указанная строка с определённым шаблоном. Чтобы стало немного понятнее, приведу пример:
SELECT * FROM table WHERE text LIKE "%some text%"
Данный SQL-запрос вернёт result_set, содержащий записи, в которых поле "text" имеет такой текст: "some text". Обратите внимание, что это не проверка на равенство. Текст может быть огромным, но если в нём содержитася строка: "some text", то LIKE вернёт true.
Давайте напишу, как задаётся шаблон для LIKE:
- % - это то, что мы с Вами использовали. Используется он чаще всего и означает он любую строку любой длины. Фактически, строкой "%some text%" мы говорим, что сначала идёт любая строка любой длины, затем "some text", а затем вновь любая строка любой длины. Если текст удовлетворяет этому шаблону, то вернуть true, иначе false.
- [ ] - это одиночный символ. Чтобы использовать этот шаблон необходимо задавать диапазоны, например, так: "[a-z]some%". Данный шаблон будет означать, что сначала идёт 1 символ (любой символ от a до z), далее "some" и потом любая строка любой длины.
- _ - это любой одиночный символ.
- [^] - это противоположность [ ]. Например, можно привести такой пример: "[^az]some_". Данный шаблон означает, что вначале идёт любой символ, но только НЕ "a" и НЕ "z". Далее должна идти строка "some", а после только один одиночный символ.
Знание и умение использования LIKE очень важно, поверьте моему опыту. Самый простой пример использования LIKE - это поиск по сайту. Ведь контент находится в базе данных, и необходимо вытащить только те записи, в которых содержится строка, заданная в строке поиска. И тут приходит на помощь LIKE. Именно так реализован поиск мною на этом сайте.
Вот, пожалуй, всё, что необходимо знать для успешной выборки записей с использованием конструкции WHERE в SQL.
Полный курс по PHP и MySQL: http://srs.myrusakov.ru/php
-
- Михаил Русаков
Комментарии (10):
Спасибо! А как учитывать регистр? Например, если понадобиться сверить пароль введённый пользователем с тем, что имеется в базе? Я ошибаюсь или LIKE не учитывает регистр, как и если бы сделать запрос SELECT * FROM table WHERE password='$password', где $password - пароль, указанный в форме? Тогда ABCdef, abcDEF, abcdef и т.д. будут совпадать... Спасибо.
Ответить
Для учёта регистра необходимо перед названием поля ставить BINARY. Данная команда преобразует следующую за ним строку в двоичный набор данных, таким образом, регистр будет учтён. Пример: SELECT * FROM table WHERE BINARY password = 'myPasSword'
Ответить
Теперь я полностью удовлетворён. Спасибо.
Ответить
Здравствуйте, Михаил. Помогите решить проблему: нужна функция, которая будет добавлять в таблице БД в статью дополнительные данные. Например есть таблица с 5 полями 4 заполнено, нужно функция которая будет заполнять пятое поле у определенной статьи. Я пытался вчтавить конструкцию (WHERE `id`='$id') непомоголо. Можно ли такое реализовать.
Ответить
Нужно использовать запрос UPDATE.
Ответить
а как сделать чтоб можно было указать не часный id, а брать его из строки в БД. Например у меня в таблице 100 запией и у каждой одно поде пустое. Выходит надо сделать 100 функций?
Ответить
Не надо тогда вообще писать WHERE.
Ответить
допустим у меня в БД есть таблица в которой хранятся заказы: закащик, дата и статус. список со всеми заказами выводится на страницу со сылками для подробного ознакомления. допустим 1 из них, а их например 100, я выполнил. я со страницы определенного заказа хочу отправить форму с датой окончания т статусом.
Ответить
Напишите пожалуйста про малоизвестную команду XOR в PHP и MySQL. А также про все остальные логические команды
Ответить
Хорошо, примем во внимание.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.