MYSQL 제어문
기본 적으로 제어문은 무얼 조회하기 보다는, 새로운 필드를 생성해서 뷰로 만드는데 목적을 둔다.
새로운 필드를 생성하고 각 필드값을 제어문으로 조건을 줘서 값을 결정하는 방식이다.
CASE 문
CASE는 두가지 문법이 가능하다.
하나는 switch 같이 쓸 수 있고, 하나는 if문 같이 쓸 수 있다.
switch문
- value와 compare_value 값이 같으면, THEN 절을 반환 한다.
- 만약 서로 값이 같지 않으면, ELSE 절을 반환한다. 이때 ELSE 절이 없으면, NULL을 반환한다.
CASE value
WHEN compare_value THEN '반환 값'
WHEN compare_value THEN '반환 값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END
예제)
SELECT nickname,
( -- 하나의 새로운 필드를 만든다. 그 필드는 조건에 따라 다르게 표시된다.
CASE nickname
WHEN 'd' THEN 'D가 맞다.' -- 만일 nickname이 d라면 'D가 맞다.'를 값으로 표시
WHEN 'f' THEN 'F가 맞다.'
ELSE '포함되지 않는다.'
END
) AS test
FROM user_info
WHERE nickname IN ('d', 'e', 'f')
if문
- when뒤의 condition의 논리값이 참이면, THEN 절의 result 값을 반환한다.
- 만약 논리값이 거짓이라면, ELSE 절의 result 값을 반환한다. 이때 ELSE 절이 없으면, NULL을 반환한다.
CASE -- value가 없다.
WHEN [condition] THEN result -- when다음에선 조건식이 나온다.
WHEN [condition] THEN result ...
ELSE result
END
예제 테이블 : hero_collection
쿼리 (Query)
SELECT
idx,
(
CASE -- case뒤에 value가 없다.
WHEN type = '1' THEN '의사' -- 조건식에 따라 표기가 다르다
WHEN type = '2' THEN '장군'
WHEN type = '3' THEN '왕'
ELSE '일반인'
END
) AS hero_type,
name
FROM hero_collection;
결과
IF 문
IF()
- IF() 함수는 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환한다.
SELECT IF(0 < 1, 'yes', 'no'); -- 실행 결과 : yes
아래와 같이 특정 컬럼 값의 조건에 의해서, 다른 컬럼의 출력하는 분기 처리도 가능하다.
SELECT
Name AS '국가명' ,
Language AS '사용언어',
Percentage AS '점유율',
if(Percentage>=50,'공용어', '외래어') as '언어등급'
FROM country
IFNULL()
- IFNULL() 함수는 첫 번째 인수로 전달받은 값이 NULL인지 아닌지를 검사하여, 해당 필드의 값이 NULL 을 반환할 때, 지정한 값으로 대체하여 출력해준다.
-- 만일 column_name이 NULL이라면 대체할 값으로 출력
SELECT IFNULL(column_name, '대체할 값') FROM [table_name];
SELECT IFNULL(column_name, IFNULL(column_name, '대체할 값')) FROM [table_name];
IF EXISTS
- 만약 존재하면 쿼리 처리
DROP DATABASE IF EXISTS Hotel; -- 에러 방지를 위해 if문 추가
DROP TABLE IF EXISTS Reservation;
Create Table IF NOT EXISTS new_table like old_table -- (new_table 이 없으면 복사)