SQLD - 문제 풀이

김기훈·2025년 11월 7일

자격증

목록 보기
3/5

OX

  • CHECK 제약 조건은 열의 값이 특정 조건을 충족하는지 확인
  • START WITH 절은 계층 구조에서 시작점을 정의
    • 계층 구조의 루트 노드를 지정
  • DCL 명령어 는 권한 부여 및 제거와 관련
  • [^a-z] 는 알파벳 소문자를 제외한 모든 문자를 의미
  • UNIQUE 키는 NULL 값을 중복으로 허용 가능
  • UPDATE 문은 조건을 통해 여러 행을 동시에 변경 가능
  • GRANT 문은 사용 권한을 부여하는 데 사용
  • ROLLUP 은 계층적 데이터를 분석하는 데 유용하며 OLAP 작업에 적합
  • GROUPING 함수는 성능 향상을 위한 도구가 아니라 집계 결과 해석을 위한 도구
  • 데이터베이스의 관계(Relationship) 는 테이블 간의 논리적 연관성을 정의
  • DROP 문은 데이터베이스 객체를 완전히 삭제하며 복구할 수 없음
  • CROSS JOIN 은 두 테이블의 모든 행 조합을 반환
  • 외래키(Foreign Key) 는 참조 무결성을 유지하기 위해 다른 테이블의 기본키를 참조

  • 데이터베이스에서 NULL 값은 UNKNOWN 값으로 간주
    • 알 수 없는 값 또는 값이 없음
  • 속성엔터티의 특성을 나타내는 요소
    • 다른 엔터티가 동일한 속성을 가질 수 있음.
    • ex. '이름' 속성은 여러 엔터티에서 공통적으로 사용
  • 스칼라 서브쿼리 는 단일 값을 반환하며 SELECT 절에서 다른 열과 함께 사용 가능
    • 상관 서브쿼리 는 메인 쿼리의 각 행에 대해 실행되므로 일반적으로 독립 서브쿼리보다 비효율적
  • 본질식별자 는 사용자가 쉽게 이해할 수 있는 데이터를 제공
    • 본질식별자는 비즈니스 속성을 사용하므로 사용자에게 친숙
    • 본질식별자는 상황에 따라 적합하지 않을 수 있으며, 비즈니스 규칙의 변화에 민감할수 있음
  • SQL에서 HAVING 절은 GROUP BY 절에 의해 그룹화된 데이터에 대한 조건을 지정
    • HAVING 절은 그룹화된 데이터에 조건을 지정하는 데 사용
    • HAVING 절은 집계 함수가 없는 조건도 지정은 가능, WHERE 절을 사용하는 것이 더 일반적
    • HAVING 절은 WHERE 절보다 나중에 실행(WHERE -> GROUP BY -> HAVING 순서)
  • UPPER 함수는 문자열을 대문자로 변환
  • LAST_DAY('2024-02-15') 의 결과는 '2024-02-29'
    • LAST_DAY 함수는 주어진 날짜의 월 마지막 날짜를 반환
  • 데이터베이스에서 트랜잭션이 롤백 되면 변경 사항은 복구됨
    • 롤백은 트랜잭션의 변경 사항을 복구

  • TRUNCATE 는 테이블의 모든 데이터를 삭제하며 WHERE 조건을 지원하지 않음
  • 데이터 무결성 은 데이터가 올바르고 일관성을 유지하도록 보장
    • 데이터 무결성은 데이터의 정확성과 일관성을 보장
  • 데이터베이스의 인덱스 는 특정 열의 데이터만 저장
  • 데이터베이스의 논리적 설계 는 ERD와 같은 다이어그램으로 표현
    • 데이터베이스의 논리적 설계는 물리적 설계보다 먼저 수행
  • 관계형 데이터 모델에서는 데이터 중복 을 최소화하여 무결성효율성 을 높이는 것이 중요
  • 주식별자 는 문자, 숫자 등 다양한 데이터 타입을 가질 수 있음
  • JOIN 연산은 항상 두 개 이상의 테이블을 필요로 하지않음
    • 셀프 조인은 하나의 테이블에서 수행 가능
      • SELF JOIN은 동일한 테이블을 스스로 조인하는 방식
    • JOIN은 세 개 이상의 테이블에서도 수행 가능
    • INNER JOIN은 조건이 일치하는 데이터를 반환하며 가장 많이 사용됨
  • 정규 표현식에서 {n} 은 정확히 n번 반복됨을 의미
  • NULL 값은 수학 연산에서 정의되지 않은 값으로 간주 (0 아님)
  • 정규화 는 항상 비정규화보다 우선적으로 수행되어야 함
    • 정규화를 먼저 수행한 후 필요에 따라 비정규화를 진행
  • 데이터베이스에서 기본키 는 각 행을 고유하게 식별하기 위해 사용
  • LENGTH 함수는 문자열의 길이를 반환(LENGTH 함수는 문자열의 길이를 계산)
  • 테이블 간의 관계에서 1:M 관계 는 다수의 테이블이 하나의 테이블을 참조
    • 1:M 관계에서는 여러 행이 하나의 행을 참조
  • 데이터 타입 은 속성 값의 형식과 유효 범위를 제한
  • 데이터베이스에서 식별자 관계 는 항상 상위 엔터티의 기본키를 포함
    • 식별자 관계는 상위 엔터티의 기본키를 하위 엔터티가 상속받음
  • TCL 명령어는 트랜잭션의 시작, 커밋, 롤백 등을 관리하는 데 사용
  • 논리 모델링물리 모델링 은 서로 다른 단계
  • NOT IN 서브쿼리는 NULL 값을 포함하면 결과가 의도치 않게 반환 가능
  • CONCAT 함수는 두 개 이상의 문자열을 연결

  • DCL 명령어는 권한 부여 및 제거와 관련이 있습니다.
  • ORDER BY 절은 여러 컬럼을 지정하여 다중 정렬 기준을 적용할 수 있습니다.
  • CONCAT('Hello', 'World')의 결과는
    • CONCAT 함수는 공백 없이 문자열을 결합하므로 'HelloWorld'를 반환
  • 데이터 타입은 속성 값의 형식과 유효 범위를 제한
  • 비정규화는 성능 향상을 목표로 하지만, 모든 상황에서 성능을 보장하지는 않음
  • 계층형 질의에서 루프(circular reference)를 포함하는 데이터를 반환하기 위해서
    • CONNECT BY NOCYCLE을 명시해야 함
  • 데이터베이스에서 테이블의 기본키는 변경 불가
    • 기본키를 변경하려면 기존 기본키를 삭제하고 새로운 기본키를 정의해야 함
  • 비정규화는 성능 향상을 위해 데이터 중복을 의도적으로 허용
  • 식별자 관계는 두 테이블 간의 강한 종속성을 형성
  • 데이터 타입은 속성의 값 범위를 결정하므로 무결성에 영향을 줌
  • 스키마는 데이터베이스의 논리적 구조를 나타냄
  • 정규화는 데이터베이스 설계의 주요 원칙으로, 데이터 중복 감소와 무결성 유지를 목적
  • M:N 관계는 중간 테이블을 통해 구현
  • 식별자 관계에서는 자식 엔터티의 식별자가 부모 엔터티의 영향을 받지 않는다
    • 비식별자 관계에서는 자식 엔터티가 독립적인 식별자를 가질 수 있다.
  • GRANT 문은 특정 테이블이나 열에 대해 권한을 부여할 수 있다
  • SQL에서 NVL 함수는 NULL 값을 특정 값으로 대체
    • NVL 함수는 NULL 값을 지정된 값으로 대체
  • DROP 문은 테이블, 뷰, 인덱스 등의 데이터베이스 객체를 삭제할 수 있다
    • DELETE 문은 테이블의 데이터를 삭제하지만 테이블 자체는 유지
  • LEFT OUTER JOIN과 LEFT JOIN은 동일한 기능을 수행
  • 기본값은 선택적으로 설정 가능
  • 정규화는 데이터 중복을 제거함으로써 삭제 이상을 방지
  • 하나의 테이블에 기본키는 하나만 정의 가능
  • TO_DATE 함수는 문자열을 날짜로 변환
  • 조인은 여러 테이블의 데이터를 연결하고 조회하는 데 사용
  • GROUPING 함수는 ROLLUP이나 CUBE로 생성된 집계 행을 구별(식별)할 수 있다
  • CREATE는 데이터베이스 객체를 생성하며, 데이터 삽입은 INSERT로 수행
  • 반정규화는 성능 최적화를 위해 사용되기도 함
  • 데이터베이스에서 뷰(View)는 저장 공간을 차지하지 않는다.
    • 뷰는 저장 공간을 차지하지 않으며, 쿼리 결과를 동적으로 제공
  • OUTER JOIN은 조건에 맞지 않는 행도 포함하여 반환
  • 데이터베이스에서 서브타입(Subtype)은 슈퍼타입(Supertype)을 상속
    • 서브타입은 슈퍼타입의 속성과 관계를 상속받음
  • 데이터베이스의 클러스터링 인덱스는 데이터를 물리적으로 정렬 및 저장
  • 제2정규형(2NF)은 테이블이 기본 키에 대해 부분적 종속성이 없도록 한다.
    • 2NF는 기본 키에 대한 부분적 종속성을 제거
  • GROUP BY는 HAVING 절 없이 사용할 수 있다
  • 복합키는 두 개 이상의 속성을 조합하여 기본키를 구성
    • 복합키는 여러 속성을 결합하여 고유성을 보장
  • 정규화로 중복을 줄일 수 있지만 완전히 제거되는 것은 아님
  • 관계형 데이터베이스에서 한 테이블의 기본키는 다른 테이블의 외래키로 사용될 수 있다
  • 정규화의 목적은 데이터 무결성과 중복 제거(성능최적화X)
  • 비식별자 관계는 자식 엔터티가 부모 엔터티의 기본키를 상속받지 않아 독립성을 유지
  • ER 다이어그램에서 속성은 주로 타원으로 표현
    • 속성은 타원형으로 표시되며 엔터티 또는 관계와 연결
    • ER 다이어그램에서 약한 엔터티(Weak Entity)는 다른 엔터티의 주식별자를 포함해야 함
  • 정규 표현식은 단순한 문자열 검색보다 더 복잡한 패턴 매칭을 수행 가능
  • 필요에 따라 본질식별자와 인조식별자를 함께 사용 가능
  • ORDER BY 절은 정렬 기준만 지정하며 조건문은 사용할 수 없음, 조건은 WHERE 절에서 처리
  • MONTHS_BETWEEN('2024-01-01', '2023-01-01')의 결과는 12
    • 두 날짜 간의 월 차이는 12
  • 엔터티 간의 관계는 1:1, 1:N, N:M 형태로 다양
    • 반드시 다중 엔터티간 X
  • DELETE는 데이터만 삭제하며, 테이블 구조는 변경하지 않음
  • COMMIT 문은 트랜잭션의 변경 사항을 데이터베이스에 영구적으로 저장
  • 조인(JOIN)은 등가 조건뿐만 아니라 비등가 조건으로도 수행 가능
  • GROUPING SETS는 특정 그룹화 조합을 명시적으로 지정 가능

  • 식별자는 숫자, 문자 등 다양한 형식으로 구성될 수 있다
  • SYSDATE 함수는 현재 시스템의 날짜와 시간을 반환
  • 정규 표현식에서 \d는 숫자를 의미
  • 기본키는 NULL 값을 가질 수 없다
  • SELECT 문의 WHERE 절에서 사용되는 LIKE 연산자는 대소문자를 구분
    • LIKE 연산자는 DBMS에 따라 대소문자를 구분할 수 있다(Oracle은 대소문자를 구분)
  • NATURAL JOIN은 동일한 열을 기준으로 중복을 제거하여 반환
  • 데이터베이스에서 관계형 모델은 테이블, 열, 행을 기반으로 한다.
    • 관계형 모델은 테이블 형태로 데이터를 구조화
  • SQL에서 FULL OUTER JOIN은 모든 행을 포함
    • FULL OUTER JOIN은 두 테이블의 모든 행을 포함
  • 정규화는 성능 저하를 유발할 수 있으나 데이터 무결성을 보장
  • 외래키와 부모 테이블의 기본키는 동일한 이름일 필요는 없다
  • 서브쿼리(Subquery)는 다른 SQL 문 내에서 포함된 SQL 문을 말한다.
    • 서브쿼리는 다른 SQL 문 내부에서 실행되는 SQL 문
  • NULL 값은 데이터 타입에 맞게 변환될 수 있다
  • 논리 데이터 모델은 DBMS 독립적
  • DELETE는 데이터만 제거하고 테이블 구조는 유지
  • {m,n}은 m번에서 n번 사이의 반복을 나타냄
  • SQL의 DISTINCT 키워드는 중복된 데이터를 제거하는 데 사용
  • GROUP BY GROUPING SETS는 CUBE와 ROLLUP의 기능을 조합 가능
    • GROUPING SETS는 CUBE 및 ROLLUP의 조합된 결과를 생성 가능
  • SQL의 WHERE 절은 데이터 행을 필터링
    • WHERE 절은 특정 조건을 만족하는 행만 필터링
  • 데이터베이스는 관계형, 문서형, 키-값형 등 여러 종류가 있음
  • COUNT 함수는 기본적으로 중복을 포함하여 행 개수를 반환하지만 DISTINCT와 함께 중복을 제거 가능
  • INNER JOIN은 조인 조건을 명시적으로 선언해야 함
  • 데이터베이스의 기본키는 데이터 변경 시에도 고유성을 유지해야 함
  • FROM 절에서 서브쿼리를 테이블처럼 사용하여 데이터 집합을 생성 가능
  • HAVING 절은 GROUP BY가 적용된 결과를 필터링하는 데 사용
    • HAVING 절은 GROUP BY 결과를 제한
  • 식별자는 기본키 외에도 대체키 또는 후보키로 정의 가능
  • 외래키 값이 NULL인 경우, 참조 무결성은 위반되지 않음
  • 데이터베이스의 트랜잭션 격리 수준에서 READ UNCOMMITTED는 다른 트랜잭션의 임시 데이터를 읽기 가능
    • READ UNCOMMITTED는 다른 트랜잭션의 아직 커밋되지 않은 데이터를 읽을 수 있다
  • 속성은 문자열뿐 아니라 숫자, 날짜 등 다양한 데이터를 저장할 수 있다
  • OUTER JOIN은 INNER JOIN과 다른 개념이며, 조건에 맞지 않는 데이터도 포함
  • SQL에서 NULL 값은 집계 함수 COUNT의 계산에서 제외
  • 식별 관계에서는 외래키가 반드시 포함
  • 트랜잭션의 고립성(Isolation)은 동시에 실행되는 트랜잭션 간의 간섭을 방지
    • 고립성은 트랜잭션 간 간섭을 방지
  • 외래키 제약 조건은 항상 부모 테이블의 데이터 무결성을 보장
    • 외래키 제약 조건은 참조 무결성을 보장
  • 뷰는 저장된 데이터의 가상 표현이며, 실제 데이터를 저장하지 않음
  • 데이터베이스의 기본키는 하나 이상의 속성으로 구성될 수 있다, 이를 복합키라고 함
  • 데이터베이스의 정규화는 데이터베이스 설계의 초기 단계에서 수행
  • ERD에서 사각형은 엔터티를 나타내고, 속성은 타원으로 나타냄
  • HAVING 절은 GROUP BY 이후에 실행

주관식

  • view
    • 뷰는 가상의 테이블이기에 물리적으로 구현되어 있지 않으며 저장공간을 차지하지 않는다.
    • 뷰를 참조하는 또 다른 뷰는 생성 불가하다.
    • 기본 테이블이 삭제되면 그 테이블을 참조하여 만든 뷰 역시 삭제된다
    • 이미 정의되어 있는 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
  • 엔터티 간 1:1, 1:M 등과 같이 관계참여 인스턴스의 수를 지칭하는 것은 관계 차수
  • 집합 연산자
    • INTERSECT : 교집합
    • MINUS : 차집합
    • UNION : 중복을 제거한 결과의 합
    • UNION ALL : 중복을 포함한 결과의 합
  • 트랜잭션
    • 하나의 트랜잭션은 부분 COMMIT이 불가하다.
    • 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있다.
    • 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현한다.
    • 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성한다.

문제 분석

SELECT dept, COUNT(*)
FROM emp
GROUP BY dept
HAVING COUNT(*) >= 5;
  • FROM emp 테이블 읽기
  • GROUP BY dept 부서별로 묶기
  • COUNT(*) 각 그룹의 레코드 수 계산
  • HAVING COUNT(*) >= 5 그룹 필터링
  • SELECT dept, 카운트 표시
SELECT dept, COUNT(*)
FROM emp
GROUP BY dept;
    1. emp 테이블에서 읽는다
    1. dept 기준으로 그룹 나눈다
    1. 각 그룹(dept)별 row 개수를 COUNT(*)로 구한다
    1. SELECT로 dept 값과 count 결과를 보여준다

1과목

2025/11/12

    1. 개념적 모델링
    • ‘업무 중심’으로 데이터를 추상화하는 과정
    • 엔터티, 속성, 관계를 도출하고 비즈니스 규칙을 정의
    1. 엔터티(Entity)의 정의
    • 현실 세계에서 데이터로 관리할 필요가 있는 객체(예: 고객, 주문, 상품 등)
    1. 식별자(Identifier)의 역할
    • 식별자는 엔터티의 각 인스턴스를 구분하기 위한 속성 또는 속성들의 조합
    1. ERD 작성 시 관계의 차수(Cardinality) 중 ‘1:N’
    • 하나의 엔터티가 여러 엔터티와 연결(예를 들어 ‘부서 - 사원’)
    1. 정규화의 주요 목적
    • 데이터 중복 최소화 및 이상(Anomaly) 제거
    • 데이터의 일관성을 높이고 이상 현상을 방지하기 위한 설계 기법
    1. 제1정규형(1NF)의 조건 ✅
    • 모든 속성이 원자값(Atomic Value)을 가진다
    • 각 속성이 더 이상 분해되지 않는 원자값이어야 한다.
    1. 제2정규형(2NF)의 조건 ✅
    • 모든 속성이 기본키에 완전 함수 종속되어야 한다
    • 2NF는 1NF를 만족하면서 부분 함수 종속이 없는 상태
    1. 제3정규형(3NF)의 조건 ✅
    • 기본키에 이행적 함수 종속이 존재하지 않는다
    • 비주요 속성이 다른 비주요 속성에 종속되지 않아야 한다.
    1. 식별자 관계(Identifying Relationship)의 특징 ✅
    • 자식 엔터티의 외래키가 기본키 일부가 된다
    • 식별자 관계는 부모의 식별자를 자식의 기본키로 포함하는 강한 종속 관계
    1. 엔터티 간 관계에서 “약한 엔터티(Weak Entity)”란? ✅
    • 다른 엔터티의 식별자를 함께 사용해야 구분 가능한 엔터티
    • 부모 엔터티의 식별자와 자신의 속성을 결합해 구분된다.(주문-주문상세)
    1. 데이터 모델링의 3단계 ✅
    • 개념적 → 논리적 → 물리적 순서
    • 데이터 모델링은 추상적 수준부터 구체적 수준으로 내려간다.
    1. 속성(Attribute)의 특징 ✅
    • 하나의 엔터티는 여러 속성을 가질 수 있다
    • 속성은 반드시 하나의 도메인을 가져야 한다
    • 속성은 엔터티의 상태나 성질을 나타낸다
    • 속성은 엔터티 내부의 구성 요소이며, 다른 엔터티의 속성을 포함하지 않는다.
    1. 관계(Relationship) 표현에서 “1:1 관계” ✅
    • 한 엔터티의 한 인스턴스가 다른 엔터티의 한 인스턴스와 연결된다(사원 - 사원증)
    1. 식별자(Identifier) 선정 시 고려할 사항 ✅
    • 유일성 / 최소성 / 안정성
    • 좋은 식별자는 유일하고, 최소이며, 변경 가능성이 낮아야 한다
    1. 속성의 도메인(Domain) ✅
    • 속성이 가질 수 있는 값의 범위
    1. 관계 차수(Cardinality) “1:N” 관계에서 외래키는 어디에 존재 하는가? ✅
    • 자식 엔터티
    • “1:N” 관계에서는 ‘N’ 쪽(자식)에 외래키가 존재
    1. 속성의 종류 중 “파생 속성(Derived Attribute)”이란? ✅
    • 계산된 값이나 다른 속성으로부터 유도되는 속성
    • 다른 속성으로부터 계산되는 값(예: 나이 = 오늘날짜 - 생년월일)
    1. 정규화 과정에서 “함수적 종속(Functional Dependency)” ✅
    • 한 속성의 값이 다른 속성의 값을 결정하는 관계
    • 함수적 종속은 X → Y 형태로 표현되며, X가 Y를 결정짓는 관계를 의미
    1. 비정규화(De-normalization)의 주된 목적 ✅
    • 데이터 접근 성능 향상
    • 비정규화는 일부 중복을 허용하여 조회 속도 향상을 목적으로 한다.
    1. 식별자 관계(Identifying)와 비식별자 관계(Non-Identifying)의 가장 큰 차이 ✅
    • 외래키가 기본키에 포함되는지 여부
    • 식별자 관계는 부모의 식별자가 자식의 기본키에 포함되고, 비식별자 관계는 포함되지 않는다.
    1. 데이터 모델링의 목적 ✅
    • 데이터 중복을 줄인다
    • 업무 규칙을 데이터 구조로 표현한다
    • 데이터 무결성을 향상시킨다
    • 성능보다는 정확성과 일관성이 핵심이다. 성능은 물리 설계 단계에서 다룬다.
    1. 엔터티(Entity)와 인스턴스(Instance)의 관계 ✅
    • 엔터티는 인스턴스의 집합
    • 엔터티는 추상적 개념, 인스턴스는 그 실제 데이터를 의미
    1. 엔터티 간 관계에서 “다대다(N:M)” 관계를 구현할 때 필요한 것 ✅
    • 조인 테이블(교차 엔터티)
    • 다대다 관계는 중간에 별도의 연결 엔터티(Bridge Table, Mapping Table)를 만들어
      • 1:N, N:1로 분리해야 한다.
    1. 일반화(Generalization)와 특수화(Specialization)에 대한 설명 ✅
    • 일반화는 하위 엔터티의 공통 속성을 상위 엔터티로 통합하는 것
    • 특수화는 반대로 세분화하는 것
    1. “업무규칙(Business Rule)”이 모델링에 미치는 영향 ✅
    • 관계의 존재 여부나 선택성을 결정한다
    • 업무규칙은 엔터티 간의 관계, 필수 여부(옵셔널), 참여 제약 등을 정의하는 핵심 근거가 된다
    1. 정규화 수행 시 “부분 함수 종속(Partial Dependency)”이 존재한다면 어느 단계까지 정규화해야 하는가? ✅
    • 2NF 까지 정규화
    • 부분 함수 종속은 2NF에서 제거해야 하는 종속성으로,
      • 복합키 중 일부에만 종속된 속성이 있는 경우를 의미한다.
    1. “이행적 함수 종속(Transitive Dependency)” ✅
    • 학번 → 학과코드 → 학과명
    • 학번이 학과코드를 결정하고, 학과코드가 학과명을 결정한다면 학번 → 학과명은 이행적 종속
    1. 식별자 관계(Identifying)와 비식별자 관계의 구조적 차이 ✅
    • 식별자 관계는 부모의 키를 자식의 기본키에 포함시킨다
    • 식별자 관계는 부모의 식별자가 자식의 기본키 일부로 들어가며, 자식은 독립적으로 존재할 수 없다
    1. 비정규화(De-normalization)를 고려해야 하는 경우 ✅
    • 조회 속도를 높여야 할 때
    • 비정규화는 데이터 무결성을 일부 희생하고 조회 성능을 높이는 설계 기법
    1. ERD 작성 시 관계의 선택성(Optionality) 표시 방법 ✅
    • 점선과 실선으로 표시
    • 선택성은 “점선(선택적)”과 “실선(필수적)”으로 표현하며, 관계 참여 여부를 의미

2025/11/13

    1. 관계형 데이터베이스(RDBMS)의 특징 ✅
    • 데이터의 무결성을 보장
    • 릴레이션은 행과 열로 구성
    • 릴레이션 간 관계는 외래키로 표현
    1. 개체 무결성(Entity Integrity)에 대한 설명 ✅
    • 기본키는 NULL 값을 가질 수 없다
    • 개체 무결성은 기본키 = NULL 불가 + 중복 불가.
    • 외래키는 NULL 값을 가질 수 있다.(선택적 관계)
    1. 도메인(Domain)의 정의 ✅
    • 속성이 가질 수 있는 값의 범위
    • 속성의 값이 될 수 있는 유효한 범위
    1. 정규화의 목적 ✅
    • 데이터 중복 제거
    • 이상 현상 제거
    • 데이터 구조 안정화
    • 정규화는 저장 공간을 감소시키는 방향
    1. 제3정규형(3NF) ✅
    • 모든 결정자가 후보키이다
    • 이행적 함수 종속을 제거
    • 2NF: 부분 함수 종속 제거
    1. ERD의 필수 요소 ✅
    • 엔터티 / 속성 / 관계
    1. 식별자(Identifier) 선정 기준 ✅
    • 업무적으로 의미 있는 값이어야 한다
    • 식별자는 업무적 의미, 유일성 , 불변성이 중요
    1. 데이터 모델링의 3단계 ✅
    • 표준적인 모델링 절차는 개념 → 논리 → 물리
    1. 엔터티(Entity)의 특징✅
    • 반드시 속성을 가진다
    • 두 개 이상의 인스턴스를 가진다
    • 업무에서 필요로 하는 정보다
    1. 엔터티 타입을 분류할 때 기준이 되는 것 ✅
    • 발생 시점 / 유무형 개념 / 업무 규칙
    1. 기본키의 조건 ✅
    • 유일성 / 최소성 / 불변성
    1. 식별자 선정 기준 ✅
    • 자주 변경되지 않아야 한다
    • 단순해야 한다
    • NULL이 없어야 한다
    • 중복 X
    1. 정규화의 목적 ✅
    • 데이터 중복 감소
    • 이상 현상 방지
    • 무결성 향상
    1. 결정자(Determinant)의 정의 ✅
    • 다른 속성 값을 결정하는 속성
    1. 슈퍼타입–서브타입 모델링에서 서브타입 분리 기준 ✅
    • 공통 속성 / 배타적 속성 / 개별 행위
    1. 관계(Relationship)의 참여도(Cardinality)를 의미하는 것 ✅
    • 1:1, 1:N, M:N 관계
    1. 외래키(FK)의 역할 ✅
    • 참조 무결성 유지 / 부모 테이블의 기본키 참조 / null 가능
    1. ERD 구성요소 ✅
    • 엔터티 / 속성 / 관계
    1. 도메인(Domain)의 정의 ✅
    • 속성 값이 가질 수 있는 범위
    1. 업무 규칙(Business Rule) ✅
    • 업무 제약 조건
    • 엔터티 발생 조건
    • 값의 허용 범위
    1. 정규화의 가장 큰 목적은? ✅
    • 이상 현상 제거
    1. 약(Weak) 엔터티의 특징 ✅
    • 강한 엔터티의 식별자 필요
    1. 1NF 조건 ✅
    • 원자값 / 반복 속성 제거 / 다중값 제거
    1. BCNF가 3NF보다 더 엄격한 이유 ✅
    • 모든 결정자가 후보키여야 해서
    1. 논리 모델링 단계에서 주로 수행하는 작업 ✅
    • 테이블/컬럼 상세 정의

