기본 문법은 각각 따로 외우는 것이 아니라 실행 순서와 역할을 함께 묶어서 기억해야 실습에서 헷갈리지 않습니다. 특히 GROUP BY, HAVING, DISTINCT는 결과를 어떻게 바꾸는지 직접 실행하면서 체감하는 것이 중요합니다.
핵심 체크포인트
- SELECT는 보여줄 컬럼, FROM은 가져올 테이블, WHERE는 행 조건을 담당합니다.
- GROUP BY 이후에는 집계 컬럼과 일반 컬럼을 섞는 규칙을 반드시 함께 봐야 합니다.
- ORDER BY는 가장 마지막에 적용되며 결과 표시 순서를 바꾸는 절입니다.
주제별 설명
SELECT
조회 결과에 어떤 컬럼이나 식을 보여줄지 결정하는 절입니다.
- 컬럼명, 상수, 함수, 산술식 모두 SELECT에 둘 수 있습니다.
- 실습 초반에는 `SELECT *`보다 필요한 컬럼만 명시하는 습관이 좋습니다.
SELECT member_id,
member_name,
city
FROM members;FROM
데이터를 읽어올 테이블 또는 인라인 뷰를 지정하는 절입니다.
- FROM이 있어야 SQL이 어떤 집합을 기준으로 동작하는지 정해집니다.
- 조인, 서브쿼리, 뷰도 결국 FROM에서 시작합니다.
WHERE
행 단위로 조건을 걸어 필요한 데이터만 남기는 절입니다.
- 집계 전에 필터링되므로 성능과 결과 모두에 직접 영향을 줍니다.
- NULL 비교는 `=`가 아니라 `IS NULL`, `IS NOT NULL`을 사용합니다.
SELECT member_name,
city
FROM members
WHERE city = 'SEOUL'
AND grade_code = 'VIP';ORDER BY
조회 결과의 출력 순서를 정하는 절입니다.
- ASC는 오름차순, DESC는 내림차순입니다.
- 정렬 컬럼이 여러 개면 앞 컬럼이 먼저 우선순위를 가집니다.
GROUP BY
같은 값끼리 묶어서 COUNT, SUM, AVG 같은 집계를 계산할 때 사용합니다.
- SELECT에 일반 컬럼이 있다면 대부분 GROUP BY에도 함께 있어야 합니다.
- GROUP BY는 행을 줄이는 절이라 결과 행 수가 달라지는지 꼭 확인해야 합니다.
SELECT grade_code,
COUNT(*) AS member_cnt
FROM members
GROUP BY grade_code;HAVING
GROUP BY로 집계된 결과에 다시 조건을 거는 절입니다.
- WHERE는 집계 전, HAVING은 집계 후라는 차이를 명확히 구분해야 합니다.
- 집계 함수 조건은 HAVING에서 다루는 경우가 많습니다.
DISTINCT
중복된 결과 행을 제거해 유일한 값만 보고 싶을 때 사용합니다.
- DISTINCT는 선택한 컬럼 조합 전체를 기준으로 중복을 제거합니다.
- GROUP BY와 비슷해 보이지만 집계 의도가 없다면 DISTINCT가 더 직접적입니다.
ALIAS
컬럼이나 테이블에 읽기 쉬운 별칭을 붙여 쿼리를 정리하는 기법입니다.
- 컬럼 별칭은 결과 컬럼명을 명확하게 만들 때 유용합니다.
- 테이블 별칭은 조인 쿼리에서 컬럼 출처를 짧게 구분할 때 가장 많이 씁니다.
산술연산자
`+`, `-`, `*`, `/`를 사용해 숫자 계산이나 파생 컬럼을 만들 수 있습니다.
- 연산 순서는 일반 수학과 비슷하며 괄호로 우선순위를 명확히 줄 수 있습니다.
- NULL과 계산하면 결과도 NULL이 되는 경우가 많아 NVL과 함께 보는 습관이 좋습니다.
비교연산자
`=`, `<>`, `>`, `<`, `>=`, `<=`, `BETWEEN`, `LIKE`, `IN` 등을 포함합니다.
- 조건식은 WHERE, HAVING, CASE에서 계속 반복되므로 의미를 정확히 익혀야 합니다.
- 문자 비교와 날짜 비교는 형 변환 여부까지 같이 보는 것이 안전합니다.
논리연산자
`AND`, `OR`, `NOT`으로 조건식을 결합하거나 반전시킵니다.
- AND가 OR보다 먼저 계산되므로 복잡한 조건은 괄호로 묶는 것이 좋습니다.
- 조건이 길어질수록 괄호와 들여쓰기로 읽기 쉽게 정리해야 실수를 줄일 수 있습니다.
실습 흐름 추천
- SELECT와 FROM만 먼저 실행해 기본 결과를 확인합니다.
- WHERE와 ORDER BY를 하나씩 붙이며 결과 행 수와 순서를 비교합니다.
- 집계가 필요하면 GROUP BY와 HAVING을 마지막에 붙여 결과 구조 변화를 확인합니다.
이론만 읽지 말고 바로 blacksql.sqld.kr에서 실행해보고, 문제 풀이 감각은 www.sqld.kr에서 이어가면 학습 속도가 훨씬 빨라집니다.
자주 묻는 질문
집계 전 행 조건이면 WHERE, 집계 후 그룹 조건이면 HAVING으로 생각하면 대부분 정리됩니다.
SELECT -> WHERE -> ORDER BY -> GROUP BY -> HAVING 순서로 붙여보며 결과가 어떻게 바뀌는지 직접 보는 방식이 가장 안정적입니다.