В чем разница между оператором И, ИЛИ в MYSQL при получении строк? - PullRequest
1 голос
/ 01 апреля 2020

Есть ли разница между этими запросами и тем, как они выполняются?

SELECT   customername, country, creditLimit
FROM   customers
WHERE (country = 'USA' OR country = 'France') AND creditlimit > 100000;
SELECT    customername, country, creditLimit
FROM    customers
WHERE country = 'USA' OR country = 'France' AND creditlimit > 10000;

Ответы [ 2 ]

4 голосов
/ 01 апреля 2020

Это связано с пересекающимися таблицами истинности.

В первом запросе знак или находится в квадратных скобках, поэтому он будет выполнен первым и вернет значение true, если страна является США или Францией. Затем И выполнит и сравнит результат ИЛИ с результатом кредитного лимита> 100000.

Во втором операторе запроса преобладает приоритет, поэтому сначала выполняется И или И. Согласно этому сайту https://www.mysqltutorial.org/mysql-or/

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

Это означает, что в этом запросе база данных проверит, является ли Страна Францией, и кредитный лимит> 10000, прежде чем затем выполнить оператор OR между результат и является ли страна США.

ETA: на обычном английском языке sh второй запрос вернет все результаты, если страна США, независимо от кредитного лимита, он также вернет все результаты, если страна франция и кредитный лимит> 10000.

1 голос
/ 01 апреля 2020

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

Так как AND имеет более высокий приоритет, ваш второй запрос интерпретируется следующим образом:

SELECT customername, country, creditLimit FROM customers WHERE country = 'USA' OR (country = 'France' AND creditlimit > 10000);

Так что второй запрос ищет только страну, являющуюся США, или страну, являющуюся Францией, и кредитный лимит> 10000.

...