Как в where написать несколько условий sql

Условия отбора в запросе SQL (WHERE)

Условия позволяют указать какие строки таблицы нужно вывести в результате выполнения запроса. Задаются они после указания необходимых столбцов и таблиц командой WHERE.

Условие на выборку добавляется при составлении большинства запросов. Они позволяют отсеять не нужные строки, путем указания тех или иных параметров отбора. В результате можно из больших таблиц быстро выбрать необходимые строки. Именно это и была основная задумка при создании языка запросов для БД.

Таблицу для примеров используем ту же, что и в предыдущей главе:

num
(номер товара)
title
(название)
price
(цена)
1 Чайник 300
2 Чашка 100
3 Ложка 25
4 Тарелка 100

Пример. Чтобы выбрать товыры стоимостью 100 рублей, нужно задать условие:

Здесь, раздел SELECT и FROM указывают, какие столбцы из каких таблиц выводить.

WHERE – команда указывающая, что задается условие выбора.

price = 100 – критерий выбора строк.

Такой запрос отбросит все строки, не удовлетворяющие условию. В результате будет получен следующий набор данных:

Оператор Значение
= равенство
> больше
< меньше
!= не равно
>= больше либо равно
<= меньше либо равно

Есть еще другие операции для построения условий. Но об этом позже.

Стоит так же отметить возможность задавать несколько условий. Например, нужно выбрать все товары с номером больше 2 и ценой меньше 100:

Здесь, команда AND – это логический оператор И, который указывает что должны быть выбраны строки, где верно первое условие И так же верно второе условие. Под эти условия попадает только одна строка из таблицы.

num title price
3 Ложка 25

Кроме, логического оператора И (AND), существуют еще ИЛИ (OR) и НЕ (NOT). OR указывает, что должно быть верно или первое условие или второе.

Под такие условия попадает следующие строки:

num title price
1 Чайник 300
3 Ложка 25
4 Тарелка 100

Товар под номером 1 удовлетворяет условию price > 100, товары номер 3 и 4 — условию num > 2. В таком случае, если хотя бы одно из условий верно, строка таблицы будет включена в результат запроса.

Оператор NOT добавляет отрицание в условие:

Такое условие означает, что нужно выбрать строки, где условие не верно.

num title price
1 Чайник 300
2 Чашка 100

NOT в отличие от AND и OR, располагается не между двух других условий, а является отрицанием того условия, перед которым он установлен.

Команда WHERE встречается в очень многих задачах, и использовать ее нужно будет постоянно. В других главах можно будет увидеть примеры еще более сложных конструкций с ее применением, а так же иные команды, позволяющие выполнять сложные выборки.

Конструкция WHERE в SQL

Конструкция 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.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 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. А также про все остальные логические команды

Хорошо, примем во внимание.

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Несколько условий для AND и OR в предложении WHERE SQL Server

Я работаю в Microsoft SQL Server Management Studio. У меня есть несколько таблиц, с которыми я работаю, и несколько условий (около 80), на которые я обращаюсь, где я пытаюсь получить подмножество объединенных данных.

Идея состоит в том, что мне нужно захватить данные из соединения, где эти данные не находятся в другом соединении на основе условия (т.е. NOT IN ), тогда мне нужно отфильтровать на связке условий включая несколько столбцов и несколько условий для каждого столбца. Моя проблема (я думаю) возникает из условия OR . У меня есть столбец, скажем col5 , где, если он не удовлетворяет ни одному из условий условия AND , тогда мне нужно дополнительно отфильтровать его (следовательно, OR ).

То, что я написал до сих пор, следующее:

Причиной этого является то, что у меня есть много (грязных) телефонных номеров, с которыми я имею дело в col5 , и в целом на всех столбцах выполняется большая очистка. Некоторые из этих телефонных номеров будут иметь вместо этого текст и в зависимости от контекста, который я могу сохранить или отфильтровать (например, случаи, когда номер телефона вводится как «название компании» или «бизнес» или «alskfjalsdkjf») , а не «555-5555» или «555 5555» и т. д.). Если данные соответствуют критериям условий AND (в основном отфильтровывают варианты col5, не похожие на% 555-5555% ), тогда мне нужно дополнительно проверить и фильтровать для любых нечисловых символов в col5 через условие OR .

Нет сообщений об ошибках — вместо этого запрос занимает очень много времени, и он дает мне больше строк данных, чем я начал с того, что противоположно тому, что должно происходить. Основываясь на структуре table1 и table2 , существует возможность ввести повторяющиеся строки, объединив эти две таблицы, но количество настроек и подстановки, которые я делаю, должно давать меня гораздо меньше, чем исходное количество строк, даже с несколькими дубликатами здесь и там.

Я не уверен, где моя логика терпит неудачу, любая помощь приветствуется 🙂

Можно ли писать несколько условий в JOIN после ON?

Могу ли я после ON написать несколько условий объединения? Например так:

И если не так, то каким образом? В полях pay , orders , news , other таблицы всегда для одного из четырех цифры от 1 до 4, для остальных — 0. Делаю это для того, чтобы вместо цифр в таблицу на странице выводились слова. Для 1 — 4 — «Включен», для 0 — «Выключен». Как можно проверить все поля?

UPDATE:

Есть таблицы, которые надо объединить, для того, чтобы в таблице хранить цифры, а выводить содержимое в виде слов. И это вызвало у меня затруднение, никак не могу придумать рабочий запрос.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *