SQLD 기출 문제 풀이(신유형 예상 문제 포함) #SQLD개정 #SQLD기출
2026년 11월 9일 공유
데이터베이스·SQL 기출 문제 핵심 정리
개요
- 콘텐츠 유형: 강의
- ERD 해석과 정규화부터 SQL 조인, 집계·분석 함수, 계층형 질의, 트랜잭션, 피벗 및 정규식까지 기출 문제의 핵심 풀이 원리를 정리한다.
- 문제를 빠르게 풀기보다 관계의 선택성, SQL 실행 방식, 함수의 범위와 결과를 정확히 해석하는 것이 중요하다.
핵심 개념
- ERD: 1대다 관계와 필수·선택 관계를 구분한다. 선택 관계에서는 해당 엔터티의 데이터가 없어도 상대 엔터티가 존재할 수 있다.
- 정규화: 반복되는 속성을 통합하고, 다른 속성을 결정하는 정보는 별도 엔터티로 분리한다.
- 조인: 외부 조인의 기준 테이블과
ON·WHERE조건의 위치에 따라 결과가 달라진다.
- 집계·분석:
NULL처리, 그룹 기준, 정렬 및 윈도 함수의 범위를 확인한다.
- Top-N: 정렬 후 행을 제한하는 방식과 순위 함수의 동률 처리 방식이 서로 다르다.
- 피벗·정규식: 어떤 열이 행으로 펼쳐지거나 쌓이는지, 정규식 패턴이 문자 하나인지 여러 개인지 주의한다.
상세 노트
ERD와 정규화
- 회원과 주문이 1대다 관계라면 회원 한 명은 여러 주문을 할 수 있다.
- 주문 쪽 관계가 선택적이면 회원은 주문을 하지 않아도 된다. 반대로 주문이 존재하려면 회원이 반드시 존재해야 하는지 관계의 필수성을 확인한다.
- 주문과 주문상품처럼 서로가 반드시 필요한 관계인지도 별도로 해석한다.
- 제1정규형: 반복되는 속성을 여러 열로 두지 않고 한 속성으로 정리한다.
- 제2정규형: 복합 기본키의 일부에만 종속되는 속성을 분리한다.
- 제3정규형: 기본키가 아닌 속성이 다른 비키 속성을 결정하는 이행적 종속을 제거한다.
- 학생·학과·교수·실습실 이용 내역처럼 독립된 정보를 별도 엔터티로 나눈다. 관계를 연결하는 외래키는 유지하고, 여러 건을 구분해야 하는 이용 내역에는 별도의 식별자를 둘 수 있다.
- 도서 대출 정보도 대출자, 도서, 대출 내역의 성격에 따라 분리한다.
SQL 조인과 조건
- 조인은 가능한 행 조합 중 조인 조건을 만족하는 결과를 반환한다.
- 외부 조인에서 기준 테이블의 행을 보존하려면 조인 방향과 조건 위치를 확인한다.
- 외부 조인 대상 테이블의 조건을
WHERE에 두면 결과에서 해당 행이 제외되어 사실상 내부 조인처럼 동작할 수 있다. 기준 행을 보존해야 하는 조건은 적절히ON에 둔다.
USING은 양쪽 테이블에 공통으로 존재하는 열 이름을 사용한다. 이때 해당 열을 테이블 별칭으로 한정하지 않는다.
- 조인되는 테이블에 같은 이름의 열이 있으면 열의 출처를 명시한다. 한 테이블에만 있는 열은 출처 생략이 가능하지만, 혼동 방지를 위해 명시하는 편이 안전하다.
- 오라클 구식 외부 조인 표기
(+ )는 표준 조인으로 옮길 때 외부 조인 방향과ON조건을 정확히 보존해야 한다.
NULL, 빈 문자열, 날짜 및 논리 연산
- 오라클은 빈 문자열을
NULL로 처리하지만 SQL Server는 빈 문자열을 별도 값으로 처리한다.
NULL은 일반 비교 연산으로 판정하지 않는다.IS NULL또는IS NOT NULL을 사용한다.
- 집계 함수는 일반적으로
NULL을 제외한다. 따라서 평균이나 개수 결과를 해석할 때 집계 대상의NULL여부를 확인한다.
- 문자와 숫자를 비교할 때 암묵적 형변환이 일어날 수 있다. 숫자로 변환할 수 없는 문자가 열에 있으면 오류가 발생할 수 있다.
- 날짜에 숫자를 더하면 일 단위로 계산된다. 시간 단위 계산은 24로 나누고, 분 단위는 이를 다시 60으로 나누는 방식으로 환산한다.
- 논리 연산 우선순위는 NOT → AND → OR이다. 조건을 묶어 의도한 순서로 평가되도록 한다.
집계와 분석 함수
- 조건별 개수를 구할 때는
CASE로 해당 행에만 값을 부여하고SUM으로 합산할 수 있다. 조건에 맞지 않는 경우NULL이 되도록 하면 불필요한 행이 집계되지 않는다.
SUM(CASE ... ELSE 1 END)처럼 조건에 맞지 않는 행에도 값을 주면 의도치 않게 전체 행이 집계될 수 있다.
- 그룹별 급여 비중은
RATIO_TO_REPORT를 사용하거나, 그룹별 급여 총합을 구해 개별 급여와 나눌 수 있다.
- 윈도 함수의 정렬과 프레임 범위는 결과에 직접 영향을 준다.
ROWS BETWEEN ...과 같은 범위가 누적 계산인지 현재 행만 계산하는지 확인한다.
ROLLUP은 지정된 열의 조합별 소계와 전체 합계를 만든다. 소계·전체 행의NULL은 실제NULL과 구별하기 위해GROUPING함수로 확인하고 라벨을 대체할 수 있다.
- 이전·이후 값 비교에는
LAG,LEAD를 사용하고, 비교 결과를 플래그로 만들어 필요한 행만 추릴 수 있다.
Top-N 및 순위
- 정렬 순위에서 동률을 같은 순위로 처리하려면
RANK또는DENSE_RANK를 사용한다.
RANK는 동률 다음 순위를 건너뛴다.
DENSE_RANK는 순위를 건너뛰지 않는다.
ROW_NUMBER는 동률을 인정하지 않고 행마다 고유 번호를 부여한다.
- 분석 함수 결과를 필터링하려면 먼저 순위를 계산한 뒤 외부 쿼리에서 조건을 적용해야 한다.
- 정렬 전에
ROWNUM을 적용하면 원하는 정렬 순위의 행이 반환되지 않을 수 있다.
- 정렬 후 지정 개수만큼 가져오는 구문이나
OFFSET방식은 정렬 기준과 건너뛸 행 수를 함께 확인한다.
- 동률을 포함해 상위 결과를 선택해야 하는 경우
WITH TIES에 해당하는 방식을 고려한다.
갱신, 트랜잭션 및 계층형 질의
- 그룹별 최신 변경 정보를 적용할 때는 먼저 최신 날짜를 구하고, 그 날짜의 행과 다시 연결해 담당자 등 상세 값을 가져온다.
- 업데이트에는 대상 행을 제한하는 조건이 필요하다. 조건이 빠지거나 부정확하면 변경 이력이 없는 행까지
NULL로 갱신될 수 있다.
- 오라클은 DDL 수행 시 암묵적 커밋이 발생한다. SQL Server는 트랜잭션 설정에 따라 DDL도 롤백될 수 있다.
- 트랜잭션 내에서
COMMIT되기 전의 변경은 롤백 대상이 될 수 있다. 실제 결과는 트랜잭션 경계와 DBMS 동작을 함께 확인한다.
- 외래키의
ON DELETE CASCADE는 부모 삭제 시 자식 행도 삭제한다.SET NULL은 부모가 삭제될 때 자식의 외래키를NULL로 바꾼다.
- 계층형 질의는 시작 행을 정한 뒤
PRIOR의 위치로 상위·하위 방향을 판별한다. 양방향 관계를 모두 탐색하려면 각 방향의 조건을 구분한다.
- 계층 결과에 부가 정보를 연결할 때는 해당 정보가 없어도 계층 행을 보존해야 하는지 판단해 외부 조인을 적용한다.
피벗과 정규식
- 피벗: 행에 있던 값을 여러 열로 펼친다. 피벗 대상 열, 값 열, 피벗에 사용하지 않는 나머지 열의 역할을 구분한다.
- 언피벗: 여러 열을 행으로 쌓는다. 대상 열과 새로 만들어질 값 열의 이름을 확인한다.
- 피벗 결과의 빈 값은 기본적으로
NULL일 수 있으며, 0으로 표시하려면 별도의 치환이 필요하다.
- 정규식에서 대괄호는 집합 안의 문자 중 한 글자를 나타낸다. 여러 문자를 한 덩어리로 뜻하지 않는다.
\D는 숫자가 아닌 문자를 나타내며, 반복 기호와 시작 위치에 따라 추출 범위가 달라진다.
- 정규식 함수는 추출할 그룹 번호, 치환 문자열, 검색 시작 위치 및 대소문자 옵션을 구분해 해석한다.
- 단어 경계나 위치를 찾는 패턴은 공백 및 경계 표현이 실제 문자열에서 어느 위치에 적용되는지 확인한다.