ㅇ 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 |