2025-09-01 01:37
-
SQL 별칭은 테이블이나 칼럼에 새로운 이름을 부여하여 쿼리의 가독성을 높이고 복잡한 구문을 단순화하는 핵심 기능입니다.
-
칼럼 별칭은
AS
키워드를 사용하거나 생략할 수 있으며, 계산된 필드나 함수 결과에 명확한 이름을 붙일 때 유용합니다. -
테이블 별칭은 여러 테이블을 조인하거나 셀프 조인(self-join)을 수행할 때 필수적이며, 코드의 길이를 줄이고 칼럼의 소속을 명확히 합니다.
SQL 별칭 완벽 정복 핸드북 A to Z
SQL을 다루다 보면 코드가 길고 복잡해져서 나중에 다시 봤을 때 “이게 무슨 코드였지?” 하고 머리를 갸우뚱하게 되는 순간이 찾아옵니다. 특히 테이블 이름이 길거나, 여러 테이블을 한 번에 조인(JOIN)할 때는 더욱 그렇습니다. 바로 이때, 마법처럼 코드를 간결하고 명확하게 만들어주는 영웅이 등장하니, 그의 이름은 바로 **별칭(Alias)**입니다.
“별칭”이라는 단어 그대로, 테이블이나 칼럼에 임시로 다른 이름을 붙여주는 기능입니다. 마치 우리가 친구에게 별명을 붙여 부르듯, SQL에서도 길고 복잡한 이름 대신 짧고 의미 있는 별명을 붙여 쿼리를 작성할 수 있습니다. 이 핸드북에서는 SQL 별칭이 왜 만들어졌는지부터 시작하여, 기본 사용법, 고급 활용 기술, 그리고 실무에서 유용한 팁까지 모든 것을 알아보겠습니다.
1. 별칭은 왜 만들어졌을까? 탄생 배경
컴퓨터는 긴 이름이나 복잡한 구조를 전혀 힘들어하지 않습니다. 하지만 사람은 다릅니다. SQL 별칭은 전적으로 사람을 위해 탄생한 기능입니다.
-
가독성의 문제:
employee_personal_information
이나monthly_sales_performance_report
와 같이 테이블 이름이 길어지면 쿼리문 전체가 복잡해 보입니다. -
중복과 모호성: 여러 테이블을 조인할 때, 각 테이블에 동일한 이름의 칼럼(예:
id
,name
)이 존재할 수 있습니다. 이때 어떤 테이블의id
를 지칭하는지 명확히 해주지 않으면 에러가 발생하거나 잘못된 결과를 얻게 됩니다. -
동적인 칼럼 이름:
COUNT(*)
나SUM(price)
와 같은 집계 함수나 여러 칼럼을 조합한 결과는 그 자체로는 명확한 칼럼 이름을 갖지 않습니다. 보고서를 만들거나 애플리케이션에서 데이터를 사용할 때 이 결과에 의미 있는 이름을 붙여줘야 합니다.
이러한 문제들을 해결하기 위해 “이 긴 이름 대신 앞으로는 이 짧은 이름으로 부를게!”라고 약속하는 별칭 기능이 탄생했습니다. 별칭은 쿼리의 가독성과 유지보수성을 극적으로 향상시키는 첫걸음입니다.
2. 별칭의 기본 구조 및 사용법
SQL 별칭은 크게 **칼럼 별칭(Column Alias)**과 테이블 별칭(Table Alias), 두 가지로 나뉩니다.
가. 칼럼 별칭 (Column Alias)
칼럼 별칭은 SELECT
절에서 조회하는 칼럼의 이름을 바꾸고 싶을 때 사용합니다. 주로 보고서의 헤더를 만들거나, 함수를 사용한 결과 칼럼에 의미를 부여할 때 유용합니다.
기본 문법
SELECT column_name AS alias_name
FROM table_name;
-- AS 키워드는 생략할 수 있습니다.
SELECT column_name alias_name
FROM table_name;
AS
키워드는 “as(으)로” 라는 의미로, 명시적으로 별칭임을 나타내 가독성을 높여줍니다. 대부분의 경우 AS
를 붙이는 것이 좋은 습관으로 여겨지지만, 생략해도 동일하게 동작합니다.
사용 예시
학생 정보를 담은 students
테이블이 있다고 가정해 봅시다.
student_id | s_name | admission_date |
---|---|---|
101 | 김철수 | 2023-03-02 |
102 | 박영희 | 2023-03-02 |
-
기본적인 칼럼명 변경
-- AS 사용 SELECT s_name AS "학생 이름", admission_date AS "입학 일자" FROM students; -- AS 생략 SELECT s_name "학생 이름", admission_date "입학 일자" FROM students;
결과 | 학생 이름 | 입학 일자 | | :--- | :--- | | 김철수 | 2023-03-02 | | 박영희 | 2023-03-02 |
-
함수 결과에 이름 붙이기
COUNT()
함수를 사용하여 전체 학생 수를 세어봅시다.SELECT COUNT(*) AS total_students FROM students;
결과 | total_students | | :--- | | 2 |
만약 별칭을 사용하지 않았다면 칼럼 이름이
COUNT(*)
처럼 어색하게 표시될 것입니다.
언제 따옴표를 사용할까? 별칭에 공백이 포함되거나, 숫자로 시작하거나, SQL 예약어(예:
SELECT
,FROM
)를 사용하고 싶을 때는 **큰따옴표(” ”)**를 사용해야 합니다. (MySQL에서는 백틱(“)도 사용 가능)
SELECT s_name AS "Student Name"
(O)
SELECT s_name AS Student Name
(X,Student
와Name
을 별개의 키워드로 인식하여 에러 발생)
SELECT s_name student_name
(O, 공백이 없으면 따옴표 불필요)
나. 테이블 별칭 (Table Alias)
테이블 별칭은 FROM
절이나 JOIN
절에서 사용되며, 주로 쿼리가 길어지고 복잡해질 때 진가를 발휘합니다.
기본 문법
SELECT table_alias.column_name
FROM table_name AS table_alias;
-- 칼럼 별칭과 마찬가지로 AS 생략 가능
SELECT table_alias.column_name
FROM table_name table_alias;
사용 예시
employees
(직원) 테이블과 departments
(부서) 테이블이 있다고 상상해 봅시다.
employees
| emp_id | emp_name | dept_id | | :--- | :--- | :--- | | 1 | 홍길동 | 10 | | 2 | 이순신 | 20 |
departments
| dept_id | dept_name | | :--- | :--- | | 10 | 인사팀 | | 20 | 개발팀 |
-
쿼리 단순화
employees
테이블에e
라는 별칭을,departments
테이블에d
라는 별칭을 붙여 두 테이블을 조인해 보겠습니다.SELECT e.emp_name, d.dept_name FROM employees AS e JOIN departments AS d ON e.dept_id = d.dept_id;
만약 별칭을 사용하지 않았다면 아래와 같이 길고 복잡한 코드가 됩니다.
SELECT employees.emp_name, departments.dept_name FROM employees JOIN departments ON employees.dept_id = departments.dept_id;
테이블 이름이 짧을 때는 차이가 미미해 보이지만, 이름이 길어지면 별칭의 위력은 엄청납니다.
-
칼럼 소속 명확화 (모호성 해결)
만약 두 테이블에 모두
id
라는 칼럼이 있다면,SELECT id
라고만 쓰면 SQL 엔진은 어느 테이블의id
를 가져와야 할지 알 수 없습니다. 이럴 때 테이블 별칭은 필수적입니다.-- emp_id와 dept_id를 명확히 구분 SELECT e.emp_id, d.dept_id, e.emp_name, d.dept_name FROM employees e JOIN departments d ON e.dept_id = d.dept_id;
3. 별칭의 실전 활용법
기본기를 익혔으니, 이제 별칭이 실제로 어떻게 문제 해결에 사용되는지 더 깊이 알아봅시다.
가. 셀프 조인 (Self-Join)
셀프 조인은 하나의 테이블을 자기 자신과 조인하는 기술입니다. 예를 들어, employees
테이블에 각 직원의 관리자 정보(manager_id)가 포함되어 있을 때, 직원의 이름과 그 관리자의 이름을 함께 조회하려면 셀프 조인이 필요합니다. 이때 테이블 별칭이 없으면 사실상 불가능합니다.
employees
| emp_id | emp_name | manager_id | | :--- | :--- | :--- | | 1 | 홍길동 | 3 | | 2 | 이순신 | 3 | | 3 | 강감찬 | NULL |
SELECT
e1.emp_name AS "직원 이름",
e2.emp_name AS "관리자 이름"
FROM
employees e1 -- 직원 역할을 할 테이블
JOIN
employees e2 ON e1.manager_id = e2.emp_id; -- 관리자 역할을 할 테이블
employees
테이블을 e1
(직원)과 e2
(관리자)라는 두 개의 다른 테이블인 것처럼 다루고 있습니다. e1
의 manager_id
와 e2
의 emp_id
를 연결하여 각 직원의 관리자 이름을 찾아냅니다. 이처럼 별칭은 하나의 테이블에 여러 역할을 부여할 수 있게 해줍니다.
결과 | 직원 이름 | 관리자 이름 | | :--- | :--- | | 홍길동 | 강감찬 | | 이순신 | 강감찬 |
나. 서브쿼리 (Subquery)
FROM
절에 사용되는 인라인 뷰(inline view) 형태의 서브쿼리는 반드시 별칭을 가져야 합니다. 서브쿼리의 결과는 임시 테이블처럼 취급되므로, 이 임시 테이블을 부를 이름이 필요하기 때문입니다.
SELECT
s.grade,
AVG(s.avg_score) AS average_of_scores
FROM
(SELECT student_id, grade, AVG(score) as avg_score
FROM scores
GROUP BY student_id, grade) AS s -- 서브쿼리 결과에 's'라는 별칭 부여
GROUP BY
s.grade;
위 쿼리에서 서브쿼리는 학생별 평균 점수를 계산하고, 바깥 쿼리는 이 결과를 s
라는 별칭으로 받아 학년별 평균 점수를 다시 계산합니다. 서브쿼리에 별칭이 없다면 문법 오류가 발생합니다.
4. 깊게 알아보기: 별칭의 스코프(Scope)와 제약
별칭은 매우 편리하지만, SQL 쿼리 내에서 사용할 수 있는 범위(스코프)에 대한 규칙이 있습니다. 이 규칙은 SQL의 논리적 실행 순서와 관련이 깊습니다.
SQL 논리적 실행 순서
-
FROM
/JOIN
-
WHERE
-
GROUP BY
-
HAVING
-
SELECT
-
ORDER BY
이 순서를 보면 SELECT
절이 WHERE
나 GROUP BY
보다 나중에 실행되는 것을 알 수 있습니다.
이것이 의미하는 바는 무엇일까요?
SELECT
절에서 정의한 칼럼 별칭은 WHERE
, GROUP BY
, HAVING
절에서는 사용할 수 없습니다. 왜냐하면 해당 절들이 실행되는 시점에는 아직 별칭이 정의되지 않았기 때문입니다.
잘못된 예시
SELECT
order_date,
SUM(price) AS total_sales
FROM orders
WHERE
total_sales > 1000 -- 에러 발생! 'total_sales'는 아직 존재하지 않음
GROUP BY
order_date;
위 쿼리는 WHERE
절이 실행되는 시점에 total_sales
라는 별칭을 알지 못해 에러를 발생시킵니다.
해결 방법 이런 경우에는 서브쿼리나 CTE(Common Table Expression)를 사용해야 합니다.
-
서브쿼리 사용
SELECT * FROM ( SELECT order_date, SUM(price) AS total_sales FROM orders GROUP BY order_date ) AS daily_sales WHERE daily_sales.total_sales > 1000;
-
CTE 사용 (더 권장되는 방식)
WITH daily_sales AS ( SELECT order_date, SUM(price) AS total_sales FROM orders GROUP BY order_date ) SELECT * FROM daily_sales WHERE total_sales > 1000;
유일한 예외:
ORDER BY
ORDER BY
절은 논리적 실행 순서상SELECT
절 다음에 실행되므로,SELECT
절에서 정의한 칼럼 별칭을 사용할 수 있는 거의 유일한 절입니다.SELECT emp_name AS employee_name FROM employees ORDER BY employee_name; -- 정상 작동
5. 결론: 좋은 별칭, 좋은 코드
SQL 별칭은 단순히 코드를 짧게 줄이는 것을 넘어, 쿼리의 의도를 명확하게 하고 복잡한 로직을 가능하게 하는 강력한 도구입니다. 좋은 별칭 습관은 동료 개발자와의 협업 효율을 높이고, 미래의 내가 코드를 더 쉽게 이해하도록 돕는 중요한 자산입니다.
-
칼럼 별칭으로는 최종 결과물에 어울리는 서술적인 이름을 사용하세요 (예:
avg_price
→Average Price
). -
테이블 별칭으로는 일관성 있고 짧지만 의미를 유추할 수 있는 이름을 사용하세요 (예:
employees
→e
,products
→p
).
이제 여러분은 SQL 별칭의 모든 것을 알게 되었습니다. 오늘부터 작성하는 모든 쿼리에 이 핸드북의 내용을 녹여내어, 더 깨끗하고 효율적인 SQL 코드를 작성해 보시길 바랍니다.