Содержание

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

SQL оператор WHERE

В этом учебном материале вы узнаете, как использовать SQL оператор WHERE с синтаксисом и примерами.

Описание

SQL оператор WHERE используется для фильтрации результатов и применения условий в операторе SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис для оператора WHERE в SQL.

Параметры или аргумент

Пример — одно условие в операторе WHERE

Сложно объяснить синтаксис для SQL оператора WHERE, поэтому давайте начнем с примера, в котором для применения условия 1 используется WHERE.
В этом примере у нас есть таблица suppliers со следующими данными:

supplier_id supplier_name city state
100 Yandex Moscow Russian
200 Google Lansing Michigan
300 Oracle Redwood City California
400 Bing Redmond Washington
500 Yahoo Sunnyvale Washington
600 DuckDuckGo Paoli Pennsylvania
700 Qwant Paris France
800 Facebook Menlo Park California
900 Electronic Arts San Francisco California

Введите следующий SQL оператор.

Будет выбрано 3 записи. Вот результаты, которые вы должны получить.

supplier_id supplier_name city state
300 Oracle Redwood City California
800 Facebook Menlo Park California
900 Electronic Arts San Francisco California

В этом примере мы использовали SQL оператор WHERE, чтобы отфильтровать результаты из таблицы suppliers . Приведенный выше SQL оператор вернул бы все строки из таблицы suppliers , где state — ‘California’. Поскольку в SELECT используется * , то все поля из таблицы suppliers будут отображаться в наборе результатов.

Пример — два условия в операторе WHERE (условие AND)

Вы можете использовать условие AND в операторе WHERE, чтобы указать более 1 условия, которое должно быть выполнено для выбора записи. Давайте рассмотрим, как это сделать.
В этом примере у нас есть таблица customers со следующими данными:

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

Проверка нескольких условий (операторы OR и AND)

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

Оператор AND объединяет два и более условий и возвращает истинное значение только при выполнении всех условий.

Найти в таблице tbl_clients данные о Bennett Sherry.

SQL:
SELECT * FROM tbl_clients
WHERE lastname=’Bennett’ AND name=’Sherry’

Найти данные о клиентах проживающих в Сиэтле и имеющих семьи численностью более 3-х человек:

SQL:
SELECT * FROM tbl_clients
WHERE region=’Seattle’ AND fam_size>3

SQL:
SELECT * FROM tbl_clients
WHERE region = ‘Seattle’ OR region=’Los Angeles’

Получить список всех клиентов, кроме тех, кто проживает Лос-Анджелесе.

SQL:
SELECT * FROM tbl_clients WHERE region != ‘Los Angeles’

SQL:
SELECT * FROM tbl_clients WHERE NOT region = ‘Los Angeles’

Аналогично арифметическим операторам, логические операторы также выполняются в строго определенной последовательности. Если в выражении используется несколько логических операторов, они выполняются в следующей последовательности: сначала NOT, затем AND и, наконец, OR.

Вывести данные о всех клиентах, проживающих в Сиэтле и только о тех клиентах из Лос-Анджелеса, численность семьи которых превышает 3-х человек.

SQL:
SELECT lastname, name, region, fam_size
FROM tbl_clients
WHERE region= ‘Seattle’ OR region = ‘Los Angeles’ AND fam_size>3

Ограничение на количество членов семьи в предыдущем запросе применяется только к клиентам из Лос-Анджелеса, так как оператор AND выполняется перед оператором OR. Чтобы первым выполнялся оператор OR, в запросе нужно использовать скобки.

В результате выполнения следующего запроса будут данные о всех клиентах из Сиэтла и Лос-Анджелеса, имеющих семьи численностью больше 3 человек:

SQL:
SELECT lastname, name, region, fam_size
FROM tbl_clients
WHERE (region= ‘Seattle’ OR region = ‘Los Angeles’) AND fam_size>3

Указание нескольких условий поиска для одного столбца (визуальные инструменты для баз данных)

Иногда может понадобиться сочетание нескольких условий поиска для одного столбца. Например, можно сделать следующее:

Найти несколько разных имен сотрудников в таблице employee , находящихся в разных группах по уровню зарплаты. Такой тип поиска требует использования условия OR (или).

Найти книгу, название которой начинается со слова «The» и содержит слово «Cook». Такой тип поиска требует использования условия AND (и).

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

