SELECT m.member_name, o.order_id
FROM members m
INNER JOIN orders o ON m.member_id = o.member_id;
JOIN을 쓰다 보면 자연스럽게 테이블 이름 뒤에 짧은 글자를 붙이게 된다. 위 코드에서 members m, orders o가 바로 별칭(Alias)이다. 컬럼과 테이블 모두에 붙일 수 있고, 쿼리를 훨씬 읽기 쉽게 만들어준다.
조회 결과에서 컬럼 이름을 바꿔서 보여준다. AS 키워드를 쓰거나 생략해도 된다.
SELECT
member_name AS 이름,
email AS 이메일
FROM members;
이름 | 이메일
------+---------------
김민수 | kim@email.com
이지현 | lee@email.com
member_name이라는 컬럼명 대신 결과에는 이름으로 표시된다. 테이블 구조는 바뀌지 않고, 조회 결과에서만 이름이 달라진다.
공백이 포함된 별칭은 따옴표로 감싼다.
SELECT member_name AS '회원 이름' FROM members;
집계 함수 결과에 이름을 붙일 때도 유용하다.
SELECT
COUNT(*) AS 총주문수,
SUM(price) AS 총금액
FROM orders;
테이블 이름을 짧게 줄여서 쓴다. JOIN처럼 테이블을 여러 개 다룰 때 특히 편리하다.
-- 별칭 없이
SELECT members.member_name, orders.order_date
FROM members
INNER JOIN orders ON members.member_id = orders.member_id;
-- 별칭 사용
SELECT m.member_name, o.order_date
FROM members m
INNER JOIN orders o ON m.member_id = o.member_id;
테이블 이름이 길수록 효과가 크다. 별칭을 한 번 정하면 해당 쿼리 안에서는 원래 테이블 이름 대신 별칭만 써야 한다. 섞어 쓰면 오류가 난다.
-- 오류: m으로 별칭을 정했으면 members는 더 이상 못 쓴다
SELECT members.member_name
FROM members m;
컬럼 별칭과 테이블 별칭 모두 AS를 생략해도 동작한다.
-- 두 쿼리는 동일하다
SELECT member_name AS 이름 FROM members m;
SELECT member_name 이름 FROM members m;
보통 컬럼 별칭엔 AS를 명시하고, 테이블 별칭엔 생략하는 경우가 많다. 명확하게 읽히는 쪽을 선택하면 된다.
WHERE 절에서는 컬럼 별칭을 쓸 수 없다. 쿼리 실행 순서상 WHERE가 SELECT보다 먼저 처리되기 때문에, SELECT에서 정한 별칭을 WHERE는 아직 모른다.
-- 오류: WHERE에서 별칭 사용 불가
SELECT member_name AS 이름
FROM members
WHERE 이름 = '김민수';
-- 올바른 방법
SELECT member_name AS 이름
FROM members
WHERE member_name = '김민수';
반면 ORDER BY는 SELECT 이후에 실행되기 때문에 별칭을 쓸 수 있다.
SELECT member_name AS 이름
FROM members
ORDER BY 이름;
별칭은 기능보다 가독성의 영역이다. 쿼리가 길어질수록 테이블 이름을 풀네임으로 반복하는 건 읽기도 쓰기도 불편하다. 짧고 의미 있는 별칭 하나가 쿼리 전체를 훨씬 깔끔하게 만든다.