Содержание

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

SQL оператор WHERE

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

Описание

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

Синтаксис

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

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

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

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

supplier_idsupplier_namecitystate
100YandexMoscowRussian
200GoogleLansingMichigan
300OracleRedwood CityCalifornia
400BingRedmondWashington
500YahooSunnyvaleWashington
600DuckDuckGoPaoliPennsylvania
700QwantParisFrance
800FacebookMenlo ParkCalifornia
900Electronic ArtsSan FranciscoCalifornia

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

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

supplier_idsupplier_namecitystate
300OracleRedwood CityCalifornia
800FacebookMenlo ParkCalifornia
900Electronic ArtsSan FranciscoCalifornia

В этом примере мы использовали 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