2과목

2025/11/12

    1. 다음 SQL의 실행 결과 ✅
    • 부서별로 인원 수를 집계하고, 인원이 5명 이상인 부서만 출력
    • GROUP BY는 부서별 집계, HAVING은 집계 결과에 조건을 부여
SELECT dept, COUNT(*) 
FROM emp 
GROUP BY dept 
HAVING COUNT(*) >= 5;
    1. WHERE 절과 HAVING 절의 차이점 ✅
    • WHERE은 그룹 전 필터링, HAVING은 그룹 후 필터링
    • WHERE은 행 단위 필터링, HAVING은 GROUP BY 이후 집계 결과 필터링
    1. 다음 SQL의 결과 ✅
    • 평균 급여보다 높은 급여를 받는 직원 목록
    • 서브쿼리가 먼저 실행되어 평균 급여를 구하고, 그보다 높은 행만 출력
SELECT name, salary 
FROM employee 
WHERE salary > (SELECT AVG(salary) FROM employee);
    1. INNER JOIN과 OUTER JOIN의 차이 ✅
    • INNER JOIN은 양쪽 테이블 모두 매칭되는 행만, OUTER JOIN은 한쪽에 없는 값도 포함
      • LEFT OUTER JOIN은 왼쪽 기준
      • RIGHT OUTER JOIN은 오른쪽 기준
      • FULL OUTER JOIN은 둘 다 포함.
    1. NULL 처리 관련 올바른 SQL ✅
    • NULL 값을 0으로 대체하여 출력
    • Oracle의 NVL, MySQL의 IFNULL, SQL 표준의 COALESCE 함수로 NULL을 대체
