
오늘은 sql 책 3챕터를 이어서 진행했다.
여러 조건을 조합할 수 있는 연산자.
1(TRUE)이나 0(FALSE)의 논리값끼리 연산해 결과를 똑같이 1이나 0으로 반환하는 연산자.
| 명칭 | 연산자 | 사용법 | 의미 |
|---|---|---|---|
| 논리곱 | AND && | a AND b (a && b) | a,b 모두 1인경우에만 1을 반환 |
| 논리합 | OR | ||
| 부정 | NOT ! | NOT a (!a) | a가 1이면 0, 0이면 1을 반환 |
| 배타적 논리합 | XOR | a XOR b | a,b 양쪽이 다르면 1 |
SELECT * FROM product
WHERE price >= 100 AND price < 150 AND stock >= 10;

SELECT * FROM product
WHERE price < 100 OR price >= 150 OR stock >= 20;

SELECT * FROM customer
WHERE NOT(membertype_id = 1);

SELECT * FROM product
WHERE price >= 100 XOR price < 150;

둘 중 하나만 만족하는 조건을 보여준다. 둘다 맞거나 둘다 틀리면 해당하지 않는다.
SELECT * FROM product
WHERE price >= 100 XOR price < 150 XOR stock >= 100;

다중으로 쓰게되면 앞의 식을 먼저 판별한 뒤 뒤의 식을 판별한다.
| 연산자 | 사용법 | 의미 |
|---|---|---|
| BETWEEN AND | BETWEEN a AND B | a 이상 b 이하의 경우 1을 반환 |
| NOT BETWEEN AND | NOT BETWEEN a AND b | a 이상 b 이하가 아닌 경우 1을 반환 |
| IN | IN (a,b,c) | a,b,c 중 하나라도 일치하면 1을 반환 |
| NOT IN | NOT IN (a,b,c) | a,b,c 중 어느것도 일치하지 않으면 1을 반환 |
price BETWEEN 100 AND 150은 price >= 100 AND price <= 150과 같다.
price NOT BETWEEN 100 AND 150은 price < 100 OR price > 150과 같다.
날짜에서도 사용이 가능하다.
ex)
SELECT * FROM customer
WHERE birthday BETWEEN '1990-01-01' AND '1999-12-31';

SELECT * FROM product
WHERE product_id IN (1,3,4);

| 연산자 | 사용법 | 의미 |
|---|---|---|
| + | a + b | a에 b를 더한다 |
| - | a - b | a에서 b를 뺀다 |
| * | a * b | a에 b를 곱한다 |
| / | a / b | a를 b로 나눈다 |
| % | a % b | a를 b로 나눈 나머지 |
| MOD | a MOD b | a를 b로 나눈 나머지 |
| DIV | a DIV b | a를 b로 나눌 때 정수부 |
나누는 수에 0을 쓰거나 대상이 NULL이면 결과는 전부 NULL이 된다.
ex1) WHERE구에 사용할 때
SELECT * FROM product
WHERE stock * price >= 5000;

SELECT product_name AS 제품명,
stock * price AS 총재고가격
FROM product;

| 우선순위(높은순) |
|---|
| BINARY |
| ! |
| *,/,DIV,MOD,% |
| -,+ |
| 비교(-,>=,<=,<,>,<>,<=>,!=,IS,LIKE,IN |
| BETWEEN, CASE, WHEN, THEN, ELSE |
| NOT |
| &&,AND |
| XOR |
SELECT * FROM product
WHERE price < 130 OR price > 150 AND stock >= 20;
이 조건에선 AND가 OR보다 우선되어 연산된다. OR을 먼저하려면 괄호를 사용하면 된다.