**SELECT**는 하나 이상의 테이블에서 데이터를 가져옵니다. 가장 많이 쓰이는 SQL 문입니다. 원하는 컬럼과 어느 테이블에서 가져올지를 지정하고, 선택적으로 필터링, 정렬, 결과 제한을 합니다.
기본 SELECT
SELECT name, email
users;
users;
name full_name
users;
**SELECT**는 하나 이상의 테이블에서 데이터를 가져옵니다. 가장 많이 쓰이는 SQL 문입니다. 원하는 컬럼과 어느 테이블에서 가져올지를 지정하고, 선택적으로 필터링, 정렬, 결과 제한을 합니다.
SELECT name, email
users;
users;
name full_name
users;
SELECT 뒤에 반환할 컬럼을 나열하고(또는 *로 전체), FROM 뒤에 테이블을 적습니다. 별칭(AS)은 결과에서 컬럼 이름을 바꿉니다.
-- ❌ SELECT *는 모든 컬럼을 가져옴 — 낭비적이고 취약함 (컬럼이 바뀌면 깨짐)
SELECT * FROM users;
-- ✅ 필요한 것만 선택 — 전송 데이터 감소, 의도 명확, 더 안정적
SELECT id, name, email FROM users;
SELECT *는 탐색에는 편리하지만, 실제 코드에서는 필요한 컬럼만 선택해야 합니다. 전송 데이터가 줄고, 의도가 명확해지며, 테이블 컬럼이 바뀌어도 깨지지 않습니다.
SELECT
name,
price * quantity AS total, -- 계산된 컬럼
UPPER(name) AS name_upper, -- 컬럼에 적용된 함수
price * 1.1 AS price_with_tax
FROM orders;
SELECT은 단순 컬럼뿐 아니라 표현식과 함수도 포함할 수 있습니다.
SELECT name -- 5. 컬럼 선택 (논리적으로 거의 마지막에 실행)
FROM users -- 1. 테이블에서
WHERE active = true -- 2. 행 필터링
GROUP BY country -- 3. 그룹화
HAVING COUNT(*) > 5 -- 4. 그룹 필터링
ORDER BY name -- 6. 정렬
LIMIT 10; -- 7. 제한
논리적 실행 순서 (작성된 순서가 아님):
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
→ 그래서 WHERE에서 SELECT 별칭을 쓸 수 없음 (WHERE가 SELECT보다 먼저 실행됨).
SELECT은 데이터 조회의 기초입니다. 가장 많이 쓰이는 SQL 문이며, 모든 관계형 데이터베이스에서 읽기의 중심이므로, 숙달하는 것은 필수적인 일상 지식입니다.
컬럼 지정, 별칭 사용, 계산된 표현식 포함 방법을 이해하면 데이터를 가져오고 형태를 잡는 기본을 다룰 수 있습니다.
중요한 관행은 애플리케이션 코드에서 SELECT *를 피하는 것입니다(필요한 컬럼만 선택하면 전송 데이터가 줄고, 더 명확하며, 스키마 변경에 더 견고함 — 흔한 모범 사례).
특히 가치 있는 것은 쿼리의 논리적 실행 순서(FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT)를 이해하는 것입니다. 이는 작성된 순서와 다르며 실제 동작을 설명합니다 — 예를 들어 WHERE 절에서 SELECT 별칭을 참조할 수 없는 이유(WHERE가 논리적으로 SELECT보다 먼저 실행되기 때문).
쿼리가 실제로 어떻게 처리되는지에 대한 이 멘탈 모델은 올바른 쿼리 작성과 혼란스러운 오류 디버깅에 근본적입니다.
SELECT로 데이터를 읽는 것은 가장 흔한 데이터베이스 작업이고, 컬럼 선택, 별칭, 표현식, 특히 논리적 쿼리 순서를 이해하는 것이 모든 조회의 기초이므로, SELECT 문을 숙달하는 것은 SQL 데이터베이스를 다루는 누구에게나 핵심적이고 반드시 알아야 할 지식입니다.