본문 바로가기

DB - MySQL

SELECT문 - 조건활용(연산자)

반응형

1. 비교 연산자

비교 연산자를 활용하여 SELECT문에 조건을 설정할 수 있다.

💡구문: SELECT 컬럼명 FROM 테이블명 WHERE 조건;

SELECT customer_name FROM customer WHERE membertype_id = 2;
# 조회 결과: membertype_id가 2인 레코드 조회

SELECT customer_name FROM customer WHERE membertype_id != 1;
# 조회 결과: membertype_id가 1이 아닌 레코드 조회
# 해석1: membertype_id가 2이면 true
# 해석2: membertype_id가 1이 아니면 true
# 해석3: membertype_id가 1이면 false
# 참고사항: 특수한 경우로 조건에 들어맞지 않을 경우, NULL 반환됨

SELECT * FROM product WHERE price < 200;
# 조회 결과: price가 200 미만인 레코드 조회


[비교 연산자]

연산자 사용법 의미
= a = b a와 b는 같다
<=> a <=> b a와 b는 같다 (NULL 대응 가능)
!= a !=b a와 b는 다르다
<> a<>b a와 b는 다르다
< a<b a는 b보다 작다
> a>b a 는 b보다 크다
<= a<=b a는 b 이하
>= a>=b a는 b 이상

[ NULL 관련 연산자 ]

연산자 사용법 의미
IS NULL a IS NULL a는 NULL이다
IS NOT NULL a IS NOT NULL a는 NULL이 아니다

[ BOOLEAN형 관련 연산자 ]

연산자 사용법 의미
IS a IS TRUE a는 TRUE이다
IS NOT a IS NOT TRUE a는 TRUE가 아니다

2. 논리연산자

부울(Boolean) 대수를 기반으로 하는 연산자로 조건식을 평가하거나 조적하는데 사용된다. 1(TRUE) 혹은 0(FALSE)의 논리값끼리 연산하여 결과를 똑같이 1 또는 0으로 반환한다.

SQL에서 SELECT문, WHERE구문에 2개 이상의 조건을 조합하여 조건을 지정할 때 사용할 수 있다.

 

1) AND 연산자: 💡 설정한 조건에 모두 TRUE인 경우에만 TRUE로 반환!

SELECT * FROM product WHERE price >= 100 AND price < 150;
# 조회 결과: 100 <= PRICE < 150 안에 포함되는 컬럼 조회 
SELECT * FROM product WHERE price >= 100 AND price < 150 ANd stock >= 10;
# 조회 결과: 100 <= PRICE < 150 안에 포함되면서, stock >= 10에도 포함되는 컬럼 조회

 

2) OR 연산자: 💡 설정한 조건에 하나라도 TRUE인 경우, TRUE로 반환!

SELECT * FROM product WHERE price < 100 OR price >= 150;
# 조회 결과: price가 100보다 작은 컬럼 + price가 150 이상인 컬럼 조회
SELECT * FROM product WHERE price < 100 OR price >= 150 OR stock >= 10;
# 조회 결과: price가 100보다 작은 컬럼 + price가 150 이상인 컬럼 + stock이 10 이상인 컬럼 조회

 

3) NOT 연산자: 💡 TRUE → FALSE / FALSE → TRUE로 반환!
NOT으로 반전을 주고자하는 값을 괄호( )로 묶으면, 코드적 실수를 줄일 수 있음!

SELECT * FROM customer WHERE NOT( membertype_id =1 ); 
# 조회 결과: membertype_id가 1이 아닌 컬럼 조회

 

4) XOR 연산자: 💡 두 개의 조건의 결과가 TRUE + FALSE 혹은 FALSE + TRUE인 경우에만 TRUE 반환!

SELECT * FROM product WHERE price >= 100 XOR price < 150;
SELECT * FROM product WHERE price < 150 XOR price >= 100;
# 조회 결과: 1)price >= 100, 2)price<150 => 1), 2)의 결과가 TRUE, FALSE 혹은 FALSE, TRUE인 컬럼만 조회


[논리 연산자]