SELECT NVL(comm, 0) FROM emp;
    1. 인덱스(Index)의 효과 ✅
    • 검색 속도 향상
    • 인덱스는 검색 속도를 향상, 데이터 변경(INSERT/UPDATE/DELETE)은 느려질 수 있다.
    1. 아래 쿼리의 실행 순서 ✅
  • from
    • where
      • group by
        • having
          • select
            • order by
  • SQL 논리적 실행 순서는 물리적 순서와 다르며, SELECT는 거의 마지막에 실행
SELECT dept, COUNT(*) 
FROM emp 
WHERE job = 'SALESMAN'
GROUP BY dept 
HAVING COUNT(*) >= 2
ORDER BY dept;
    1. 서브쿼리(Subquery)의 종류 중 "상관 서브쿼리(Correlated Subquery)"란? ✅
    • 메인 쿼리의 각 행마다 서브쿼리가 반복 실행되는 형태
    • 상관 서브쿼리는 메인쿼리 컬럼을 참조하므로, 메인쿼리 행 수에 따라 반복 실행
    1. 집합연산자(UNION, INTERSECT, MINUS)의 특징 ✅
    • UNION은 중복 제거
    • UNION ALL은 중복 허용
    • INTERSECT는 교집합
    • MINUS는 오름차순 정렬을 반드시 수행하지 않는다(X)
      • 집합연산자는 결과를 기본적으로 정렬하지만, DBMS에 따라 옵티마이저가 정렬을 생략 가능
    1. 인라인 뷰(Inline View)의 장점 ✅
    • SQL 문 안에서만 임시로 뷰처럼 사용 가능하다
    • 인라인 뷰는 쿼리 내부에서만 유효한 임시 결과 집합으로, 복잡한 서브쿼리를 단순화하는 데 유용
    1. BETWEEN 연산자 사용 예시 ✅
    • salary BETWEEN 5000 AND 10000
    • BETWEEN은 “A 이상 B 이하” 범위를 의미(작은 값 -> 큰 값)
    1. SQL의 결과 ✅
    • 부서별로 중복되지 않는 직무(job)의 개수를 출력
    • DISTINCT는 중복 제거, COUNT는 개수를 센다.
SELECT deptno, COUNT(DISTINCT job)
FROM emp
GROUP BY deptno;
    1. LIKE 연산자에서 와일드카드 _ 의 의미 ✅
    • 단일 문자 대체
    • _ 는 한 글자, % 는 여러 글자를 대체
    1. 서브쿼리 결과가 여러 행을 반환할 때 사용해야 하는 연산자 ✅
    • IN은 여러 값을 비교할 때 사용하며, =은 단일 값 비교만 가능
    1. 다음 SQL의 실행 결과 ✅
    • 부서별 급여 합계를 내림차순으로 정렬한 결과
    • GROUP BY로 집계 후, ORDER BY로 정렬.
SELECT deptno, SUM(salary) 
FROM emp 
GROUP BY deptno 
ORDER BY SUM(salary) DESC;
    1. EXISTS 연산자의 특징 ✅
    • 서브쿼리의 결과가 존재하면 TRUE를 반환한다
    • EXISTS는 서브쿼리의 결과 존재 여부를 Boolean으로 반환
    1. CASE문을 활용한 올바른 SQL ✅
    • 급여 수준에 따라 등급을 분류한 결과
    • CASE는 조건 분기문으로, IF-ELSE와 유사하게 작동한다.
SELECT name,
       CASE WHEN salary >= 5000 THEN 'HIGH'
            WHEN salary >= 3000 THEN 'MID'
            ELSE 'LOW' END AS grade
FROM emp;
    1. 집계함수 중 NULL 값을 제외하고 평균을 계산하는 함수 ✅
    • AVG()는 NULL 값을 자동으로 제외하고 평균을 계산
    1. SQL의 결과를 설명 ✅
    • 부서별로 급여 순위를 매긴 결과
    • 윈도우 함수 RANK()는 PARTITION BY로 그룹을 나누고, ORDER BY로 순위를 매긴다.