Для поиска альтернативных значений в одном столбце данных используется условие OR. Для поиска значений, удовлетворяющих одновременно нескольким условиям, используется условие AND.

Указание условия OR

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

Часто можно использовать оператор IN вместо того, чтобы искать несколько значений в одном столбце.

Указание условия OR

На панели критериевдобавьте столбец для поиска.

Укажите первое условие в столбце Фильтр только что добавленного столбца данных.

Укажите второе условие в столбце Или. этого столбца данных.

Конструктор запросов и представлений создает предложение WHERE, содержащее условие OR, подобное следующему:

Указание условия AND

Использование оператора AND позволяет задать такие условия поиска, при которых результирующий набор удовлетворяет сразу двум (или более) критериям поиска. При использовании этого параметра пространство поиска сужается и обычно возвращается меньше записей, чем при поиске по одному значению.

Для поиска в диапазоне значений можно использовать оператор BETWEEN вместо двух условий, объединенных оператором AND.

Указание условия AND

На панели критериев добавьте столбец для поиска.

Укажите первое условие в столбце Фильтр только что добавленного столбца данных.

Добавьте тот же столбец на панель критериев еще раз, поместив его в пустую строку сетки.

В столбце Фильтр второй строки укажите второе условие.

Конструктор запросов создает предложение WHERE, которое содержит условие AND, подобное следующему:

оператор case в SQL, как вернуть несколько переменных?

Я хотел бы вернуть несколько значений, в моем высказывании, например :

SELECT
  CASE
    WHEN <condition 1> THEN <value1=a1, value2=b1>
    WHEN <condition 2> THEN <value1=a2, value2=b2>
    ELSE <value1=a3, value3=b3>
  END
FROM <table>

конечно, я могу написать условие case несколько раз, каждый раз возвращая одно значение. Однако, как я уже много условий нужно, скажем 100. Нехорошо повторять состояние случая снова и снова.

еще один вопрос, который я хотел бы задать, Что произойдет, если одна запись соответствует нескольким условиям? значит ли это, что он вернет их все, или только последний? например, условие 1 может стать подмножеством условия 2. что будет?


основной способ, к сожалению, повторяться.

SELECT
  CASE WHEN <condition 1> THEN <a1> WHEN <condition 2> THEN <a2> ELSE <a3> END,
  CASE WHEN <condition 1> THEN <b1> WHEN <condition 2> THEN <b2> ELSE <b3> END
FROM 
  <table> 

к счастью, большинство РСУБД достаточно умны, чтобы не оценивать условия несколько раз. Это просто избыточный набор текста.

В MS SQL Server (2005+) вы можете использовать CROSS APPLY в качестве альтернативы этому. Хотя я понятия не имею, насколько он эффективен…

SELECT
  *
FROM
  <table>
CROSS APPLY
  (
   SELECT a1, b1 WHERE <condition 1>
   UNION ALL
   SELECT a2, b2 WHERE <condition 2>
   UNION ALL
   SELECT a3, b3 WHERE <condition 3>
  )
  AS case_proxy

заметным недостатком здесь является то, что нет другого эквивалента и как все условия

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

редактировать

Если ответ Yuck изменен на UNION, а не на JOIN, он становится очень похожим на это. Основное отличие, однако, заключается в том, что это только сканирует входной набор данных один раз, а не один раз за условие (100 раз в вашем случай.)

редактировать

Я также заметил, что вы мая означает, что значения, возвращаемые операторами CASE, фиксированы. Все записи, соответствующие одному и тому же условию get

точные значения sames в value1 и value2. Это может быть сформировано вот так…

WITH
  checked_data AS
(
  SELECT
    CASE WHEN <condition1> THEN 1
         WHEN <condition2> THEN 2
         WHEN <condition3> THEN 3
         ...
         ELSE                   100
    END AS condition_id,
    *
  FROM
    <table>
)
,
  results (condition_id, value1, value2) AS
(
   SELECT 1, a1, b1
   UNION ALL
   SELECT 2, a2, b2
   UNION ALL
   SELECT 3, a3, b3
   UNION ALL
   ...
   SELECT 100, a100, b100
)
SELECT
  *
FROM
  checked_data
INNER JOIN
  results
    ON results.
condition_id = checked_data.condition_id