오늘은 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을 먼저하려면 괄호를 사용하면 된다.