열 투영과 별칭의 함정
WHERE에서 SELECT 별칭을 참조할 수 없는 이유와 면접관이 별칭의 범위를 테스트하는 방법을 알아봅니다.
열 투영과 별칭의 함정은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
투영: 열 선택하기
쿼리가 반환할 열을 선택하는 작업을 투영이라고 합니다. SELECT를 작성할 때마다 수행하는 작업입니다. 실제 코드에서는 열을 명시적으로 작성하고, 빠르게 탐색할 때만 SELECT *를 사용하세요.
SELECT id, first_name, email
FROM employees;면접관이 SELECT *를 싫어하는 이유
면접관은 애플리케이션 코드에서 SELECT *를 왜 싫어할까요? SELECT *는 취약하고(열 순서가 바뀔 수 있음), 대역폭을 낭비하며, 인덱스 활용을 방해하고, 실제로 필요한 항목을 숨깁니다. 열을 직접 지정하세요. 👍
AS로 열에 별칭 지정하기
별칭은 출력에서 열의 이름을 바꿉니다. 명확성을 위해 AS를 사용하세요. 특히 계산된 열에서 유용합니다. 급여 * 12처럼 복잡한 표현식에도 깔끔하고 읽기 쉬운 제목을 붙일 수 있습니다.
SELECT first_name AS name,
salary * 12 AS annual_salary
FROM employees;공백이 있는 별칭에 따옴표 사용하기
별칭에 공백이나 예약어가 포함되어 있다면 따옴표로 묶어야 합니다. 이식성이 높고 표준에 맞는 방법은 큰따옴표를 사용하는 것입니다. 팁을 드리자면 스네이크 케이스 이름만 사용하고 따옴표는 아예 생략하세요.
SELECT salary AS "Annual Pay"
FROM employees;가장 큰 함정: WHERE에서의 별칭 범위
가장 자주 출제되는 함정입니다. SELECT에서 별칭을 정의한 다음 WHERE에서 그 별칭으로 필터링하면 실패합니다. WHERE는 SELECT보다 먼저 실행되므로 해당 별칭이 아직 존재하지 않기 때문입니다.
-- This raises an error
SELECT salary * 12 AS annual_salary
FROM employees
WHERE annual_salary > 100000;이유: 논리적 실행 순서
해결 방법은 논리적 절 순서를 아는 것입니다. FROM, WHERE, GROUP BY, HAVING, SELECT, 그다음 ORDER BY 순서입니다. SELECT는 거의 마지막에 실행되므로 앞선 절에서는 해당 별칭을 볼 수 없습니다.
해결 방법 1: 표현식 반복
가장 이식성 좋은 해결 방법은 간단합니다. 별칭 대신 WHERE에서 표현식을 반복하면 됩니다. 조금 장황하지만 모든 데이터베이스에서 항상 작동합니다.
SELECT salary * 12 AS annual_salary
FROM employees
WHERE salary * 12 > 100000;해결 방법 2: 하위 쿼리 또는 CTE로 감싸기
긴 표현식을 반복하는 것이 보기 좋지 않다면 먼저 하위 쿼리 또는 CTE에서 계산하십시오. 그러면 별칭이 실제 열이 되므로 바깥쪽 WHERE에서 해당 별칭을 기준으로 필터링할 수 있습니다.
SELECT *
FROM (
SELECT first_name, salary * 12 AS annual_salary
FROM employees
) t
WHERE annual_salary > 100000;별칭을 사용할 수 있는 곳: ORDER BY
좋은 소식입니다. ORDER BY에서는 SELECT 별칭을 사용할 수 있습니다. SELECT 이후에 실행되기 때문입니다. 따라서 WHERE, GROUP BY, HAVING에서는 별칭을 볼 수 없지만 ORDER BY에서는 볼 수 있습니다.
SELECT first_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;언급해 둘 방언별 차이
알아 두실 만한 내용입니다. MySQL은 GROUP BY와 HAVING에서 별칭을 느슨하게 허용하지만, Postgres와 SQL Server는 표준을 따릅니다. 논리적 순서로 추론한 다음 이 예외를 덧붙여 설명하십시오.
테이블 별칭과 열 별칭
혼동하지 마십시오. 테이블 별칭은 테이블 이름을 줄여 쓰며 WHERE 안에서도 보이는 등 어디서나 사용할 수 있습니다. 열 별칭은 출력 이름을 바꾸지만 어디서나 보이지는 않습니다. 정확히 반대입니다.
SELECT e.first_name, e.salary AS pay
FROM employees AS e
WHERE e.salary > 50000;빠른 확인
핵심 함정을 테스트합니다.
복습
복습해 보겠습니다. SELECT *보다 명시적 열을 우선하고 AS로 별칭을 지정하십시오. SELECT 별칭은 WHERE/GROUP BY/HAVING에서는 보이지 않지만 ORDER BY에서는 작동합니다. 표현식을 반복하거나 CTE를 사용해 해결하십시오.
자주 묻는 질문
“열 투영과 별칭의 함정” 강의는 무료인가요?
네 — “열 투영과 별칭의 함정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“열 투영과 별칭의 함정”에서 뭘 배우나요?
WHERE에서 SELECT 별칭을 참조할 수 없는 이유와 면접관이 별칭의 범위를 테스트하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“열 투영과 별칭의 함정” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.