SELECT deptno, job, RANK() OVER(PARTITION BY deptno ORDER BY salary DESC)
FROM emp;
    1. 뷰(View)에 대한 설명 ✅
    • 뷰는 하나 이상의 테이블을 기반으로 하는 논리적 가상 테이블
    • 뷰는 물리 데이터가 아닌 SQL 결과를 논리적으로 보여주는 객체이며, 일부는 수정 가능
    1. SQL의 결과 ✅
    • 부서별·직무별 집계 + 부서별 소계 + 전체 합계까지 출력
    • ROLLUP은 다단계 집계를 수행한다. (GROUPING SETS의 축약형)
SELECT deptno, job, COUNT(*)
FROM emp
GROUP BY ROLLUP(deptno, job);
    1. SQL의 결과 ✅
    • 각 직무별 인원수와 전체 인원수를 함께 출력
    • UNION은 두 SELECT 결과를 합쳐 중복을 제거하며, UNION ALL은 중복 포함.
SELECT job, COUNT(*)
FROM emp
GROUP BY job
UNION
SELECT 'TOTAL', COUNT(*)
FROM emp;
    1. SQL의 결과 ✅
    • 입사일이 빠를수록 낮은 순위(1부터)로 부여
    • RANK()는 순위를 매기되 동점이 있으면 같은 순위, 이후 순위는 건너뛴다.
SELECT empno, deptno, RANK() OVER(ORDER BY hiredate) AS hire_rank
FROM emp;
    1. ROWNUM을 이용해 상위 5개 데이터를 출력하려면 ✅
    • ROWNUM은 SELECT 출력 순서 기준으로 붙는다.
    • 정렬 후 순번을 매기려면 인라인뷰 안에 ORDER BY를 먼저 넣어야 한다.
SELECT *
FROM emp
WHERE ROWNUM <= 5;
    1. SQL의 결과 ✅
    • 부서별, 직무별, 부서+직무별, 전체합계까지 모든 조합의 집계를 수행
    • CUBE는 가능한 모든 조합의 그룹핑을 수행하는 다차원 집계 함수
SELECT deptno, job, SUM(salary)
FROM emp
GROUP BY CUBE(deptno, job);
    1. DELETE와 TRUNCATE의 차이점 ✅
    • DELETE는 로그 기록, TRUNCATE는 최소 로그 기록
    • TRUNCATE는 DDL로서 전체 삭제 시 빠르지만, 로그가 최소만 남고 WHERE 절을 사용할 수 없다.
    1. 서브쿼리 중첩이 가장 깊은 형태 ✅
    • 상관 서브쿼리
    • 상관 서브쿼리는 메인쿼리의 각 행마다 반복적으로 실행되므로 가장 깊은 형태로 간주
    1. ANY와 ALL 연산자의 차이 ✅
    • ANY는 하나라도 맞으면 TRUE, ALL은 모든 값이 맞아야 TRUE
    1. 뷰(View)에 대한 설명 ✅
    • 뷰는 기본 테이블을 기반으로 생성
    • 뷰를 이용해 데이터 접근 권한을 제한 가능
    • 뷰는 논리적 테이블이다
    • 단일 테이블 기반 단순 뷰는 수정 가능하지만, 조인·집계 포함 뷰는 일반적으로 수정 불가
      • 항상 수정 가능 X
    1. 트랜잭션(Transaction)의 특성 ✅
    • ACID(Atomicity, Consistency, Isolation, Durability)

2025/11/13

SELECT dept, COUNT(*)
FROM emp
GROUP BY dept
HAVING COUNT(*) >= 5;
    1. GROUP BY + HAVING ✅
    • 부서별 직원 수가 5명 이상인 부서를 조회한다
    • GROUP BY dept → 부서별 그룹
    • HAVING COUNT(*) >= 5 → 집계 조건
    • COUNT = 집계함수 -> 집계함수는 WHERE에서 사용 불가
    1. 연관 서브쿼리의 특징 ✅
    • 외부 쿼리의 한 행마다 반복 실행됨
    • 연관 서브쿼리 = 외부 쿼리 행마다 실행되는 반복 구조.
    1. INNER JOIN의 정의 ✅
    • 조인 조건에 맞는 행만 조회
    • INNER JOIN: 조건 일치하는 행만
    • LEFT JOIN: 왼쪽 우선
    • RIGHT JOIN: 오른쪽 우선
    1. 인덱스에 대한 설명 ✅
    • 검색 속도를 빠르게 한다
    • DML 작업 시 부하가 증가한다
    • 카디널리티가 높을수록 효율적이다
    • 모든 컬럼에 인덱스를 만들면
      • 저장 공간 증가 / INSERT 성능 저하 -> 즉, 선택적으로 사용
    1. SELECT COUNT(DISTINCT dept) FROM emp;
    • 부서 종류의 개수를 센다
    1. ORDER BY 실행 순서 ✅
    • 1 FROM
      • 2 WHERE
        • 3 GROUP BY
          • 4 HAVING
            • 5 SELECT
              • 6 DISTINCT
                • 7 ORDER BY
    1. Oracle에서 NVL(col, 0)의 역할 ✅
    • NULL 값을 0으로 치환한다
    • NVL은 NULL을 특정 값으로 변환하는 함수.
