표준 SQL 에서 -- 는 한 줄 주석이다. 그 줄의 나머지는 전부 사라진다. Oracle · PostgreSQL · MySQL · SQL Server 모두 같다.
SELECT col --aaa
FROM tbl;
이 쿼리는 SELECT col FROM tbl; 과 완전히 같다. aaa 를 별칭으로 쓰려던 의도였다면 주석 기호를 지워야 한다.
SELECT col AS aaa FROM tbl;
SELECT col aaa FROM tbl; -- AS 는 생략할 수 있다
문제는 주석이 있는 SQL 을 코드에서 한 줄로 합칠 때 생긴다. 줄바꿈이 사라지면 뒤에 오는 모든 절이 주석에 먹힌다.
SELECT col --조건 주의
FROM tbl WHERE id = 1
이 문자열을 개행 없이 이어 붙이면 SELECT col --조건 주의 FROM tbl WHERE id = 1 이 되어 FROM 절이 통째로 사라지고 문법 오류가 난다. ORM 이나 문자열 조합으로 SQL 을 만드는 코드, 로그에서 복사한 쿼리를 다시 실행할 때 흔히 겪는다.
여러 줄에 걸칠 수 있는 주석을 쓰면 이 문제가 없다.
SELECT col /* 조건 주의 */
FROM tbl WHERE id = 1
MySQL 과 MariaDB 는 -- 다음에 공백이나 제어문자가 와야 주석으로 본다. 그렇지 않으면 연산자로 해석한다.
SELECT 1--2; -- MySQL 에서는 1 - (-2) = 3
SELECT 1-- 2; -- 주석. 결과는 1
다른 엔진에는 이 제약이 없으므로 이식할 때 결과가 달라진다. -- 뒤에는 항상 공백을 둔다.
Oracle 의 옵티마이저 힌트는 주석처럼 생겼지만 주석이 아니다.
SELECT /*+ INDEX(t idx_t_id) */ * FROM tbl t WHERE id = 1;
/*+ 로 시작해야 하고 /* + 처럼 공백이 들어가면 그냥 주석이 되어 조용히 무시된다. MySQL 은 /*! 50700 ... */ 형태의 버전 조건부 실행 주석을 쓰므로, 덤프 파일에서 주석처럼 보이는 줄을 지우면 동작이 바뀔 수 있다.