2016-12-05 5 views
0

Помогите понять наш правильный оператор для следующего:Должен ли я использовать оператор AND/OR в mysql для моего запроса?

Допустим, есть таблица Employee с

e_id | e_name | location 
    1  Mett New York 
    2  Bill Düsseldorf 
    3  Sam  Portland 
    4  Dave Valencia 
    5  Max  New York 
    6  Alex Portland 
    7  Andy Düsseldorf 
    8  John New York 

Вопрос: Кто не работает в Дюссельдорфе или в Нью-Йорке?

Вы бы использовали оператор ИЛИ или И в этом случае?

Я знаю, что это глупый вопрос, но я спорил с кем-то по этому вопросу ... И она говорит И, я говорю ИЛИ. Не знаю, что использовать сейчас.

Спасибо!

+0

Вы также можете сделать это (вы можете иметь отрицательный ИЛИ или положительный ИЛИ), но было бы проще сделать И, поскольку у вас есть много значений, которые вы хотите исключить. – Charleh

+0

Как насчет NOT 'NOT (location = 'Dusseldorf' OR location = 'New York')'?Я согласен с тем, что самый разумный оператор - это И здесь, но вы также можете использовать его. – Charleh

+0

@ Санти, но вопрос: «Кто не работает в Дюссельдорфе или Нью-Йорке?» Я думаю, вы можете перефразировать его как «Кто не работает в Дюзе или не работает в Нью-Йорке?» Это значит, что я должен искать сотрудников, которые удовлетворяют хотя бы одному из этих условий. Или? – Slava32

ответ

5

Использование OR имхо проще понять, потому что внешний NOT легко передает, что требуемый результат противоположен («Лондон» ИЛИ «Дюссельдорф»)

SELECT e_name FROM employee WHERE 
    NOT (location = 'New York' OR location = 'Düsseldorf') 

и это также соответствует красиво с IN оператора:

SELECT e_name FROM employee WHERE 
    location NOT IN ('New York', 'Düsseldorf') 

Однако - это может также быть выражены с AND:

SELECT e_name FROM employee WHERE 
    (location <> 'New York' AND location <> 'Düsseldorf') 

Разница зависит от того, применяется ли к обоим положениям сочетали NOT, или каждый в отдельности. Это применение De Morgan's Law:

NOT (A OR B) == (NOT A) AND (NOT B) 
+0

IMO конъюнктивная нормальная форма - '(НЕ А) И (НЕ Б)' - простейшая для понимания, но ваша - отличный ответ +1 – onedaywhen

2

Использование AND, вы можете сделать так:

SELECT * 
FROM Employee 
WHERE location<>'Düsseldorf' AND location<>'New York' 
5

После добавления NOT к смешиванию и вспомнить DeMorgan's laws, оба варианта:

  • Вы можете сформулировать запрос как «место не Дюссельдорф» и " место не Нью-Йорк», или
  • Вы можете сформулировать это как„нет (расположение Düsseldorf или расположение Нью-Йорк)“

Наконец, SQL обеспечивает IN оператор, который позволяет сформулировать запрос как «место не в („Дюссельдорф“,„Нью-Йорк“)»

2

Было бы AND с NOTEQUALS оператором. И вы можете запросить как

select * from Employee WHERE location != "Düsseldorf" and location != "New York"

1

Выбирай, так как отрицанием делает их взаимозаменяемыми!

NOT (location = 'Düsseldorf' OR location = 'New York' 

-- is the same as 

location <> 'Düsseldorf' AND location <> 'New York' 

 Смежные вопросы

  • Нет связанных вопросов^_^