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_ids_nameadmission_date
101김철수2023-03-02
102박영희2023-03-02
  1. 기본적인 칼럼명 변경

    -- AS 사용
    SELECT s_name AS "학생 이름", admission_date AS "입학 일자"
    FROM students;
     
    -- AS 생략
    SELECT s_name "학생 이름", admission_date "입학 일자"
    FROM students;

    결과 | 학생 이름 | 입학 일자 | | :--- | :--- | | 김철수 | 2023-03-02 | | 박영희 | 2023-03-02 |

  2. 함수 결과에 이름 붙이기

    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, StudentName을 별개의 키워드로 인식하여 에러 발생)

  • 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 | 개발팀 |

  1. 쿼리 단순화

    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;
    

    테이블 이름이 짧을 때는 차이가 미미해 보이지만, 이름이 길어지면 별칭의 위력은 엄청납니다.

  2. 칼럼 소속 명확화 (모호성 해결)

    만약 두 테이블에 모두 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(관리자)라는 두 개의 다른 테이블인 것처럼 다루고 있습니다. e1manager_ide2emp_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 논리적 실행 순서

  1. FROM / JOIN

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. SELECT

  6. ORDER BY

이 순서를 보면 SELECT 절이 WHEREGROUP 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)를 사용해야 합니다.

  1. 서브쿼리 사용

    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;
    
  2. 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 코드를 작성해 보시길 바랍니다.

레퍼런스(References)

별칭