개발 창고/Database

[SQL] 별칭(Alias) 활용하기

로이제로 2020. 9. 22. 09:16
반응형


이 버전에서는 TOC를 지원하지 않습니다. (ex. 모바일)

 이번 시간에는 INNER JOIN에서 다뤘던 내용을 가지고 별칭에 대해 이야기해볼까 합니다.

 

2020/09/15 - [개발 창고/데이터베이스 개발] - [SQL] JOIN이란? - INNER JOIN

 

[SQL] JOIN이란? - INNER JOIN

 데이터 베이스를 쓰다 보면 join이라는 말을 많이 듣게 됩니다. 간략하게 이야기하면 "JOIN은 두 테이블을 하나의 테이블로 만드는 것"  이라고 보시면 됩니다.  이게 무슨 뜻일까요??  일단 두 �

royzero.tistory.com

 

 이전의 결합(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

 

예명(Alias)

테이블 예명(Alias) - 테이블 Alias로 column을 단순, 명확히 할 수 있다. - 현재의 SELECT 문장에 대해서만 유효하다. - 테이블 Alia..

www.gurubee.net

 

반응형

'개발 창고 > 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