매일 SQL을 연습할 수 있는 문제를 조금씩 풀고 있습니다. SQL을 풀면서 새로운 문법 뿐만 아니라 작성 스타일에 대한 것도 찾아보면서 소위 말하는 ‘Best Practice’(모범 사례)도 같이 학습하고 있는데요. 오늘 정리한 사항을 정리해보려고 합니다.
다만, 이런 Best Practice, Style Guide 같은 것은 사람에 따라 다르게 생각할 수도 있습니다. 그리고 시간이 지나면 평가가 바뀌는 경우도 있습니다. 특정 항목이 deprecated나 혹은 새롭게 성능에 대한 자료가 나와서 그럴 수도 있구요. 여러 이유가 있을 수 있습니다. 그러니까 자신이 생각하는 방향성에 맞게 사용하되, 조직의 규칙이 있다면 그것을 따르는 것이 가장 좋다고 생각합니다.
별칭(Alias)은 명시적으로 AS를 사용하자
컬럼이나 테이블에 별칭을 붙일 때는 AS 키워드를 명시적으로 사용하는 것이 좋습니다. 물론 별칭에 공백이나 특수문자를 포함해야 한다면 큰따옴표(”)를 사용합니다.
-
이유:
AS는 ‘이것은 별칭이다’라는 의도를 명확하게 보여줍니다. 코드의 가독성을 높이고, 다른 개발자나 미래의 내가 코드를 오해할 소지를 줄여줍니다. 또한AS는 ANSI SQL 표준입니다.-- Good SELECT u.user_id AS id, u.user_name AS name FROM USERS AS u; -- Bad SELECT u.user_id id, u.user_name name FROM USERS u;
NULL 처리는 표준 함수 COALESCE()를 사용하자
NULL 값을 다른 값으로 대체할 때 MySQL의 IFNULL() 대신 ANSI 표준 함수인 COALESCE() 를 사용하는 것이 좋습니다.
- 이유
-
호환성:
COALESCE()는 ANSI SQL 표준입니다. 따라서 DB 벤더가 변경되어도 코드를 수정할 필요가 없습니다. 반면에IFNULL()은 MySQL 그리고 MySQL로부터 포크된 MariaDB 등 에서 사용할 수 있습니다.이식성을 위해 벤더-특화된 함수 대신 표준 SQL 함수만을 사용하라.
SQL Style Guide by Simon Holywell -
유연성:
IFNULL()은 인자를 2개만 받습니다. 첫번째 인자의 컬럼이NULL이면, 두번째 인자를 반환합니다. 따라서 유사한 컬럼을 묶어서 표현하려는 경우에는 IFNULL을 중첩해서 사용해야 합니다.COALESCE()는 여러 개의 인자를 받아 왼쪽부터 순서대로NULL이 아닌 첫 번째 값을 반환합니다. 이는IFNILL()에 비해 여러 개의 컬럼을 이용한NULL처리 로직을 간결하게 만들어 줍니다.-- Good SELECT COALESCE(phone_number, office_number, '연락처 없음') FROM USERS; -- Bad SELECT IFNULL(phone_number, IFNULL(office_number, '연락처 없음')) FROM USERS;
참고