데이터베이스

[Oracle] 오라클 SELECT문 별칭(Alias)

포포015 2021. 3. 9. 23:32

 

연산은 그렇다 쳐도 별칭은 아주아주 많이 쓰이고 중요하기 때문에 꼭 알고 넘어가도록하자.

 

-연산

 

Oracle SELECT 쿼리문으로 데이터를 불러올때 연산이 가능하다.

 

SELECT first_name,family_name, salary/10000 FROM test

 

이런식으로 숫자로 이루어진 컬럼에 연산을 가해 불러올수있다. 

 

하지만 이런식으로 사용할경우 컬럼명이 salary 가 아니라 salary/10000 이라는 컬럼명으로 불러와지는 현상을 볼 수 있는데

 

이걸 해결하기 위해서 별칭(AS)을 사용하면 된다.

(물론 as 로 소문자로도 사용 가능하다, 그리고 생략 역시 가능한데 웬만해서는 써주는게 좋다. 가독성 좋게)

 

-별칭(Alias)

 

- SELECT [컬럼명] AS [별칭] FROM [테이블명]

 

SELECT first_name,family_name, salary/10000 AS testAli FROM test

 

이런식으로 사용하게 될경우 salary/10000의 컬럼명이 testAli로 불러와지는 것을 볼 수 있을것이다.

(별칭의 경우 자주 사용되니까 특히 join 을 사용할경우... 꼭 알아두길 바랍니다.)

 

AS(Alias) 의 경우에는

 

현재의 SELECT 문장에 대해서만 유효하고

 

Alias의 길이는 30자 까지 가능하나 별칭이므로 짧을수록 더욱 좋습니다.

 

그리고 대소문자, 공백, 한글, 특수문자 등을 표현 할 수 있는데

띄어쓰기를 하거나 특수문자가 맨 앞에 들어갈 경우 인용부호(" ")로 묶어준다.

 

ex ) 

SELECT test1 AS "*aliasTest" FROM test

SELECT test1 as "alias Test" FROM test

 

테이블을 별칭 정의시 as키워드를 선언하지않는다!

SELECT test1 as alias Test FROM test t


플젝하면서 구현하면서 알게된건데, 페이지 로드시, 게시물 목록이 쭈루륵 뽑혀 나오는데

그때 게시판의 댓글 개수를 구하는 쿼리를 짜는데,

아래 쿼리는

스프링 마이바티스를 사용해 페이징의 기능이 들어간 쿼리인데, 서브쿼리를 사용해서 board테이블에 별칭을주고,

댓글 테이블 reply에 별칭을 줘서 reply.컬럼 = board.컬럼 같은 형식으로 비교해서 짯던기억이 있다. 

1
2
3
4
5
6
7
    SELECT * FROM 
     (
     SELECT /*+INDEX_DESC(board pk_board)*/ rownum rn, bno, title, content, writer, updatedate, boardcnt, 
(select count(*from tbl_reply reply where reply.bno = board.bno) as replyCnt
     FROM tbl_board board
     WHERE bno > 0 and rownum > 0 and rownum <= #{pageNum} * #{amount}
     )
    WHERE rn > (#{pageNum} - 1* #{amount}
     cs