무료 동영상 강의 https://youtu.be/8dwQ3Jqn5X4
SQL을 작성할 때 테이블과 컬럼에 별칭을 지정할 수 있다. 별칭은 SQL의 가독성을 높여주고, SQL 작성을 조금 더 효율적으로 할 수 있게 해준다.
FROM 절의 테이블에 테이블 별칭을 정의할 수 있다. 아래는 FROM 절의 상품(Item) 테이블을 T1이란 별칭으로 정의한 SQL이다.
-- [SQL-3-9-1]
SELECT ItemId ,ItemNm ,ItemCat
FROM startdb.Item T1
WHERE ItemNm LIKE 'Iced%'
ORDER BY ItemId ASC;
ItemId ItemNm ItemCat
------ ------------------ -------
IAMB Iced Americano(B) COF
IAMR Iced Americano(R) COF
ICLB Iced Cafe Latte(B) COF
ICLR Iced Cafe Latte(R) COF
IEINR Iced Einspanner(R) COF
IFLTR Iced Flat White(R) COF
별칭을 정의할 때는 아래와 같이 as 키워드를 사용해도 된다.
-- [SQL-3-9-2]
SELECT ItemId ,ItemNm ,ItemCat
FROM startdb.Item as T1
WHERE ItemNm LIKE 'Iced%'
ORDER BY ItemId ASC;
이처럼 정의한 테이블 별칭은 SELECT, WHERE, ORDER BY 절에서 컬럼명 앞에 붙여서 사용할 수 있다. 아래 SQL을 보면 SELECT 절과 WHERE 절의 컬럼명 앞에 테이블 별칭인 T1을 붙여서 사용하고 있다.
-- [SQL-3-9-3]
SELECT T1.ItemId ,T1.ItemNm ,T1.ItemCat
FROM startdb.Item T1
WHERE T1.ItemNm LIKE 'Iced%'
ORDER BY T1.ItemId ASC;
위와 같이 SQL을 작성하면 SELECT 절의 ItemId가 FROM 절의 T1(Item)의 컬럼이란 것을 명확히 표시해줄 수 있다. 사실, 지금처럼 FROM 절에 하나의 테이블만 있는 경우에는 테이블 별칭을 사용하지 않아도 된다. SQL에 사용한 모든 컬럼이 FROM 절의 하나의 테이블에 존재한다는 것을 SQL 작성자나 MySQL이나 다 알기 때문이다. 하지만, 앞으로 우리가 배울 JOIN 이 포함된 SQL은 FROM 절에 여러 개 테이블이 사용된다. JOIN과 같이 FROM 절에 여러 테이블을 사용하면 테이블 간에 같은 컬럼명이 중복 존재할 수 있다. 이때, 테이블 별칭으로 해당 컬럼이 어느 테이블에 속하는지를 지정해주지 않으면 SQL 에러가 발생해 실행되지 않을 수 있다. 아래 SQL을 살펴보자. 조인에 참여하는 상품(Item)과 상품가격이력(ItemPrcHist) 테이블 모두에 ItemId 컬럼이 존재하는데, SELECT 절에서 ItemId가 어느 테이블에 속하는지 명시하지 않아 에러가 발생한다.
-- [SQL-3-9-4]
SELECT ItemId ,ItemNm ,ItemCat, ToDt, SalePrc
FROM startdb.Item T1
INNER JOIN startdb.ItemPrcHist T2
ON (T1.ItemId = T2.ItemId)
WHERE T1.ItemNm LIKE 'Iced%'
ORDER BY ItemId ASC;
-- 에러
Column 'ItemId' in field list is ambiguous
위와 같은 에러를 피하려면 SQL에서 컬럼명을 사용할 때 '테이블별칭.컬럼'과 같이 작성해야 한다. 아래와 같이 말이다.