Search

3-9. 별칭

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
SQL
복사
별칭을 정의할 때는 아래와 같이 as 키워드를 사용해도 된다.
-- [SQL-3-9-2] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item as T1 WHERE ItemNm LIKE 'Iced%' ORDER BY ItemId ASC;
SQL
복사
이처럼 정의한 테이블 별칭은 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
복사
위와 같이 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
복사
위와 같은 에러를 피하려면 SQL에서 컬럼명을 사용할 때 '테이블별칭.컬럼'과 같이 작성해야 한다. 아래와 같이 말이다.
-- [SQL-3-9-5] SELECT T1.ItemId ,T1.ItemNm ,T1.ItemCat, T2.ToDt, T2.SalePrc FROM startdb.Item T1 INNER JOIN startdb.ItemPrcHist T2 ON (T1.ItemId = T2.ItemId) WHERE T1.ItemNm LIKE 'Iced%' ORDER BY T1.ItemId ASC;
SQL
복사
FROM 절에 하나의 테이블만 있어도 테이블 별칭을 정의하고 '테이블별칭.컬럼명'과 같이 SQL을 작성하는 것이 좋다. SQL을 작성하다 보면 처음에 하나의 테이블만 사용하다가 조인이 추가되는 경우가 많기 때문이다.

컬럼 별칭

SELECT 절에서는 컬럼명 뒤에 컬럼 별칭을 지정할 수 있다. 컬럼명은 테이블을 생성할 때 정의한 물리적인 명칭이다. 이러한 물리적인 명칭을 데이터 조회 시점에는 다른 명칭으로 보여주어야 할 때가 있다. 이때 컬럼 별칭을 사용한다. 아래 SQL은 ItemId 컬럼을 상품ID로, ItemNm은 상품명으로 별칭 처리한 SQL이다.
-- [SQL-3-9-6] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 FROM startdb.Item T1 WHERE T1.ItemId = 'IAMB' ORDER BY T1.ItemId ASC; 상품ID 상품명 ------ ----------------- IAMB Iced Americano(B)
SQL
복사
컬럼의 별칭을 정의할 때도 as 키워드를 사용할 수 있다.
-- [SQL-3-9-7] SELECT T1.ItemId as 상품ID ,T1.ItemNm as 상품명 FROM startdb.Item T1 WHERE T1.ItemId = 'IAMB' ORDER BY T1.ItemId ASC;
SQL
복사
정의된 컬럼의 별칭은 WHERE 절에서는 사용할 수 없다. 아마도 DBMS 내부적으로 SELECT 절의 별칭 정의보다 WHERE 절을 먼저 처리하기 때문일 것이다. 실제 DBMS 내부적으로도 이와 같은 순서로 처리되는지는 알 수 없다. 다만, WHERE 절에서 SELECT 절의 별칭을 사용할 수 없다는 점으로 유추해볼 뿐이다.
-- [SQL-3-9-8] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 FROM startdb.Item T1 WHERE 상품ID = 'IAMB' ORDER BY T1.ItemId ASC; -- 에러 Unknown column '상품ID' in 'where clause'
SQL
복사

컬럼 별칭과 백틱

컬럼 별칭에 특수문자가 포함되거나 컬럼별칭을 숫자로 시작해야 할 경우에는 백틱(`)을 사용해 별칭을 정의한다. 백틱은 키보드의 Tab 키와 ESC키 사이에 있는 물결(~)과 함께 있는 키다.
백틱(`)은 MySQL에서 주로 사용된다. 오라클의 경우는 백틱이 아닌 더블따옴표("")를 사용해 특수 문자가 포함된 컬럼 별칭을 정의한다. 아래 SQL은 '핫/콜드구분' 별칭에 특수문자인 '/' 가 포함되어 에러가 발생한다.
-- [SQL-3-9-9] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd 핫/콜드구분 FROM startdb.Item T1 WHERE T1.ItemId = 'IAMB' ORDER BY T1.ItemId ASC; -- 에러 You have an error in your SQL syntax;
SQL
복사
위 SQL은 아래와 같이 백틱을 이용해 컬럼 별칭을 정의해야 한다.
-- [SQL-3-9-10] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd `핫/콜드구분` FROM startdb.Item T1 WHERE T1.ItemId = 'IAMB' ORDER BY T1.ItemId ASC; 상품ID 상품명 핫/콜드구분 ------ ----------------- ----------- IAMB Iced Americano(B) COLD
SQL
복사

별칭을 사용한 ORDER BY

SELECT 절에서 정의된 컬럼 별칭을 WHERE 절에서는 사용할 수 없지만, ORDER BY 절에서는 사용할 수 있다. 아래 SQL은 컬럼 별칭을 사용해 정렬 처리를 하고 있다.
-- [SQL-3-9-11] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd `핫/콜드구분` FROM startdb.Item T1 WHERE T1.ItemCat = 'BKR' ORDER BY `핫/콜드구분` ASC;
SQL
복사
ORDER BY에는 아래와 같이 직접 컬럼명을 지정하거나 SELECT 절의 표시된 컬럼 위치 순번을 사용할 수도 있다. ORDER BY에 숫자 1을 적으면 SELECT 절에 가장 왼쪽에 표시된 컬럼을 뜻한다.
-- [SQL-3-9-12] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd `핫/콜드구분` FROM startdb.Item T1 WHERE T1.ItemCat = 'BKR' ORDER BY T1.HotColdCd ASC; -- [SQL-3-9-13] SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd `핫/콜드구분` FROM startdb.Item T1 WHERE T1.ItemCat = 'BKR' ORDER BY 3 ASC;
SQL
복사

BOOSTER QUIZ

BOOSTER QUIZ ERD

BOOSTER QUIZ 3-9-1

상품카테고리가 베이커리인 상품의 정보를 보여주세요. 컬럼명을 한글로 처리해주세요.
대상 테이블: 상품(Item)
조회 조건: ItemCat가 BKR(베이커리)인 데이터
조회 컬럼: ItemId, ItemNm, ItemCat ,HotColdCd
추가 조건: 아래와 같이 컬럼명을 별칭 처리해서 보여주시오.
ItemId->상품ID, ItemNm->상품명, ItemCat->상품종류, HotColdCd->냉/온구분
정렬 기준: 상품명으로 내림차순 정렬하시오.
상품ID 상품명 상품종류 냉/온구분 ------ ------------------- -------- --------- MACA Macaron(R) BKR HOT CMFR Chocolate Muffin(R) BKR COLD BMFR Blueberry Muffin(R) BKR COLD BGLR Bagel(R) BKR HOT
SQL
복사