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 |
…