논리 연산자
논리 연산자의 종류
- 논리 연산자는 기본적으로 1(true), 0(false)의 값을 반환
- NULL을 반환하는 특수 경우도 있음
명칭 | 연산자 | 사용법 | 의미 |
---|
논리곱 | AND (&&) | a AND b, a && b | a,b 양쪽 다 1인 경우만 1 반환 |
논리합 | OR (||) | a OR b, a || b | a,b 중 적어도 하나만 1이면 1을 반환 |
부정 | NOT (!) | NOT a, !a | a가 0이면 1, 0이외는 0을 반환 |
배타적 논리합 | XOR | a XOR b | a,b 중 어느 한쪽만 1이면 1, 그 외는 0을 반환 |
AND
- 좌우 조건의 결과가 모두 1이라면 1, 그 밖은 0을 반환
- AND가 여러개인 경우 순차적으로 적용
- price가 100 ~ 150값을 찾고 그 다음, 그 결과에 대해서 stock이 10 이상인 것을 검색
0 AND NULL
은 0, NULL AND NULL
, 1 AND NULL
은 NULL
반환
SELECT
*
FROM
product
WHERE
price >= 100 AND price < 150;
SELECT
*
FROM
product
WHERE
price >= 100 AND price < 150 AND stock >= 10;
OR
- 좌우 결과가 적어도 어느 한 쪽이 1이라면 1 반환, 그 외는 0을 반환
- OR가 여러개인 경우 순차적으로 적용
- price가 100보다 작거나 150보다 큰 값을 찾고 그 다음, 그 결과에 대해서 stock이 10 이상것 중 하나라도 만족하는 것을 검색
0 OR NULL
, NULL OR NULL
은 NULL
, 1 OR NULL
은 1 반환
SELECT
*
FROM
product
WHERE
price < 100 OR price >= 150;
SELECT
*
FROM
product
WHERE
price < 100 OR price >= 150 OR stock >= 10;
NOT
- 값이 0이라면 1, 1이라면 0을 반환
NOT NULL
의 결과는 NULL
- 아래의 예시의 경우
member_id
가 1이 아닌 레코드를 가져옴
SELECT
*
FROM
customer
WHERE
NOT (member_id = 1);
XOR
- 배타적 논리합
- 좌우 조건의 결과가 어느 한 쪽만이 1이라면 1, 그 밖은 0을 반환
- 둘 중에 하나만 1이여야 반환 (아래 예시에서 100~150 빼고 전부 반환)
- XOR가 여러개인 경우 순차적으로 적용
NULL
에 대한 XOR 결과는 전부 NULL
SELECT
*
FROM
product
WHERE
price >= 100 XOR price < 150;
SELECT
*
FROM
product
WHERE
price >= 100 XOR price < 150 XOR stock >= 10;
기타 연산자
편리한 연산자
연산자 | 사용법 | 의미 |
---|
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을 반환 |
BETWEEN 연산자
SELECT
*
FROM
product
WHERE
price BETWEEN 100 AND 150;
SELECT
*
FROM
prpduct
WHERE
price NOT BETWEEN 100 AND 150;
IN 연산자
- 배열 등에 주로 사용되며, 배열에 포함되는 경우 1, 포함되지 않는 경우는 0을 반환
SELECT
*
FROM
product
WHERE
product_id IN(1, 3, 4);
SELECT
*
FROM
product
WHERE
product_id NOT IN(1, 3, 4);
산술 연산자
산술 연산자의 종류
연산자 | 사용법 | 의미 |
---|
+ | a + b | a에 b를 더한다 |
- | a - b | a에 b를 뺀다 |
* | a * b | a에 b를 곱한다 |
/ | a / b | a에 b를 나눈다 |
% | a % b | a를 b로 나눈 나머지 |
DIV | a DIV b | a를 b로 나눌 때의 정수 부분 |
MOD | a MOD b | a를 b로 나눈 나머지 |
SELECT
*
FROM
product
WHERE
stock * price >= 5000;
SELECT
product_name,
stock * price
FROM
product;
연산자의 우선 순위
- 여러 연산자를 동시에 사용할 때는 우선 순위가 발생
- 우선 순위순으로 정리
연산자 | 비고 |
---|
BINARY | |
! | |
*, /, DIV, %, MOD | |
-, + | |
=, <=>, >=, <=, <, >, <>, !=, IS, LIKE, IN | |
BETWEEN, CASE, WHEN, THEN, ELSE | |
NOT | |
&&, AND | |
XOR | |
||, OR | |
연산자를 사용할 때의 규칙
- AND가 OR보다 먼저 연산됨
- OR를 먼저 하려면 ( )로 묶어야함
SELECT
*
FROM
product
WHERE
price < 130 OR price > 150 AND stock >= 20;
SELECT
*
FROM
product
WHERE
(price < 130 OR price > 150) AND stock >= 20;
출처: 그림으로 배우는 SQL 입문