쿼리 결과를 엑셀로 내보낼 때 컬럼명이 user_registration_date 같은 긴 영문으로 나와서 난감했던 경험 있으신가요? 혹은 개발자가 아닌 팀원에게 데이터를 전달할 때 컬럼명을 한글로 바꾸고 싶었던 적은요? 오늘은 SQL에서 컬럼명을 원하는 대로 바꿔서 조회하는 방법을 실전 예제와 함께 완벽하게 정리해드립니다.
컬럼 별칭이란? 왜 필요할까요?
컬럼 별칭(Column Alias)은 SELECT 문에서 조회되는 컬럼의 이름을 임시로 변경하는 기능입니다. 원본 테이블의 컬럼명은 그대로 유지되고, 조회 결과에만 새로운 이름이 표시되죠.
컬럼 별칭을 사용하는 5가지 이유:
- 긴 컬럼명을 짧고 간결하게 표현
- 영문 컬럼명을 한글로 변경해 가독성 향상
- 계산식이나 함수 결과에 의미 있는 이름 부여
- 보고서나 대시보드용 데이터 준비 시간 단축
- 여러 테이블 조인 시 중복 컬럼명 구분
여러분이 작성한 쿼리를 먼저 분석해볼까요?
SELECT a.userid AS a, a.descript AS b
FROM ta_db.tb_mempdata AS a
이 쿼리는 userid 컬럼을 a로, descript 컬럼을 b로 바꿔서 조회합니다. 하지만 a, b 같은 무의미한 별칭보다는 실제 의미를 담은 이름을 사용하는 게 더 좋습니다.
컬럼 별칭 기본 문법 – 3가지 방식
방법 1: AS 키워드 사용 (가장 권장)
SELECT
userid AS user_id,
username AS user_name,
email AS user_email
FROM users
장점: 코드만 봐도 별칭임을 명확히 알 수 있어 가독성이 최고입니다.
방법 2: AS 키워드 생략
SELECT
userid user_id,
username user_name,
email user_email
FROM users
장점: 타이핑이 줄어들지만, 실수할 가능성이 높아집니다.
방법 3: 한글 별칭 사용
-- MySQL, MariaDB
SELECT
userid AS `사용자ID`,
username AS `이름`,
email AS `이메일`
FROM users
-- SQL Server
SELECT
userid AS [사용자ID],
username AS [이름],
email AS [이메일]
FROM users
-- PostgreSQL, Oracle
SELECT
userid AS "사용자ID",
username AS "이름",
email AS "이메일"
FROM users
주의: 한글이나 공백, 특수문자가 포함된 별칭은 반드시 따옴표로 감싸야 합니다.
실전 예제 1 – 보고서용 데이터 준비
실무에서 가장 많이 사용하는 패턴입니다. 영문 컬럼명을 한글로 바꿔 비개발자도 쉽게 이해할 수 있게 만들죠.
SELECT
userid AS `회원번호`,
username AS `회원명`,
email AS `이메일주소`,
reg_date AS `가입일자`,
status AS `상태`
FROM members
WHERE status = 'active'
ORDER BY reg_date DESC
조회 결과:
| 회원번호 | 회원명 | 이메일주소 | 가입일자 | 상태 |
|---|---|---|---|---|
| 1001 | 홍길동 | hong@example.com | 2025-01-15 | active |
| 1002 | 김철수 | kim@example.com | 2025-01-14 | active |
엑셀로 내보내거나 팀원에게 공유할 때 바로 사용할 수 있는 형태입니다.
실전 예제 2 – 계산식에 별칭 부여
컬럼끼리 계산한 결과나 함수를 사용한 경우 반드시 별칭을 붙여야 합니다.
SELECT
product_name AS `상품명`,
price AS `단가`,
quantity AS `수량`,
(price * quantity) AS `금액`,
(price * quantity * 0.1) AS `부가세`,
(price * quantity * 1.1) AS `총액`
FROM order_items
WHERE order_date = '2025-10-02'
별칭 없이 작성하면?
SELECT
product_name,
price,
quantity,
(price * quantity), -- 컬럼명: (price * quantity)
(price * quantity * 0.1), -- 컬럼명: (price * quantity * 0.1)
(price * quantity * 1.1) -- 컬럼명: (price * quantity * 1.1)
FROM order_items
조회 결과의 컬럼명이 수식 그대로 나와서 매우 불편합니다.
실전 예제 3 – 함수와 별칭 조합
날짜 함수, 문자열 함수, 집계 함수를 사용할 때도 별칭은 필수입니다.
SELECT
DATE_FORMAT(reg_date, '%Y-%m') AS `가입월`,
COUNT(*) AS `회원수`,
SUM(purchase_amount) AS `총구매금액`,
AVG(purchase_amount) AS `평균구매금액`,
MAX(purchase_amount) AS `최대구매금액`,
MIN(purchase_amount) AS `최소구매금액`
FROM members
GROUP BY DATE_FORMAT(reg_date, '%Y-%m')
ORDER BY `가입월` DESC
핵심 포인트: ORDER BY 절에서 별칭을 그대로 사용할 수 있습니다. 긴 함수를 다시 쓸 필요가 없죠.
실전 예제 4 – JOIN 시 중복 컬럼명 처리
여러 테이블을 조인하면 같은 이름의 컬럼이 충돌할 수 있습니다. 별칭으로 명확하게 구분하세요.
SELECT
u.userid AS `회원ID`,
u.username AS `회원명`,
o.order_id AS `주문번호`,
o.order_date AS `주문일자`,
o.status AS `주문상태`, -- members 테이블에도 status가 있을 수 있음
p.product_name AS `상품명`,
p.price AS `단가`
FROM members AS u
INNER JOIN orders AS o ON u.userid = o.userid
INNER JOIN products AS p ON o.product_id = p.product_id
WHERE u.status = 'active'
AND o.order_date >= '2025-01-01'
컬럼 별칭 사용 시 주의사항 5가지
1. WHERE 절에서는 별칭 사용 불가
-- ❌ 잘못된 예시
SELECT
price * quantity AS total_amount
FROM orders
WHERE total_amount > 10000 -- 에러 발생!
-- ✅ 올바른 예시
SELECT
price * quantity AS total_amount
FROM orders
WHERE price * quantity > 10000
이유: SQL 실행 순서가 FROM → WHERE → SELECT 이기 때문에 WHERE 절 실행 시점에는 아직 별칭이 생성되지 않았습니다.
2. GROUP BY 절에서도 별칭 사용 제한
대부분의 DBMS에서 GROUP BY에 별칭을 사용할 수 없습니다.
-- ❌ MySQL에서는 가능하지만 비표준
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS order_month,
COUNT(*) AS order_count
FROM orders
GROUP BY order_month
-- ✅ 표준 SQL (모든 DBMS 호환)
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS order_month,
COUNT(*) AS order_count
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
3. HAVING과 ORDER BY에서는 별칭 사용 가능
SELECT
category AS `카테고리`,
SUM(sales) AS `총매출`
FROM products
GROUP BY category
HAVING `총매출` > 1000000 -- 별칭 사용 가능
ORDER BY `총매출` DESC -- 별칭 사용 가능
4. 예약어와 중복되는 별칭 피하기
-- ❌ 피해야 할 별칭
SELECT
username AS select, -- 예약어와 충돌
email AS from -- 예약어와 충돌
FROM users
-- ✅ 권장하는 별칭
SELECT
username AS user_name,
email AS user_email
FROM users
5. 의미 없는 별칭 피하기
-- ❌ 나쁜 예: 의미 없는 별칭
SELECT
userid AS a,
username AS b,
email AS c
FROM users
-- ✅ 좋은 예: 의미 있는 별칭
SELECT
userid AS `회원ID`,
username AS `이름`,
email AS `이메일`
FROM users
데이터베이스별 별칭 문법 차이
MySQL / MariaDB
-- 백틱(`) 사용
SELECT
userid AS `사용자 ID`,
username AS `회원 이름`
FROM users
SQL Server
-- 대괄호([]) 또는 따옴표 사용
SELECT
userid AS [사용자 ID],
username AS [회원 이름]
FROM users
PostgreSQL
-- 큰따옴표(") 사용, 대소문자 구분
SELECT
userid AS "사용자ID",
username AS "회원이름"
FROM users
Oracle
-- 큰따옴표(") 사용
SELECT
userid AS "사용자ID",
username AS "회원이름"
FROM users
실무 팁 – 별칭 네이밍 규칙
일관된 규칙을 정해두면 팀 협업이 훨씬 수월합니다.
추천 규칙:
- 언더스코어(_) 방식:
user_name,order_date,total_amount - 카멜케이스 방식:
userName,orderDate,totalAmount - 한글 별칭: 보고서용 데이터에만 사용
- 약어 사용: 너무 길 경우
cnt,amt,qty등 표준 약어 활용
-- 통일된 네이밍 규칙 예시
SELECT
u.userid AS user_id,
u.username AS user_name,
COUNT(o.order_id) AS order_cnt,
SUM(o.total_amount) AS total_amt,
AVG(o.total_amount) AS avg_amt
FROM users AS u
LEFT JOIN orders AS o ON u.userid = o.userid
GROUP BY u.userid, u.username
복잡한 쿼리 실전 예제 – 서브쿼리와 별칭
SELECT
dept.dept_name AS `부서명`,
dept_stats.emp_count AS `직원수`,
dept_stats.avg_salary AS `평균연봉`,
dept_stats.max_salary AS `최고연봉`,
dept_stats.min_salary AS `최저연봉`
FROM departments AS dept
INNER JOIN (
SELECT
department_id,
COUNT(*) AS emp_count,
AVG(salary) AS avg_salary,
MAX(salary) AS max_salary,
MIN(salary) AS min_salary
FROM employees
WHERE status = 'active'
GROUP BY department_id
) AS dept_stats ON dept.dept_id = dept_stats.department_id
WHERE dept_stats.emp_count >= 5
ORDER BY dept_stats.avg_salary DESC
서브쿼리의 결과 컬럼에도 별칭을 부여하면 메인 쿼리에서 깔끔하게 활용할 수 있습니다.
CASE 문과 별칭 조합
조건에 따라 값을 분류하고 별칭을 붙이면 강력한 데이터 분석이 가능합니다.
SELECT
userid AS `회원ID`,
username AS `회원명`,
CASE
WHEN age < 20 THEN '10대'
WHEN age < 30 THEN '20대'
WHEN age < 40 THEN '30대'
WHEN age < 50 THEN '40대'
ELSE '50대 이상'
END AS `연령대`,
CASE
WHEN total_purchase >= 1000000 THEN 'VIP'
WHEN total_purchase >= 500000 THEN 'GOLD'
WHEN total_purchase >= 100000 THEN 'SILVER'
ELSE 'BRONZE'
END AS `회원등급`
FROM members
WHERE status = 'active'
문자열 연결과 별칭
여러 컬럼을 합쳐서 새로운 형태로 표시할 때도 별칭이 유용합니다.
-- MySQL
SELECT
CONCAT(last_name, ' ', first_name) AS `전체이름`,
CONCAT(email, ' (', phone, ')') AS `연락처`,
CONCAT(address, ', ', city, ', ', zipcode) AS `전체주소`
FROM customers
-- SQL Server
SELECT
last_name + ' ' + first_name AS [전체이름],
email + ' (' + phone + ')' AS [연락처],
address + ', ' + city + ', ' + zipcode AS [전체주소]
FROM customers
-- Oracle, PostgreSQL
SELECT
last_name || ' ' || first_name AS "전체이름",
email || ' (' || phone || ')' AS "연락처",
address || ', ' || city || ', ' || zipcode AS "전체주소"
FROM customers
마무리 – 컬럼 별칭 완벽 활용법
컬럼 별칭은 단순하지만 SQL 쿼리의 완성도를 크게 높여주는 필수 기능입니다. 조회 결과를 보는 사람이 누구든 쉽게 이해할 수 있도록 의미 있는 별칭을 붙이는 습관을 들이세요.
핵심 요약:
- SELECT 절에서 AS 키워드로 컬럼 별칭 지정
- 계산식, 함수 결과에는 반드시 별칭 부여
- WHERE, GROUP BY에서는 별칭 사용 불가
- ORDER BY, HAVING에서는 별칭 사용 가능
- 한글 별칭 사용 시 따옴표로 감싸기
- 의미 있고 일관된 별칭 규칙 유지
여러분의 실무에서는 어떤 별칭 네이밍 규칙을 사용하시나요? 유용한 팁이 있다면 댓글로 공유해주세요!
참고 자료: