- StartUP SQL 교육 슬라이드를 책으로 작성 중인 페이지입니다.
- StartUP SQL이란? 데이터 분석가, 개발자, 기획자를 위한 SQL 입문 교육입니다.
- 실습을 위한 환경 설정 참고: https://sweetquant.tistory.com/561
별칭
SQL을 작성할 때 테이블과 컬럼에 별칭을 지정할 수 있습니다. 이와 같은 별칭은 SQL의 가독성을 높여주고, SQL 작성을 조금 더 효율적으로 할 수 있게 해줍니다.
테이블 별칭
FROM 절의 테이블에 테이블 별칭을 정의할 수 있습니다. 아래는 FROM 절의 상품(Item) 테이블을 T1이란 별칭으로 정의한 SQL입니다.
SELECT ItemId ,ItemNm ,ItemCat
FROM startdb.Item T1
WHERE ItemNm LIKE '아이스%'
ORDER BY ItemId ASC;
테이블 별치을 정의할 때는 아래와 같이 as를 사용할 수도 있습니다.
SELECT ItemId ,ItemNm ,ItemCat
FROM startdb.Item as T1
WHERE ItemNm LIKE '아이스%'
ORDER BY ItemId ASC;
이처럼 정의한 테이블 별칭은 SELECT, WHERE, ORDER BY 절의 컬럼명 앞에 붙여서 사용할 수 있습니다. 아래 SQL을 보면 컬럼명 앞에 테이블 별칭인 T1을 붙여서 사용하고 있습니다.
SELECT T1.ItemId ,T1.ItemNm ,T1.ItemCat
FROM startdb.Item T1
WHERE T1.ItemNm LIKE '아이스%'
ORDER BY T1.ItemId ASC;
이와 같이 SQL을 작성하면 SELECT 절의 ItemId가 FROM 절의 T1(Item)의 컬럼이란 것을 명확히 표시해줄 수 있습니다.
사실, 지금처럼 FROM 절에 하나의 테이블만 있는 경우에는 테이블 별칭을 사용하지 않아도 됩니다.
SQL에 사용한 모든 컬럼이 FROM 절의 테이블에 존재한다는 것을 SQL 작성자나 MySQL이나 다 알기 때문이죠.
하지만, 앞으로 우리가 배울 JOIN 이 포함된 SQL은 FROM 절에 여러 개 테이블이 사용됩니다.
JOIN과 같이 FROM 절에 여러 테이블을 사용하면 테이블 간에 같은 컬럼명이 중복 존재할 수 있습니다.
이때, 테이블 별칭으로 컬럼이 어느 테이블에 속하는지를 지정해주지 않으면 SQL 자체가 에러로 실행되지 않을 수 있습니다.
Tip. JOIN
JOIN(조인)은 테이블을 연결하는 구문으로서 관계형 데이터를 다루는 매우 중요한 핵심 기능입니다. 더 뒤에서 조인에 대해 배우게 될 것입니다.
아래 SQL을 실행해보면 에러가 발생합니다. 조인에 참여하는 상품(Item)과 상품가격이력(ItemPrcHist) 모두에 ItemId 컬럼이 존재하는데 SELECT 절에서 ItemId가 어느 테이블에 속하는지 명시하지 않아 에러가 발생한 것입니다.
SELECT ItemId ,ItemNm ,ItemCat, ToDt, SalePrc
FROM startdb.Item T1
INNER JOIN startdb.ItemPrcHist T2
ON (T1.ItemId = T2.ItemId)
WHERE T1.ItemNm LIKE '아이스%'
ORDER BY ItemId ASC;
-- 에러
Column 'ItemId' in field list is ambiguous
위와 같은 에러를 피하려면 SQL에서 컬럼명을 사용할 때 '테이블별칭.컬럼'과 같이 작성해야 합니다. 아래와 같이 말이죠.
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 '아이스%'
ORDER BY T1.ItemId ASC;
가능하다면 FROM 절에 하나의 테이블만 있어도 테이블 별칭을 정의하고 '테이블별칭.컬럼명'과 같이 SQL을 작성하는 것이 좋습니다. SQL을 작성하다 보면 처음에 하나의 테이블만 사용하다가 조인이 추가되는 경우가 많기 때문이죠.
컬럼 별칭
SELECT 절에서는 컬럼명 뒤에 컬럼 별칭을 지정할 수 있습니다. 컬럼명은 테이블을 생성할 때 정의한 물리적인 명칭입니다. 이러한 물리적인 명칭을 데이터 조회 시점에는 다른 명칭으로 보여주어야 할 때가 있습니다. 이때 컬럼 별칭을 지정할 수 있습니다.
아래 SQL은 ItemId 컬럼을 상품ID로, ItemNm은 상품명으로 별칭 처리한 SQL입니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명
FROM startdb.Item T1
WHERE T1.ItemId = 'IAMB'
ORDER BY T1.ItemId ASC;
-- 결과
상품ID 상품명
------ -------------------
IAMB 아이스아메리카노(B)
컬럼의 별칭을 정의할 때도 as 키워드를 사용할 수 있습니다.
SELECT T1.ItemId as 상품ID ,T1.ItemNm as 상품명
FROM startdb.Item T1
WHERE T1.ItemId = 'IAMB'
ORDER BY T1.ItemId ASC;
정의된 컬럼의 별칭은 아래와 같이 WHERE 절에서는 사용할 수 없습니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명
FROM startdb.Item T1
WHERE 상품ID = 'IAMB'
ORDER BY T1.ItemId ASC;
-- 에러
Unknown column '상품ID' in 'where clause'
아마도 DBMS(MySQL) 내부적으로 SELECT 절의 별칭 정의보다 WHERE 절을 먼저 처리하기 때문인거 같습니다.
실제 DBMS 내부적으로도 이와 같은 순서로 처리되는지는 알 수 없습니다. 다만, WHERE 절에서 SELECT 절의 별칭을 사용할 수 없다는 점으로 유추해볼 뿐입니다.
컬럼 별칭과 백틱
컬럼 별칭에 특수문자가 포함되거나 컬럼별칭을 숫자로 시작해야 할 경우에는 백틱(`)을 사용해 별칭을 정의해야 합니다.
백틱은 키보드의 Tab 키 위에, ESC키 아래 물결(~)과 함께 있는 키입니다.
백틱(`)은 MySQL에서 주로 사용됩니다. 오라클의 경우는 더블따옴표("")를 사용해 특수 문자가 포함된 컬럼 별칭을 정의합니다.
아래 SQL은 '핫/콜드구분' 별칭에 특수문자인 '/' 가 포함되어 에러가 발생합니다.
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은 아래와 같이 백틱을 이용해 컬럼 별칭을 정의해야 합니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명 ,T1.HotColdCd `핫/콜드구분`
FROM startdb.Item T1
WHERE T1.ItemId = 'IAMB'
ORDER BY T1.ItemId ASC;
-- 결과
상품ID 상품명 핫/콜드구분
------ ------------------- -----------
IAMB 아이스아메리카노(B) COLD
별칭을 사용한 ORDER BY
SELECT 절에서 정의된 컬럼 별칭은 WHERE 절에서는 사용할 수 없지만, ORDER BY 절에서는 사용할 수 있습니다.
아래 SQL은 컬럼 별칭을 사용해 ORDER BY를 처리하고 있습니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명
FROM startdb.Item T1
WHERE T1.ItemCat = 'BKR'
ORDER BY 상품ID ASC;
위 SQL의 ORDER BY는 아래와 같이 T1.ItemId를 바로 사용해도 됩니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명
FROM startdb.Item T1
WHERE T1.ItemCat = 'BKR'
ORDER BY T1.ItemId ASC;
마지막으로 ORDER BY 절에서는 SELECT 절의 컬럼 위치에 대한 순번을 사용할 수도 있습니다.
아래 SQL은 ORDER BY에 1이라고 표시했습니다. 여기서 1은 SELECT 절의 가장 왼쪽 컬럼인 T1.ItemId를 뜻합니다.
결국 앞에서 살펴본 두 개의 SQL과 같은 기준으로 정렬이 처리되는 SQL입니다.
SELECT T1.ItemId 상품ID ,T1.ItemNm 상품명
FROM startdb.Item T1
WHERE T1.ItemCat = 'BKR'
ORDER BY 1 ASC;
별칭 사용법에 대해 살펴봤습니다. SQL을 작성할 때 별칭을 습관적으로 사용하는 것을 추천드립니다.
SQL이 길어지고 복잡해질수록 적절한 별칭이 있어야 작성도 쉬워지며 가독성도 높아집니다.
다 이해하셨다면, 간단한 퀴즈 풀고 넘어가세요.
[StartUP SQL]
- 데이터 분석가, 개발자, 기획자를 위한 SQL 입문 교육
- 교육용 슬라이드 전체 무료 오픈: https://sweetquant.tistory.com/497
'SQL > StartUP SQL(교육슬라이드)' 카테고리의 다른 글
20-3. WINDOWING (0) | 2024.04.11 |
---|---|
20-2. LAG와 LEAD (0) | 2024.04.11 |
20-1. PARTITION BY (0) | 2024.04.11 |
19-4. GROUP BY와 분석함수 (0) | 2024.04.11 |
19-3. 순위 분석함수 (0) | 2024.04.11 |
19-1~19-2. 분석함수 이해하기 (0) | 2024.04.11 |
18. 날짜 테이블 (0) | 2024.04.11 |
17. PIVOT (0) | 2024.04.11 |