이번 시간에는 INNER JOIN에서 다뤘던 내용을 가지고 별칭에 대해 이야기해볼까 합니다.
2020/09/15 - [개발 창고/데이터베이스 개발] - [SQL] JOIN이란? - INNER JOIN
이전의 결합(JOIN)에 대한 이야기를 하면서도 보실 수 있었겠지만, SELECT문을 사용하다 보면 다음과 같은 SQL을 보실 수 있습니다.
SELECT *
FROM TB_BOARD
INNER JOIN TB_BOARD_COMMENT
ON TB_BOARD.BBS_SEQ = TB_BOARD_COMMENT.BBS_SEQ
이 중에서 오늘 다뤄볼 내용은 SELECT절 이나 ON, WHERE, GROUP BY, ORDER BY 등등에서 사용되는 별칭에 대해서 다뤄볼까 합니다.
별칭(Alias)이란?
흔히 한국어로는 별칭이지만, 주로 Alias라고 많이 이야기하는 이 녀석은 테이블이나 특정 컬럼에 대해 새로운 이름을 지정해주는 것과 같습니다. 이를 사람에 대비하면, 이름과 같습니다. 사람에게는 각자 고유 식별자인 주민번호라는 게 존재하지만 이를 이용해서 서로의 통성명을 한다면 어떤 일들이 발생할까요?? 기본적으로 자신의 개인정보가 유출된다고 불쾌해하는 것 이외에 매번 "OO야~"라고 부르는것보다 주민번호로 부르면 매우 이름을 부를 때마다 번거로워질 것입니다.
위의 SQL의 ON 절을 살펴보면, TB_BOARD.BBS_SEQ나 TB_BOARD_COMMENT.BBS_SEQ라고 사용된 컬럼을 보실 수 있습니다. 이는 BBS_SEQ라는 게시글 일련번호가 TB_BOARD와 TB_BOARD_COMMENT에 둘 다 존재하기 때문에, 각각의 BBS_SEQ가 어디에서 온 것인지를 판단해주기 위해 각자의 앞에 TB_BOARD라는 테이블, TB_BOARD_COMMENT라는 테이블로 인식을 시켜준 것입니다.
흔히 컬럼을 사용하는 데 있어서 3가지 정도의 방법이 있는데,
1. 컬럼의 소유주를 표기하지 않는 경우 (기본형Ⅰ)
SELECT 컬럼1, 컬럼2, 컬럼3
FROM 테이블1
- 장점
: 컬럼명을 번거롭게 지정하지 않아도 됨
- 단점
: 중복되는 컬럼에 대해 분류하기 어려움
: 만약 동일한 컬럼명을 갖은 테이블을 추가적으로 JOIN을 걸게 되는 경우 해당 컬럼의 소유주가 명확하지 않아 SQL문 자체에 오류가 발생할 수 있습니다. (← 이는 초급 개발자 뿐만 아니라 중급개발자들도 가끔 실수하는 부분입니다.)
2. 컬럼의 소유주를 테이블명으로 표기한 경우 (기본형Ⅱ)
SELECT 테이블1.컬럼1, 테이블1.컬럼2, 테이블1.컬럼3
FROM 테이블1
- 장점
: 컬럼의 소유주가 누구인지 명확하게 인식할 수 있음
: 중복된 컬럼명을 갖는 테이블을 JOIN하여도 오류가 발생하지 않음
- 단점
: 테이블명이 길어진 경우 컬럼 하나 사용에도 불필요한 타이핑으로 번거로울 수 있음
: 컬럼은 그대로이고 테이블이 변경된 경우 (ex. 2020년 매출 테이블 → 2021년 매출 테이블로 변경) 각각의 테이블 명을 컬럼명에 연결된 소유주 명을 변경해주어야 함
3. 컬럼의 소유주에 대한 ALIAS를 표기한 경우
SELECT 별칭1.컬럼1, 별칭1.컬럼2, 별칭1.컬럼3
FROM 테이블1 AS 별칭1
- 장점
: 컬럼의 소유주가 누구인지 명확하게 인식할 수 있음
: 중복된 컬럼명을 갖는 테이블을 JOIN 하여도 오류가 발생하지 않음
: 컬럼은 그대로이고 테이블이 변경된 경우 (ex. 2020년 매출 테이블 → 2021년 매출 테이블로 변경) 테이블 명만 변경하고 별칭은 그대로 사용해서 번거로움을 줄일 수 있음
- 단점
: 복잡한 SQL문에 대해 각각의 alias까지 숙지해야 하는 번거로움이 있음 (→ 별칭을 잘 지어줘야 함)
: 별칭이 바뀌면 각각의 컬럼에 대해 붙은 별칭을 바꿔줘야 함
※ 참고
Alias는 보통 AS라는 명령을 통해 별칭을 지정하지만, 띄어쓰기만으로도 별칭을 지정할 수 있습니다. (← AS 생략 가능)
// AS 생략 가능
SELECT 별칭1.컬럼1, 별칭1.컬럼2, 별칭1.컬럼3
FROM 테이블1 별칭1
그래서 첫 번째 테이블을 alias를 활용하여 작성해보면,
// Alias 사용 전
SELECT *
FROM TB_BOARD
INNER JOIN TB_BOARD_COMMENT
ON TB_BOARD.BBS_SEQ = TB_BOARD_COMMENT.BBS_SEQ
// Alias 사용 후
SELECT *
FROM TB_BOARD as T1
INNER JOIN TB_BOARD_COMMENT as T2
ON T1.BBS_SEQ = T2.BBS_SEQ
두 번째 문장처럼 테이블1, 테이블2의 약어진 T1와 T2로 변경하여 사용 가능합니다.
Column Alias
마지막으로 alias는 테이블이 아닌 컬럼에도 부여 가능한데 다음과 같이 사용하실 수 있습니다.
SELECT 컬럼1 as 별칭1
, 서브쿼리1 as 별칭2
FROM 테이블1
여기서 나오는 sub-query는 추후에 다룰 예정이며 일단 여기에서는 SELECT문에서 '컬럼값에 sub-query가 사용되었구나 ' 정보만 보시고 별칭에 집중해보면, 첫 번째 T1.BBS_SEQ에 BOARD_SEQ라는 별칭이 붙고 sub-query에는 BOARD_TYPE_NAME이라는 별칭이 붙었음을 확인하실 수 있습니다.
별칭을 사용하지 않은 경우
SELECT TB_BOARD.BBS_SEQ
, (SELECT TB_CODE.CODE_NAME
FROM TB_CODE
WHERE TB_CODE.CODE = TB_BOARD.BBS_TYPE_CODE
)
FROM TB_BOARD
다음과 같이 별칭을 사용하지 않은 경우 SELECT절에서 컬럼은 기존 컬럼명인 BBS_SEQ가 노출되고 sub-query의 경우에는 사용 명칭이 전체가 표현됨을 확인하실 수 있습니다. (매우 번거롭겠죠??) 만약 여기에 alias를 사용하게 된다면
별칭을 사용한 경우
SELECT TB_BOARD.BBS_SEQ as bbsSeq
, (SELECT TB_CODE.CODE_NAME
FROM TB_CODE
WHERE TB_CODE.CODE = TB_BOARD.BBS_TYPE_CODE
) as bbsTypeName
FROM TB_BOARD
위와 같이 간략화된 행의 이름을 갖는 테이블이 표현되게 됩니다.
다른 분의 글 중에 간단하게 alias에 대해 어떻게 쓰는걸 권정하는지 적어둔게 있어서 공유합니다.
- 테이블 Alias로 column을 단순, 명확히 할 수 있다.
- 현재의 SELECT 문장에 대해서만 유효하다.
- 테이블 Alias는 길이가 30자 까지 가능하나 짧을수록 더욱 좋다.
- 테이블 Alias는 의미가 있어야 한다.
- FROM절에 테이블Alias 설정시 해당 테이블 Alias는 SELECT 문장에서 테이블 이름 대신에 사용 한다
출처: www.gurubee.net/lecture/1018
'개발 창고 > Database' 카테고리의 다른 글
[SQL] GROUP BY란? - 함수편 (0) | 2020.09.28 |
---|---|
[SQL] GROUP BY란? - 기본편 (0) | 2020.09.23 |
[SQL] JOIN이란? - CROSS JOIN (0) | 2020.09.17 |
[SQL] JOIN이란? - OUTER JOIN (0) | 2020.09.16 |
[SQL] JOIN이란? - INNER JOIN (0) | 2020.09.15 |