명칭 연산자 사용법 의미
논리곱 AND
&&
a AND b
a && b
a, b 양쪽 1인 경우만 1을 반환 (모두 TRUE이면, TRUE 반환)
논리합 OR
||
a OR b
a || b
a, b 중 적어도 어느 한쪽이 1이면 1을 반환 (둘 중 하나만 TRUE이면, TRUE 반환)
부정 NOT
!
NOT a
!a
a가 0이면 1, 0이외는 0 반환 (TRUE면 FALSE, FALSE면 TRUE 반환)
배타적 논리합 XOR a XOR b a, b 중 어느 한쪽만 1이면 1, 그 외는 0 반환

3. 논리 연산자 외 자주 사용하는 연산자

1) BETWEEN 연산자: 💡 BETWEEN 연산자는 등위연산자(<=, >=)의 역할과 같음!

SELECT * FROM product WHERE price BETWEEN 100 AND 150;
# 조회 결과: price가 100이상 150이하인 레코드 조회
# 해석: price >= 100 AND price <= 150과 동일함

SELECT * FROM product WHERE price NOT BETWEEN 100 AND 150;
# 조회 결과: price가 100이상 150이하가 아닌 레코드 조회


2) IN 연산자: 
💡 여러 값 중 어느 것과 일치하는 걸 조건으로 하는 경우 OR을 여러개 사용하는 것보다 IN 연산자를 활용하여 효율성을 높일 수 있음!

OR 연산자보다 처리속도가 빠르기 때문에, 데이터가 방대할 때 IN 연산자를 사용하는 것이 처리 속도 측면에서도 효과적이다. 그리고, IN 연산자 안에 다른 SELECT 문장을 사용할 수 있기 때문에 IN 연산자를 익혀놓으면 좋다.

SELECT * FROM product WHERE product_id IN(1, 3, 4);
# 조회 결과: product_id가 1, 3, 4 중 일치하는 레코드 조회
SELECT * FROM product WHERE product_id NOT IN(1, 3, 4);
# 조회 결과: product_id가 1, 3, 4 중 어느 것과도 일치하지 않은 레코드 조회


[논리연산자 외 자주 사용되는 연산자]

연산자 사용법 의미
BETWEEN AND BETWEEN a AND b a 이상 b 이하의 경우 1(TRUE) 반환
NOT BETWEEN AND NOT BETWEEN a AND b a 이상 b 이하가 아닌 경우 1(TRUE) 반환
IN IN (a, b, c) a, b, c 중 어느 것에 일치하면 1(TRUE) 반환
NOT IN NOT INT (a, b, c) a, b, c 중 어느 것에 일치하지 않으면 1(TRUE) 반환

4. 산술 연산자

덧셈, 뺄셈 등의 계산을 행하는 연산자를 산술 연산자라 한다.

SELECT * FROM product WHERE stock * price >= 5000;
# 조회 결과: stock과 price를 곱한 값이 5000 이상인 레코드 조회

SELECT product_name as '상품명', stock*price as '재고x가격' FROM product;
# 조회 결과: prouct_name과 "stock*price 곱한값"을 as 뒤 별칭으로 조회


[산술 연산자]

연산자 사용법 의미
+ 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로 나눈 나머지

5. 연산자 우선순위

1) ( )가 최우선 적용된다.

2) 기본 우선순위는 아래의 표에 따른다.

3) 같은 순위의 경우 앞에서부터 차례대로 시행된다.

 

[기본 연산자 우선순위]

연산자 우선순위
BINARY 1
! 2
*, /, DIV, %, MOD 3
-, + 4
비교 연산자, LIKE, IN 5
BETWEEN, CASE, WHEN, THEN, ELSE 6
NOT 7
&&, AND 8
XOR 9
반응형

'DB - MySQL' 카테고리의 다른 글

SELECT문 - 조건문 활용  (0) 2023.05.23
SLECET문 - 집계함수 및 문자,숫자,날짜 관련 함수  (0) 2023.05.23
SELECT문 - 정렬  (0) 2023.05.23
SELECT문 - 기본 및 텍스트 마이닝  (0) 2023.05.23
데이터베이스 개념  (0) 2023.05.23