Home » SQL » BASIC » sql select as 절로 컬럼 별칭을 사용해 봅시다.

sql select as 절로 컬럼 별칭을 사용해 봅시다.

우리가 알게 모르게 많이 쓰는 sql select as 절을 알아봅시다. 먼저 as절은

  • query에서 사용하는 테이블의 별칭 (특히 서브쿼리)
  • 결과 컬럼의 별칭으로 사용

으로 사용되는 경우가 많습니다. 이 글에서는 2번째 경우에 대해서 다루도록 하겠습니다. 1번째 경우는 간략하게 후술할게요. 그리고, 몇 가지 예제 쿼리들을 보도록 합시다. 예전 시리즈들은 아래 목록을 보시면 이동하실 수 있습니다.

  • from 절과 카티션 곱 링크
  • order by와 여러 정렬 기준 이용하기 링크
  • group by와 그룹별로 집계하기 링크
  • having에 대한 이해와 where과의 차이 링크
  • select와 as 로 컬럼과 테이블 별칭 짓기 [현재글]

실습에 사용된 데이터

먼저 실습에 사용된 데이터들을 보겠습니다.

[그림 1] book 테이블에 있는 레코드들

book 테이블입니다. 책이 5개 있습니다. title, id, author_id, type 이렇게 4개가 있어요.

[그림 2] user 테이블에 있는 레코드들

다음 user 테이블에 있는 것들입니다. cho와 ga만 있습니다. 우리는 이 두 테이블만 가지고 실습을 해 볼 겁니다.


sql select 구문과 as

먼저 select는 무엇일까요? 책 테이블은 아래와 같은 컬럼들로 이루어져 있어요.

[그림 3] book 테이블에 있는 컬럼들

select 뒤에 *가 붙으면 from 절에 걸린 모든 테이블들의 컬럼들을 모두 가져오는 것을 의미합니다. 예를 들어, 아래와 같은 쿼리가 있다고 해 볼게요.

  • select * from book
    • book 에는 title, id, author_id, type 컬럼이 있어요.
    • 결과에 이 4개의 컬럼이 모두 나옵니다.

우리는, 컬럼 중에 일부를 가지고 오고 싶어요. 그러면, 가져올 컬럼을 정해주면 됩니다. 예를 들어, 책의 제목만 가지고 오고 싶어요.

  • 책의 제목은 title입니다.
    • 우리는 book이라는 테이블에서 title만 가지고 오고 싶어요. 따라서
    • select 뒤에 title만 오면 되겠지요.
[그림 4] 일부 컬럼만 가지고 온 쿼리

위 쿼리는 title만 나왔어요. 왜? select 절에 title만 들어갔기 때문입니다. 그러면, sql select as 절은 무엇인가? 결과에 나오는 컬럼 이름의 별칭을 붙입니다. 무슨 이야기인가?

[그림 5] book에서 집계하는 쿼리

위 쿼리는 각 작가별로 몇 권의 책을 썼는지 집계하는 쿼리에요. count(*) 뒤에 as를 붙이지 않았다면, 아래와 같은 결과가 나왔을 겁니다.

문제는, count가 의미하는 것이 무엇이냐는 것입니다. 책을 집필한 수인가요? 아니면 다른 무엇인가요? 이것은 마치 변수 이름을 a, b, c 등으로 짓는 것과 같은 셈이지요. count(*) as wrote_book_num 요래 입력하면, 결과 테이블의 count 컬럼을 wrote_book_num으로 별칭을 붙이게 됩니다.

이렇게 되면 장점이 무엇인가요? 결과 컬럼이 count가 아니라 보다 명확해 졌어요. 쓴 책의 개수을 의미한다는 것을 명확하게 알 수 있어요.

[그림 6] rename으로 보다 명확해진 결과

쿼리의 결과는 위와 같습니다. 이렇게 컬럼 이름을 별칭으로 사용했을 때, 보다 명확해 집니다. 특히 with절을 쓸 때, 복잡한 쿼리가 들어가면 필수적으로 쓰이므로 알아두는 편이 좋습니다.


from 절에 별칭 붙이기

여담이지만, select 절 말고도, from 절에서도 별칭을 붙일 수 있습니다.

[그림 7] 테이블에 별칭을 붙이는 as 절

위 쿼리를 보겠습니다. 보면, book 테이블과, public.user 테이블로부터 가져오고 있어요. 그런데

  • 해당 쿼리에서만 book 테이블을 별칭 b로
  • public.user 테이블을 별칭 u로 지었음을 알 수 있어요.

고로 해당 쿼리에서 u는 public.user를, b는 book 테이블을 의미하게 됩니다. 참고로 해당 쿼리는 책의 제목과, 책을 쓴 사람의 이름만을 가져옵니다.

[그림 8] 쿼리의 결과

쿼리는 제대로 동작합니다. 그냥 from book, public.user를 해도 별 상관이 없을 것 같습니다. 그런데, 이 기능의 진가는 from 절에 서브 쿼리가 들어갔을 때 발휘하게 됩니다. 자세한 건 중급에서 다뤄보도록 하겠습니다.

Leave a Comment

18 − 11 =