alt

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는 숫자가 아닌 문자를 나타내며, 반복 기호와 시작 위치에 따라 추출 범위가 달라진다.
  • 정규식 함수는 추출할 그룹 번호, 치환 문자열, 검색 시작 위치 및 대소문자 옵션을 구분해 해석한다.
  • 단어 경계나 위치를 찾는 패턴은 공백 및 경계 표현이 실제 문자열에서 어느 위치에 적용되는지 확인한다.
공개 노트 모두 보기