6. [SQL기초] 별칭(Alias) 사용하기
컬럼에 별칭 사용하기
모든 컬럼에는 이름이 있습니다. 뒤에서 배우겠지만, 계산식이나 결과 값에는 컬럼 이름이 없기 때문에 결과 값의 재사용을 위해서는 컬럼 이름을 지정해야 합니다. 이름이 없는 컬럼은 다시 선택할 수 없기 때문입니다.
MySQL은 조금 특별하게 계산식 결과를 표시하는 컬럼에 자동으로 이름을 붙여줍니다. 물론 그 이름이 계산식 자체를 표시하는 것이기 때문에 사용하기 쉽고 나중에 계산식의 의미를 이해할 수 있는 다른 컬럼 이름으로 바꿔야 할 필요가 있습니다.
컬럼에 새로운 이름을 부여하는 키워드는 “AS” 입니다. Select 절의 컬럼 이름, 또는 계산식 뒤에 공백으로 띄운 후 “AS 새 열 이름”을 지정하면 결과 테이블에 새 열 이름으로 표시가 됩니다.
select id, address as recipient_address from p_order;
컬럼 이름은 한글도 지원되므로 쿼리 결과를 엑셀에서 재사용하려면 다음처럼 한글로 컬럼 이름을 지정할 수 있습니다.
select id as 주문키, address as 배송주소 from p_order;
SQL Server 는 AS 키워드를 사용하지 않고, 대입 등호(=)로 표현할 수도 있습니다.
지원되는 데이터베이스에 따라 사용문법이 다르므로 가능하면 AS 키워드를 사용한 방식을 권장합니다.
select 주문키=id, 배송주소=address from p_order;
테이블에 별칭 사용하기
단일 테이블에서 데이터를 쿼리할 때는 불필요하지만, 뒤에서 배울 테이블 결합(조인, 유니온)에서는 기본적으로 사용하게 됩니다.
단일 테이블 쿼리에서는 다음과 같이 사용할 수 있지만, 선택 컬럼에 테이블 명을 표시하지 않는 것이 기본이므로 다음과 같은 쿼리문이 가능하지만 무쓸모입니다.
select a.id, a.p_name, a.price from p_order AS a;
테이블을 조인해서 결과를 얻을 때는 테이블 별칭은 아주 아주 중요한 역할을 합니다.
예를 들어 주문테이블과 회원정보 테이블을 조인해서 양쪽 테이블에서 필요한 컬럼들을 가져온다고 하면, 다음처럼 쿼리문을 표현할 수 있습니다.
select member.userid, username, member.address, p_name, p_num, p_order.price, p_order.date from member, p_order where member.userid = p_order.userid;
조인하는 두 테이블에서 이름이 같은 컬럼이 있으면, 어느 테이블의 컬럼인지를 명시적으로 표시를 해야 쿼리문에서 혼동(ambiguous)에러가 발생하지 않습니다.
따라서 선택하는 컬럼 중 userid 컬럼은 어느 테이블의 userid를 가져오는지 명시적으로 구분을 해야 합니다.
모든 컬럼에 테이블을 명시적으로 표시를 해줄 필요는 없습니다. 이름이 같아서 혼동이 발생하는 컬럼과 조인하는 비교 조건에 테이블 명을 표시하면 됩니다.
테이블 명이 짧거나, 선택하는 컬럼 이름이 중복이 있는 컬럼 수가 적다면 별 문제가 되지 않습니다.
그러나, 테이블 명이 branch_seoul_2022_sales 처럼 길면 일일이 테이블 명을 명시하는 것이 꽤나 번거로운 쿼리문 작성이 됩니다.
그래서 테이블 명 별칭을 사용합니다.
앞서의 조인 쿼리문은 다음처럼 다시 표현할 수 있습니다.
select a.userid, username, a.address, p_name, p_num, b.price, b.date from member AS a, p_order AS b where a.userid = b.userid;