2021-11-30 20:42 작성
My SQL basic 메모
AND 연산자
MySQL은 내장된 Boolean type이 존재하지 않으므로 숫자 0을 FALSE
로 그 외의 값을 TRUE
로 사용한다. AND
연산자는 2 개 이상의 Boolean 표현을 통합해 1
, 0
혹은 NULL
을 반환하는 논리 연산자이다.
A AND B
에서A
와B
모두0
과NULL
이 아닐 경우1
을 반환한다.- 만약 둘 중 하나가
0
일 경우0
을 반환한다. - 그 이외에는
NULL
을 반환한다. - 실사용에 있어서
AND
연산자는SELECT
,UPDATE
,DELETE
구문의WHERE
절에 조건을 다는 방식으로 사용된다.
TRUE | FALSE | NULL | |
---|---|---|---|
TRUE | TRUE | FALSE | NULL |
FALSE | FALSE | FALSE | FALSE |
NULL | NULL | FALSE | NULL |
SELECT 1 AND 0, 0 AND 1, 0 AND 0, 0 AND NULL;
output:
1 AND 0 | 0 AND 1 | 0 AND 0 | 0 AND NULL |
---|---|---|---|
0 | 0 | 0 | 0 |
SELECT 1 = 0 AND 1 / 0 ;
output:
1 = 0 AND 1 / 0 |
---|
0 |
위에서 MySQL은 1 = 0
부분만 검사하는데 그 이유는 이 부분만 검사해도 전체 값이 0이 될 것이라는 것을 알 수 있기 때문이다. (1/0
에서 zero error가 발생함에도 불구하고: 1/0
만 실행할 경우 wanring 에러가 뜨며 NULL
을 반환함)
OR 연산자
TRUE | FALSE | NULL | |
---|---|---|---|
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;
output:
1 OR NULL | 0 OR NULL | NULL or NULL |
---|---|---|
1 | NULL | NULL |
연산자 우선
AND
와 OR
연산자가 모두 포함되어 있는 표현구(expression)의 경우, AND
가 OR
보다 우선한다. 따라서 MySQL은 AND
연산자를 먼저 평가한 후에 OR
연산자를 평가한다.
SELECT 1 OR 0 AND 0;
output:
1 OR 0 AND 0 |
---|
1 |
OR
연산자를 먼저 평가하고자 하는 경우 괄호()를 포함한다.
SELECT (1 OR 0) AND 0;
output:
(1 OR 0) AND 0 |
---|
0 |
SELECT
customername,
country,
creditLimit
FROM
customers
WHERE(country = 'USA'
OR country = 'France')
AND creditlimit > 100000;
output: country가 France
혹은 USA
면서 creditlimit의 조건을 충족하는 데이터
customername | country | creditLimit |
---|---|---|
La Rochelle Gifts | France | 118200.00 |
Mini Gifts Distributors Ltd. | USA | 210500.00 |
Land of Toys Inc. | USA | 114900.00 |
Saveley & Henriot, Co. | France | 123900.00 |
Muscle Machine Inc | USA | 138500.00 |
Diecast Classics Inc. | USA | 100600.00 |
Collectable Mini Designs Co. | USA | 105000.00 |
Marta’s Replicas Co. | USA | 123700.00 |
Mini Classics | USA | 102700.00 |
Corporate Gift Ideas Co. | USA | 105000.00 |
Online Diecast Creations Co. | USA | 114200.00 |
SELECT
customername,
country,
creditLimit
FROM
customers
WHERE
country = 'USA'
OR country = 'France'
AND creditlimit > 100000;
output: country가 USA
거나 creditLimit이 100,000 이상이면서 country가 France
인 데이터
customername | country | creditLimit |
---|---|---|
Signal Gift Stores | USA | 71800.00 |
La Rochelle Gifts | France | 118200.00 |
Mini Gifts Distributors Ltd. | USA | 210500.00 |
Mini Wheels Co. | USA | 64600.00 |
Land of Toys Inc. | USA | 114900.00 |
Saveley & Henriot, Co. | France | 123900.00 |
Muscle Machine Inc | USA | 138500.00 |
Diecast Classics Inc. | USA | 100600.00 |
Technics Stores Inc. | USA | 84600.00 |
American Souvenirs Inc | USA | 0.00 |
…