SELECT COUNT(*)
FROM emp
WHERE deptno = 10;
    1. SQL의 결과 ✅
    • 부서 10번의 직원 수
    1. GROUP BY 사용 조건 ✅
    • GROUP BY에 나온 컬럼은 SELECT에도 있어야 한다
    1. HAVING 절이 필요한 이유 ✅
    • 집계 후 조건 필터링
    1. INNER JOIN ✅
    • 조건 만족 행만 출력
    1. SELECT deptno FROM emp HAVING COUNT() > 5; 틀린 이유 ✅
    • HAVING은 GROUP BY 없이 단독 사용 불가(집계 함수도 없음).
    1. DISTINCT가 적용되는 범위 ✅
    • 전체 SELECT 리스트
    1. LIKE ‘A%’ 의미 ✅
    • A로 시작하는 값
    1. 인덱스가 효과적인 컬럼 ✅
    • 카디널리티가 높은 컬럼
    1. 서브쿼리의 특징 ✅
    • SELECT 절에서 사용 가능
    • WHERE 절에서 사용 가능
    • FROM 절에서 사용 가능
    • FROM 절 서브쿼리는 가상 테이블처럼 사용 가능.
    1. NVL 함수 역할 ✅
    • NULL을 특정 값으로 치환
    1. OUTER JOIN에서 NULL 발생하는 곳 ✅
    • 매칭되지 않는 행이 있는 쪽
    1. ORDER BY 실행 순서 ✅
    • 마지막
    1. BETWEEN 사용 시 포함 범위 ✅
    • 양쪽 포함
    1. CROSS JOIN ✅
    • 곱집합(Cartesian Product)
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno
ORDER BY 2 DESC;
    1. SQL 결과 ✅
    • 부서별 평균 급여를 내림차순 정렬
    1. 실행 순서 ✅
    • FROM → WHERE → SELECT
    1. EXISTS의 특징 ✅
    • 존재 여부만 검사
    1. UPDATE 문법에서 WHERE를 생략하면? ✅
    • 모든 행 변경
    1. DELETE와 TRUNCATE 차이 ✅
    • DELETE는 한 행씩 삭제

최빈출

2025/11/12

    1. 정규화(Normalization)의 가장 큰 목적
    • 중복 최소화 및 이상(Anomaly) 제거
    • 정규화는 데이터 중복을 제거해 삽입·삭제·갱신 이상을 방지
    1. 제1정규형(1NF)의 정의
    • 모든 속성이 원자값을 가진다
    • 각 속성은 더 이상 분해되지 않는 단일값(Atomic value)을 가져야 한다.
    1. 제3정규형(3NF)에서 제거되는 종속성
    • 이행적 함수 종속
    • 3NF는 비주요 속성이 비주요 속성에 종속되는 것(이행적 종속)을 제거
    1. 식별자(Primary Key)의 주요 조건
    • 유일성 / 최소성 / 존재성
    • 좋은 식별자는 변경 가능성이 낮고, 항상 존재하며, 유일해야 한다.
    1. 엔터티 간 관계에서 “1:N 관계”의 외래키는 어디에 존재
    • N쪽 엔터티 / 외래키는 항상 ‘N’쪽, 즉 종속(자식) 엔터티에 존재
    1. 비식별자 관계(Non-Identifying)의 특징
    • 부모의 PK가 자식의 일반 속성으로 들어간다
    • 비식별자 관계는 부모와 독립적이며, 외래키가 자식의 일반 속성으로 들어간다.
    1. SQL의 실행 순서
    • FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
    1. 집계함수 COUNT(*)의 의미
    • NULL을 포함한 전체 행 수
    1. NULL 비교
    • WHERE col IS NULL
    • NULL은 비교 연산자로 비교 불가, 반드시 IS NULL 또는 IS NOT NULL을 사용해야 한다
    1. 서브쿼리(Subquery)의 정의
    • SELECT문 내부에 포함된 SELECT문
    • 서브쿼리는 다른 쿼리 내부에 포함되어 부분 결과를 전달
    1. 상관 서브쿼리(Correlated Subquery)의 특징
    • 메인쿼리의 각 행마다 반복 실행
    • 상관 서브쿼리는 메인쿼리 컬럼을 참조하여 매 행마다 실행된다.
    1. JOIN 연산 중 INNER JOIN의 의미
    • 두 테이블 모두 존재하는 행만 반환
    • INNER JOIN은 양쪽 모두 일치하는 행만 출력
    1. LEFT OUTER JOIN의 결과
    • 왼쪽 테이블의 모든 행 + 일치하는 오른쪽 행
    • LEFT JOIN은 왼쪽 기준, 일치하지 않으면 오른쪽은 NULL로 표시
    1. DISTINCT 키워드
    • 중복을 제거하고 유일한 값만 반환
    1. ORDER BY salary DESC, name ASC
    • 급여 내림차순, 이름 오름차순
    1. UNION과 UNION ALL의 차이점
    • UNION은 중복 제거, UNION ALL은 중복 포함
    • UNION은 중복 제거로 인해 정렬이 수행되어 느리며, UNION ALL은 빠르지만 중복 허용.
    1. 인덱스(Index)의 장점
    • 검색 속도 향상
    • 인덱스는 검색 성능을 향상시키지만, DML(INSERT/UPDATE/DELETE) 시 오히려 느려질 수 있다.
    1. 트랜잭션(Transaction)의 4대 특성
    • Atomicity, Consistency, Isolation, Durability
    • 원자성, 일관성, 격리성, 지속성.
    1. ROLLBACK 명령의 기능
    • 변경 사항 취소
    • ROLLBACK은 커밋되지 않은 변경 사항을 되돌린다. (UNDO)
# 20 
SELECT dept, COUNT(*) 
FROM emp 
GROUP BY dept 
HAVING COUNT(*) > 5;

# 부서별 인원수가 5명 초과인 부서만 출력
## WHERE은 그룹 전 필터링, HAVING은 그룹 후 집계 결과 필터링이다.


profile
안녕하세요.

0개의 댓글