저번에 면접봤던 S모 기업 필기에 다시 합격해 다시 면접을 볼 기회가 주어졌다. 저번엔 아쉽게 안되었으니 이번엔 이 악물고 준비해봐야 겠다. 오늘은 7장 NULL대응과 CAST 데이터 형변환을 공부했다.
코어레스. NULL을 다른 값으로 변환하기 위해 CASE나 IF를 쓰지 않고 더 간단하게 변환해주는 함수
COALESCE(인수1, 인수2, ..., 인수N)
인수1이 NULL이 아니면 인수1을 반환한다. NULL이면 인수2가 NULL이 아니면 인수2를 반환한다.
NULL이면 .... 인수N이 NULL이면 NULL을 반환한다.
인수의 왼쪽부터 순서대로 처음에 NULL이 아닌 값이 나오면 그걸 반환하면 된다.
모두 NULL이면 NULL을 반환한다.
특정 컬럼의 레코드가 NULLl일때 그 값을 0으로 변환하려면 아래처럼 쓰면 된다.
COALESCE(컬럼명,0)
SELECT AVG(COALESCE(delivery_time,0))
FROM delivery;
인수가 2개인 COALESCE라고 생각하면 된다.
IFNULL(인수1,인수2)
인수1이 NULL이아니면 인수1을, NULL이면 인수2를 반환한다.
IFNULL(컬럼명,0)으로 활용하면 편리하다.
다른 값을 NULL로 바꿔놓는 함수
NULLIF(인수1, 인수2)
인수1 == 인수2 면 NULL을 반환한다. 인수1 != 인수2면 인수1을 그대로 반환한다.
특정 컬럼의 역수를 구할 때 레코드가 0이면 분모로 들어갈 수 없으므로 아래처럼 활용한다.
SELECT 1 / NULLIF(컬럼명,0)
FROM 테이블명;
SELECT
123 + 1,
'123' + 1,
'123' + '1';
문자열과 정수의 합이기때문에 성립하지 않아야하지만 위의 결과는 모두 124이다.
+ 연산자에서는 변환할 수 있는 건 자동으로 데이터 형변환이 일어나는데 이를 캐스트
라 한다.
자동 형변환이 아닌 명시적인 형변환은 CAST 함수를 사용하면 된다.
CAST(변환하려는 데이터 AS 변환 후 데이터형)
SELECT CAST('123' AS SIGNED) + 1;
형 | 사용법 | 의미 |
---|---|---|
BINARY | BINARY, BINARY(a) | 바이너리, a바이트의 바이너리 |
CHAR | CHAR, CHAR(a) | 문자, a문자 |
DATE | DATE | 날짜 |
DATETIME | DATETIME | 일시 |
TIME | TIME | 시간 |
DECIMAL | DECIMAL, DECIMAL(a), DECIMAL(a,b) | 소수, 전체가 a자리의 소수, 전체가 a자릿수면서 소수부가 b자릿수의 소수 |
SIGNED | SIGNED, SIGNED INTEGER | 부호 있는 정수 |
UNSIGNED | UNSIGNED, UNSIGNED INTEGER | 부호 없는 정수 |
SELECT
CAST('123.45' AS SIGNED),
CAST('123.45' AS DECIMAL(5,1));
SELECT *
FROM ranking
ORDER BY rank_value;
이를 고치려면 CAST를 써서 SIGNED 정수로 변환하면 된다.
SELECT *
FROM ranking
ORDER BY CAST(rank_value AS SIGNED);