본문 바로가기
CS공부/SQL

CASE문, WHERE절

by 티코딩 2024. 1. 16.

ㅇ CASE문

CASE문은 조건문이라고도 불린다. 함수는 아니지만 함수의 역할을 대신해 조건을 만족할 시 특정값으로 분류가 가능하다.

CASE WHEN 조건1 THEN 출력1

           WHEN 조건2 THEN 출력2

           ELSE 출력3 END

이렇게 쓰인다.

SELECT sales_amount , CASE WHEN sales_amount < 0 THEN '환불거래'

                    WHEN sales_amount > 0 THEN '정상거래' END AS 적용결과

FROM sales

 

sales_amount 적용결과
-30000 환불거래
90000 정상거래
40000 정상거래

 

이런식으로 쓰인다.

 

ㅇ WHERE 절

FROM절에 작성한 테이블에서 원하는 데이터(행)만 필터링 할 수 있도록 조건을 줄때 사용함. 

SELECT *

FROM 테이블

WHERE 조건식

이렇게 사용되며

순서는 'FROM 테이블' 에서 테이블을 조회하고, 'WHERE 조건식'에서 조건을 만족하는 행만 조회하고, 'SELECT절'에서 특정 칼럼만 조회하는 순서로 적용된다.

예시를 보면

SELECT student_id, name, gender

FROM student

WHERE gender = 'Male'

 

student_id name gender
123 홍길동 Male
124 홍길순 Female
125 김철수 Male
126 황지토 Male

이 student 테이블이 있다고 하면 저 위에 쿼리를 적용하면

 

student_id name gender
123 홍길동 Male
125 김철수 Male
126 황지토 Male

 

WHERE 조건식에서 gender가 Male인 경우만 뽑았기 때문에 Female이 해당하는 행은 출력이 되지 않는다.

 

WHERE 조건식에 활용되는 연산자로는

비교연산자, SQL 연산자, 논리연산자, 부정연산자가 있다. 두개 이상의 연산자를 작성해야한다면

괄호 - 부정 - 비교 - 논리(AND) - 논리(OR) 순으로 데이터가 처리 된다.

 

ㅇ 비교 연산자

ㅁ 부등호

자바에서 사용하는 부등호랑 거의 같다.

자바에서 같다는 == 이지만 SQL에선 = 이다.

같지않다는 != 과 <> 두개가 쓰인다.

그외엔 다 같아서 굳이 정리하진 않겠다.

WHERE price >= 100

WHERE studend_id <> 123

이렇게 쓰인다.

ㅁ BETWEEN

between A and B. A와 B 사이에 있는 행만 필터링

WHERE price BETWEEN 100 AND 200 -> price가 100이상 200이하인 데이터를 필터링해줘.

 

ㅁ IN

특정값과 일치하는 행만 필터링

WHERE product_name IN ('티셔츠', '아우터') -> product_name이 티셔츠, 아우터와 정확히 일치하는 데이터를 필터링해줘.

 

ㅁ LIKE

해당 키워드가 데이터에 포함된 행만 필터링

WHERE name LIKE('김%') -> name 컬럼에서 김으로 시작하는 행만 필터링해줘.

%형 -> 형으로 끝나는 행만 필터링

김%형 -> 김으로 시작해서 형으로 끝나는 행만 필터링

%서울시% -> ~서울시~를 포함하는 행만 필터링

 

ㅁ ISNULL

데이터가 NULL값인 행만 필터링

WHERE phone IS NULL -> phone 컬럼의 데이터가 NULL인 행만 필터링해줘.

 

ㅇ 논리 연산자

ㅁ AND

앞 뒤 조건을 모두 만족하는 행만 필터링

WHERE gender='Male' AND age>20 -> gender이 MALE 이고 age가 20 초과인 행만 필터링해줘.

 

ㅁ OR

앞 뒤 조건중 하나라도 만족하는 행만 필터링

WHERE gender='Male' OR name Like '김%' -> gender이 Male이거나 name이 김으로 시작하는 행들을 필터링해줘.

 

위에서 말했듯이 괄호 - 부정 - 비교 - 논리(AND) - 논리(OR) 순으로 데이터가 처리 되는데, 

WHERE name LIKE '김%'

OR name LIKE '홍%'

AND status = '휴학'

이렇게 AND 보다 OR이 먼저 나오면 안된다. 데이터 처리 순서대로 조건을 달아야한다.

꼭 저렇게 해야겠다면, 괄호를 쓰면 된다.

WHERE (name LIKE '김%'

OR name LIKE '홍%')

AND status = '휴학'

이렇게 하면 괄호먼저 필터링되고 그다음에 AND 조건을 필터링한다.

 

ㅇ 부정 연산자

연산자 앞에 NOT을 붙히면 조건이나 값에 반대의 값을 반환함.

 

ㅁ NOT IN

WHERE name NOT IN ('홍길동', '홍길순') -> name 컬럼값중 홍길동, 홍길순을 제외하고 전부 출력해줘

ㅁ IS NOT NULL

WHERE phone IS NOT NULL -> phone 컬럼값중 NULL값제외하고 전부 출력해줘

 

이것말고도 NOT LIKE등 위에서 언급했던것들 앞에 NOT만 붙히면 '조건에 해당하는값들 외엔 전부다' 가 된다.

'CS공부 > SQL' 카테고리의 다른 글

ORDER BY절, 서브쿼리  (1) 2024.01.22
GROUP BY절, HAVING절  (0) 2024.01.19
SELECT절-숫자함수, 날짜함수, 순위함수  (0) 2024.01.12
SELECT절-문자열메서드  (0) 2024.01.10
데이터베이스와 SQL  (0) 2024.01.05