2026 SQLD 필기 2과목 1장 1~2절 | 관계형 DB와 SELECT·DISTINCT — 핵심 이론
데이터위자드 ·
필기 · 핵심 이론
SELECT는 필요한 열을 고르고 FROM은 조회할 대상을 지정합니다. 문장을 위에서 아래로 읽는 순서와 결과가 만들어지는 논리적 처리 순서를 나누어 이해하면 별칭, 필터, 중복 제거 문제를 함께 풀 수 있습니다.
행과 열의 구분 · 논리적 처리 순서 · DISTINCT의 적용 단위 · 표현식과 별칭 · 테이블 별칭과 한정 이름
1. 행과 열의 구분
관계형 테이블에서 행은 개별 사실, 열은 속성입니다. 고객 3명에 대해 번호·이름·지역을 저장하면 행은 3개, 열은 3개입니다. SELECT 이름,지역은 열을 줄이고 WHERE 지역 조건은 행을 줄입니다.
SELECT *는 모든 열을 조회하지만 행 순서를 보장하지는 않습니다. 화면에서 우연히 PK 순으로 나왔다고 그 순서가 계약된 것은 아닙니다. 필요한 열을 명시하면 결과 구조가 명확하고 테이블에 열이 추가될 때의 영향도 줄일 수 있습니다.
SELECT 목록은 결과 열을, WHERE는 결과에 포함될 행을 정한다.
예제로 적용하기
고객 10행에서 이름과 지역만 조회하고 행 조건은 없다. 결과의 열 수는?
풀이와 판단 과정
결론: 2개
SELECT에 이름과 지역 두 표현식을 적었으므로 결과 열은 두 개입니다.
2. 논리적 처리 순서
기본 흐름은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY입니다. 실제 실행계획의 물리 연산 순서와 같은 말은 아닙니다. WHERE 단계에서는 SELECT에서 정한 별칭을 일반적으로 사용할 수 없지만 ORDER BY에서 쓸 수 있는 이유가 이 흐름으로 설명됩니다.
별칭 지원 범위는 DBMS에 따라 다를 수 있으므로 표준적인 문법과 제품별 확장 문법을 구분하세요. 시험 문제에서 DBMS를 명시하면 해당 문법을 따릅니다.
WHERE는 그룹을 만들기 전에 개별 행을 필터링한다.
예제로 적용하기
SELECT amount*2 AS doubled FROM t ORDER BY doubled에서 별칭 사용은?
풀이와 판단 과정
결론: ORDER BY에서 SELECT 별칭을 사용할 수 있다.
ORDER BY는 결과 표현식의 별칭을 참조할 수 있습니다. 이름을 바꾸는 것과 계산하는 것은 별개입니다.
3. DISTINCT의 적용 단위
DISTINCT는 SELECT한 모든 표현식의 조합을 기준으로 중복을 제거합니다. 지역만 조회하면 서울이 하나로 줄지만 지역,등급을 함께 조회하면 서울·A와 서울·B는 다른 행입니다. 개별 열마다 따로 중복을 제거하는 기능이 아닙니다.
조인 오류로 행 수가 늘었을 때 DISTINCT를 먼저 붙이면 원인을 가릴 수 있습니다. 우선 조인 관계와 결과의 한 행이 무엇을 뜻하는지 확인한 뒤 필요한 중복 제거인지 판단하세요.
DISTINCT 지역,등급은 두 값의 조합을 기준으로 중복을 제거한다.
예제로 적용하기
(서울,A),(서울,A),(서울,B)를 SELECT DISTINCT 지역,등급으로 조회하면?
풀이와 판단 과정
결론: 2행
서울·A가 한 행으로 합쳐지고 서울·B는 별도 조합이므로 총 두 행입니다.
4. 표현식과 별칭
SELECT 목록에는 컬럼뿐 아니라 상수·연산식·함수가 올 수 있습니다. AS 별칭은 결과의 이름을 지정하며 원본 컬럼명을 변경하지 않습니다. 수량×단가 AS 금액은 결과 값을 계산하고 그 결과 열의 제목을 금액으로 붙입니다.
연산 우선순위는 괄호를 먼저 보고 곱셈·나눗셈과 덧셈·뺄셈을 구별합니다. NULL이 참여하는 산술식도 확인해야 합니다. 수량이 NULL이면 단가가 있어도 곱의 결과는 일반적으로 NULL입니다.
SELECT의 별칭은 조회 결과의 이름이며 원본 스키마를 바꾸지 않는다.
예제로 적용하기
수량 3, 단가 2,000에서 수량*단가 AS 금액의 결과는?
풀이와 판단 과정
결론: 금액이라는 결과 열에 6,000
곱셈으로 6,000을 계산하고 결과 별칭만 금액으로 표시합니다.
5. 테이블 별칭과 한정 이름
여러 테이블에 같은 컬럼명이 있으면 테이블별칭.컬럼명으로 명확히 구별합니다. 고객 c와 주문 o를 조인할 때 c.id와 o.id는 서로 다른 값입니다. 별칭을 쓴 문장에서 원래 테이블명 혼용이 허용되는지 제품별 규칙도 살펴야 합니다.
별칭은 가독성을 위해 쓰되 의미 없는 이름을 과도하게 늘리지 않습니다. 행을 바꾸거나 데이터를 복사하는 기능은 아닙니다. 같은 테이블을 두 번 참조하는 셀프 조인에서도 각 역할을 구분하는 데 필요합니다.
테이블 별칭은 같은 이름의 컬럼 출처를 구별하는 데 유용하다.
예제로 적용하기
고객 c와 주문 o 모두 id가 있다. 고객 id만 선택하려면?
풀이와 판단 과정
결론: SELECT c.id
출처를 c.id로 한정해야 모호함을 피하고 고객 식별자를 정확히 조회합니다.
한눈에 비교하기
| 구문 | 담당 역할 | 기억할 기준 |
|---|---|---|
| SELECT | 결과 열·표현식 | 별칭은 결과 이름 |
| FROM | 데이터 출처 | 테이블·별칭 확인 |
| WHERE | 행 조건 | TRUE만 통과 |
| DISTINCT | 결과 중복 제거 | 전체 열 조합 기준 |
순서대로 풀어 보는 예제
고객 테이블에 (1,서울,A),(2,서울,A),(3,서울,B)가 있습니다. SELECT 지역은 서울을 세 번 반환합니다. SELECT DISTINCT 지역은 한 행이고, SELECT DISTINCT 지역,등급은 두 행입니다.
데이터를 읽는 작업인 SELECT와 중복을 삭제하는 DELETE는 다릅니다. DISTINCT 결과가 두 행이어도 원본 고객은 여전히 세 명입니다. 정렬까지 원한다면 마지막에 ORDER BY를 명시하세요.
SELECT DISTINCT region, grade
FROM customers
WHERE region = '서울'
ORDER BY grade;헷갈리는 문장 바로잡기
행과 열의 구분
잘못된 판단 SELECT는 항상 행을 정렬한다.
올바른 판단: SELECT 목록은 결과 열을, WHERE는 결과에 포함될 행을 정한다.
논리적 처리 순서
잘못된 판단 HAVING은 FROM보다 먼저 수행된다.
올바른 판단: WHERE는 그룹을 만들기 전에 개별 행을 필터링한다.
DISTINCT의 적용 단위
잘못된 판단 DISTINCT는 첫 컬럼만 비교한다.
올바른 판단: DISTINCT 지역,등급은 두 값의 조합을 기준으로 중복을 제거한다.
표현식과 별칭
잘못된 판단 AS를 쓰면 원본 컬럼명이 영구 변경된다.
올바른 판단: SELECT의 별칭은 조회 결과의 이름이며 원본 스키마를 바꾸지 않는다.
테이블 별칭과 한정 이름
잘못된 판단 별칭은 원본 테이블을 복제한다.
올바른 판단: 테이블 별칭은 같은 이름의 컬럼 출처를 구별하는 데 유용하다.
이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.
핵심 개념 확인 — 객관식 5문제
설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.
문제 1
관계형 DB와 SELECT·DISTINCT에서 행과 열의 구분에 대한 설명으로 옳은 것은?
- ① SELECT는 항상 행을 정렬한다.
- ② FROM은 반환 열 이름만 지정한다.
- ③ SELECT 목록은 결과 열을, WHERE는 결과에 포함될 행을 정한다.
- ④ WHERE는 테이블의 컬럼을 삭제한다.
정답과 해설 보기
정답 ③
관계형 테이블에서 행은 개별 사실, 열은 속성입니다. 고객 3명에 대해 번호·이름·지역을 저장하면 행은 3개, 열은 3개입니다. SELECT 이름,지역은 열을 줄이고 WHERE 지역 조건은 행을 줄입니다. SELECT *는 모든 열을 조회하지만 행 순서를 보장하지는 않습니다. 화면에서 우연히 PK 순으로 나왔다고 그 순서가 계약된 것은 아닙니다. 필요한 열을 명시하면 결과 구조가 명확하고 테이블에 열이 추가될 때의 영향도 줄일 수 있습니다.
SELECT 목록은 결과 열을, WHERE는 결과에 포함될 행을 정한다.
문제 2
관계형 DB와 SELECT·DISTINCT에서 논리적 처리 순서에 대한 설명으로 옳은 것은?
- ① ORDER BY는 WHERE보다 먼저 값을 지운다.
- ② HAVING은 FROM보다 먼저 수행된다.
- ③ WHERE는 그룹을 만들기 전에 개별 행을 필터링한다.
- ④ SQL의 물리 실행 순서는 항상 문장 작성 순서다.
정답과 해설 보기
정답 ③
기본 흐름은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY입니다. 실제 실행계획의 물리 연산 순서와 같은 말은 아닙니다. WHERE 단계에서는 SELECT에서 정한 별칭을 일반적으로 사용할 수 없지만 ORDER BY에서 쓸 수 있는 이유가 이 흐름으로 설명됩니다. 별칭 지원 범위는 DBMS에 따라 다를 수 있으므로 표준적인 문법과 제품별 확장 문법을 구분하세요. 시험 문제에서 DBMS를 명시하면 해당 문법을 따릅니다.
WHERE는 그룹을 만들기 전에 개별 행을 필터링한다.
문제 3
관계형 DB와 SELECT·DISTINCT에서 DISTINCT의 적용 단위에 대한 설명으로 옳은 것은?
- ① DISTINCT는 항상 원본 테이블에서 행을 삭제한다.
- ② DISTINCT는 숫자에는 사용할 수 없다.
- ③ DISTINCT 지역,등급은 두 값의 조합을 기준으로 중복을 제거한다.
- ④ DISTINCT는 첫 컬럼만 비교한다.
정답과 해설 보기
정답 ③
DISTINCT는 SELECT한 모든 표현식의 조합을 기준으로 중복을 제거합니다. 지역만 조회하면 서울이 하나로 줄지만 지역,등급을 함께 조회하면 서울·A와 서울·B는 다른 행입니다. 개별 열마다 따로 중복을 제거하는 기능이 아닙니다. 조인 오류로 행 수가 늘었을 때 DISTINCT를 먼저 붙이면 원인을 가릴 수 있습니다. 우선 조인 관계와 결과의 한 행이 무엇을 뜻하는지 확인한 뒤 필요한 중복 제거인지 판단하세요.
DISTINCT 지역,등급은 두 값의 조합을 기준으로 중복을 제거한다.
문제 4
관계형 DB와 SELECT·DISTINCT에서 표현식과 별칭에 대한 설명으로 옳은 것은?
- ① AS를 쓰면 원본 컬럼명이 영구 변경된다.
- ② NULL*10은 항상 0이다.
- ③ SELECT에는 컬럼만 적을 수 있다.
- ④ SELECT의 별칭은 조회 결과의 이름이며 원본 스키마를 바꾸지 않는다.
정답과 해설 보기
정답 ④
SELECT 목록에는 컬럼뿐 아니라 상수·연산식·함수가 올 수 있습니다. AS 별칭은 결과의 이름을 지정하며 원본 컬럼명을 변경하지 않습니다. 수량×단가 AS 금액은 결과 값을 계산하고 그 결과 열의 제목을 금액으로 붙입니다. 연산 우선순위는 괄호를 먼저 보고 곱셈·나눗셈과 덧셈·뺄셈을 구별합니다. NULL이 참여하는 산술식도 확인해야 합니다. 수량이 NULL이면 단가가 있어도 곱의 결과는 일반적으로 NULL입니다.
SELECT의 별칭은 조회 결과의 이름이며 원본 스키마를 바꾸지 않는다.
문제 5
관계형 DB와 SELECT·DISTINCT에서 테이블 별칭과 한정 이름에 대한 설명으로 옳은 것은?
- ① 테이블 별칭은 같은 이름의 컬럼 출처를 구별하는 데 유용하다.
- ② 별칭을 쓰면 조인 조건이 필요 없다.
- ③ 두 테이블의 id는 이름이 같으면 항상 같은 값이다.
- ④ 별칭은 원본 테이블을 복제한다.
정답과 해설 보기
정답 ①
여러 테이블에 같은 컬럼명이 있으면 테이블별칭.컬럼명으로 명확히 구별합니다. 고객 c와 주문 o를 조인할 때 c.id와 o.id는 서로 다른 값입니다. 별칭을 쓴 문장에서 원래 테이블명 혼용이 허용되는지 제품별 규칙도 살펴야 합니다. 별칭은 가독성을 위해 쓰되 의미 없는 이름을 과도하게 늘리지 않습니다. 행을 바꾸거나 데이터를 복사하는 기능은 아닙니다. 같은 테이블을 두 번 참조하는 셀프 조인에서도 각 역할을 구분하는 데 필요합니다.
테이블 별칭은 같은 이름의 컬럼 출처를 구별하는 데 유용하다.
범위 확인
2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.
SQLD 전체 목차
과목별 이론
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
단원별 객관식
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
실습
- SQL 학습 실습 1 · 6작업 · SELECT·조건·정렬
- SQL 학습 실습 2 · 6작업 · NULL·COUNT·평균
- SQL 학습 실습 3 · 6작업 · 날짜 범위·문자 조건
- SQL 학습 실습 4 · 6작업 · GROUP BY·HAVING·조건부 합계
- SQL 학습 실습 5 · 6작업 · 조인·행 수·미주문 고객
- SQL 학습 실습 6 · 6작업 · 서브쿼리·EXISTS·NOT EXISTS
- SQL 학습 실습 7 · 6작업 · 순위·동률·고객별 Top N
- SQL 학습 실습 8 · 6작업 · 집합 연산·조건부 피벗·전체 검산