1. DML

  • 참조 무결성 옵션
    CASCADE : 부모 삭제 시 자식도 함께 삭제
    SET NULL : 부모 삭제 시 자식 FK 값을 NULL로 변경
    RESTRICT : 자식 테이블에 참조하는 행이 없을 경우에만 부모 삭제 허용
    AUTOMATIC : 부모에 PK가 없으면 자동으로 부모 행 먼저 삽입
    DEPENDENT : 부모 테이블에 PK가 존재할 때만 자식 행 입력 허용
  • DISTINCT
    • 중복 데이터는 1건으로 취급
    • 여러 컬럼이 올 경우 → 주어진 컬럼 값이 모두 동일한 행들만 중복 처리
  • NOT NULL 컬럼에 INSERT 시 값 미지정 → 오류 발생! (✕ 자동 NULL 입력 아님)
  • DELETE / TRUNCATE / DROP 비교
    구분 DELETE TRUNCATE DROP
    분류 DML DDL DDL
    롤백 가능 불가
    (auto commit)
    불가
    (auto commit)
    속도 느림 빠름 빠름
    테이블 구조 유지 유지(테이블 값 지움) 삭제(테이블 삭제)

2. TCL - 트랜잭션 특징 (ACID)

  • 원자성(Atomicity): All or Nothing - 전부 실행되거나 전부 실행되지 않아야 함
  • 일관성(Consistency): 실행 전 정상이면 실행 후에도 정상 상태 유지
  • 고립성(Isolation): 실행 중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 안 됨
  • 지속성(Durability): 성공적으로 수행되면 갱신 내용은 영구적으로 저장

3. DDL

  • 제약조건 문법
    CONSTRAINT 이름 PRIMARY KEY (컬럼명)
    REGR_NO NUMBER(10) → NULL 허용 (기본값)
    REGR_NO NUMBER(10) NOT NULL → NULL 불가
  • SQL Server ALTER COLUMN: 한 번에 하나의 컬럼만 변경 가능 (여러 컬럼 동시 수정 불가!)
    ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30)
    NOT NULL
    ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;
    
    ALTER TABLE 기관분류 ALTER COLUMN (분류명 VARCHAR(30), 
    등록일자 DATE NOT NULL);
    => 여러개 컬럼 동시 수정 불가능!


  • 테이블 생성 시 주의사항
    • 컬럼 뒤 데이터 유형 반드시 지정 (o)
    • 예약어는 테이블명/컬럼명으로 사용 불가 (x)
    • 테이블명은 단수형 사용 (복수형 x)
  • 외래키(FK)
    • FK는 NULL을 가질 수 있다. (o NULL 값허용)
    • FK는 참조 무결성 제약을 받을 수 있다. (○)
  • 각 행을 유일하게 식별할 수 있는 속성 또는 집합 → 후보키
    다른 테이블 기본키 참조 키워드 → REFERENCES (외래키)
    인위적 식별자 → 대리키(Surrogate Key)
  • 컬럼 삭제: ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
  • Oracle DDL 특징: DDL 실행 시 묵시적 COMMIT 자동 수행
    SQL Server는 DDL도 트랜잭션 내에서 롤백 가능

4. DCL

  • REVOKE로 권한 취소 시 → WITH GRANT OPTION으로 다른 사용자에게 부여한 권한도 연쇄적으로 모두 취소

 

 

1. 서브쿼리

  • 단일행 서브쿼리: 결과가 1개 행 반환 → 비교 연산자(=, <, > 등) 사용 가능
  • 다중행 서브쿼리: 결과가 여러 행 반환 → 일반 비교 연산자 사용 불가, IN / ALL / ANY 사용
    ※ 다중행 비교 연산자(ALL, ANY)는 단일행 서브쿼리에도 사용 가능 단, 단일행 비교 연산자는 다중행 서브쿼리에 사용 불가!
  • 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용할 수 있다. (○)
  • 복수행 결과에 =, <=, >= 사용 가능? (✕) → IN, ALL, ANY 사용
  • 다중 칼럼 서브쿼리 → SQL Server는 지원하지 않는다. (✕)
  • 연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위한 목적? (✕) → 비연관 서브쿼리가 메인쿼리에 값 제공. 연관 서브쿼리는 메인쿼리 값을 받아 필터링
  • 뷰(VIEW)
    • 테이블 구조 변경 시 응용 프로그램도 변경해야 한다? (✕) → 독립성으로 불필요
    • 뷰 사용 장점: 독립성 / 편리성 / 보안성

2. 집합 연산자

  • UNION: 중복 행을 하나로 합쳐서 반환
  • UNION ALL: 중복 행도 그대로 모두 포함하여 반환
  • UNION 사용 시 각 집합에 GROUP BY 사용 가능 (o)
  • UNION 사용 시 각 집합에 ORDER BY 사용 가능? (x)
    → ORDER BY는 최종 결과 마지막 줄에 한 번만 사용 가능
  • INTERSECT 동치 변환 INTERSECT
    → NOT EXISTS (MINUS 변환)
    → IN (서브쿼리) → 중복 주의!
    → INNER JOIN → 중복 주의!
  • 순위 함수 RANK: 동순위 건너뜀 (1,1,3,3,5)
    DENSE_RANK: 동순위 안 건너뜀 (1,1,2,2,3)
    ROW_NUMBER: 무조건 고유 번호 (1,2,3,4,5)
    PERCENT_RANK: 0~1 사이 값
    CUME_DIST: 누적 분포, 0~1 사이 값
    NTILE(N): N등분 구간 번호 부여
    RATIO_TO_REPORT: 그룹 내 합계 대비 비율
    ※ 1,1,2,2,3,3,4,4,5,5 패턴 → NTILE(5)!
    ※ NTILE은 순위가 아닌 구간 번호 부여 (DENSE_RANK와 혼동 주의)

 


3. 그룹 함수

GROUPING SETS(A,B) = (A), (B)
ROLLUP(A,B) = (A,B), (A), ()
ROLLUP((A,B)) = (A,B), ()
CUBE(A,B) = (A,B), (A), (B), ()


4. 윈도우 함수

  • SUM + ORDER BY 있으면 → 누적합!
    SUM(급여) OVER (PARTITION BY 부서코드) → 부서 전체합
    SUM(급여) OVER (PARTITION BY 부서코드 ORDER BY 사원번호) → 부서 내 누적합
  • 윈도우 함수 처리로 결과 건수가 줄어든다? (x) → 결과 건수 변화 없음

5. TOP N 쿼리

  • TOP(N): 무조건 N행만 반환
  • TOP(N) WITH TIES: N위와 동점이면 함께 추가 출력 (ORDER BY 필수)

6. 계층형 질의와 셀프 조인

  • ORDER SIBLINGS BY: 형제 노드 사이 정렬 지정 구문 (o)
  • 순방향 전개: 부모 노드 → 자식 노드 방향 (o)
  • 루트 노드의 LEVEL 값은 0이다? (x) → LEVEL 값은 1

1. 정규화

  • 후보키
    • 모든 속성을 결정할 수 있어야 함
    • 예: AB → CDE 이면 AB가 후보키
  • 정규형 종류
    • 제1정규형: 모든 속성은 반드시 하나의 값(원자값)만 가져야 한다.
    • 제2정규형: 일반속성은 주식별자 전체에 종속되어야 한다. (부분 종속 제거)
      * 복합식별자의 일부에만 종속 → 제2정규화 만족 x → 분리 필요
    • 제3정규형: 일반속성 간에는 서로 종속적이지 않아야 한다. (이행적 종속 제거)

  • 정규화를 수행하면 조회 성능을 보장받을 수 있다? (x)
    → 정규화로 인해 오히려 조회 성능이 저하될 수 있다.
  • 제3정규형을 만족하는 엔터티의 일반속성은 주식별자 전체에 종속적이다. (○)
  • 반정규화는 성능을 위해 데이터 중복을 허용하지만, 성능 향상을 항상 보장하지는 않는다. (○)
  • 빈칸 문제
    Q. 어떤 릴레이션 R이 ( ① )이고, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 ( ② )에 속한다.
    → ① 제2정규형 ② 제3정규형
    Q. 일반속성은 주식별자 전체에 종속적이어야 한다:  (    )
    → 제2정규형
    Q. 정규화는 (     ) 데이터 모델의 일관성을 확보하고 중복을 제거한다.
    → 논리
  • 칼럼에 반복적인 속성값을 갖는 형태 → 속성의 원자성 위반 → 제1정규화 대상
  • 한 속성에 여러 값이 오는 경우 → 제1정규화 미충족

2. 관계와 조인의 이해

  • 부모 식별자 → 자식의 일반속성으로 상속: 비식별 관계
  • 부모 식별자 → 자식의 식별자에 포함: 식별 관계
  • 관계를 맺는다 = 식별자를 상속시키고, 해당 식별자를 매핑 키로 활용해 데이터를 결합하겠다는 의미

3. 트랜잭션의 이해

  • A와 B가 반드시 모두 수행되거나 모두 수행되지 않아야 할 때
    • 각각 커밋? (x) → A와 B는 하나의 트랜잭션으로 묶어 처리, 커밋은 모두 수행 후 최종 1회
    • A까지만 수행 후 장애 발생 → A를 UNDO 처리

4. NULL 속성의 이해

  • NULL은 아직 정의되지 않은 값 - 0(숫자), 공백(문자)과 다른 개념
  • NULL과 숫자 크기 비교 결과는 NULL이다? (✕) → UNKNOWN
  • NULL = NULL 결과는 True? (x) → UNKNOWN (비교 시 IS NULL 사용)
  • 집계 함수 계산 시 NULL은 0으로 처리된다? (x) → 계산에서 제외됨

5. 본질식별자 vs 인조식별자

  • 인조식별자를 사용하면 중복 데이터를 막기 어려워진다. (○)
  • 인조식별자는 되도록 사용하는 것이 바람직하다? (x) → 필요한 경우에만 사용
  • 인조식별자 사용 시 본질식별자 대비 추가 인덱스가 필요해진다. (○)

1. 데이터 모델의 이해

  • 모델링
    • 모델링은 단지 시스템 구현만을 위한 작업이 아니다! (✕)
  • 모델링 특징 3가지
    • 단순화, 추상화, 명확화
  • 데이터 모델링의 목적
    • 업무 정보를 구성하는 기초 정보들을 일정한 표기법으로 표현
    • 실제 DB를 생성하여 개발 및 데이터 관리에 사용하기 위한 것 ⇒ 단지 DB 구축만을 위한 것이 아님
  • 데이터 모델링의 유의점
    • 중복, 비유연성, 비일관성 ⇒ 테이블 간 연계성을 높인다? (✕)
  • 스키마 3단계
    • 외부 스키마: 여러 사용자 관점
    • 개념 스키마: 통합된 모든 사용자 관점
    • 내부 스키마: 물리적 저장 구조 표현
    • 외부 단계 ↔ 개념적 단계: 논리적 데이터 독립성 고려 단계
  • 도메인: 엔터티 내 속성이 가질 수 있는 값의 범위, 데이터 타입, 크기, 제약사항을 지정
  • 관계 표기법 3요소: 관계명, 관계차수, 선택성(선택사항)

2. 엔터티

  • 엔터티 조건
    • 2개 이상의 속성, 2개 이상의 인스턴스로 구성
    • 다른 엔터티와 최소 한 개 이상의 관계가 있어야 함
  • 발생 시점에 따른 엔터티 구분
    • 기본(키) 엔터티, 중심 엔터티, 행위 엔터티
  • 엔터티 이름 부여 방법
    • 단수명사 사용, 약어 사용 금지, 유일성 확보
  • 물리적 독립성: 파일 저장 구조의 변경이 논리 스키마와 응용 프로그램에 영향을 주지 않는 성질

3. 속성

  • 기본 속성: 업무 분석을 통해 바로 정의한 속성
  • 설계 속성: 업무상 존재하지 않지만 설계 중 도출한 속성
  • 파생 속성: 다른 속성으로부터 계산·변형되어 생성되는 속성 (조회 성능 향상 목적)
  • 1개의 속성은 1개의 속성값만 가진다.(인스턴스에서 관리하고자 하는 최소 데이터 단위: 속성)

4. 관계

  • 관계 표기법
    • 관계명: 관계의 이름
    • 관계차수: 1:1, 1:M, M:N 등
    • 관계선택사항: 필수관계, 선택관계
  • 두 엔터티 간 관계 도출 시 확인 사항
    • 연관 규칙이 존재하는가?
    • 정보의 조합이 발생하는가?
    • 규칙이 서술되어 있는가?
    • 동사(명사 X)가 있는가?
  • 연관관계: 소스코드에서 멤버변수로 선언하여 사용
  • 의존관계: 오퍼레이션에서 파라미터 등으로 이용

5. 식별자

  • 주식별자의 특징 4가지
    • 유일성: 각 인스턴스를 유일하게 구분
    • 최소성: 유일성을 만족하는 최소 속성 수로 구성
    • 불변성: 한 번 지정되면 값이 변하지 않아야 함
    • 존재성: 지정 시 반드시 값이 있어야 함 (NULL 불가)
  • 식별자 종류 분류 기준
    • 대표성 여부: 주식별자 / 보조식별자(대표성 없음)
    • 생성 위치: 내부식별자 / 외부식별자(상속)
    • 속성 수: 단일 식별자 / 복합 식별자
    • 대체 여부: 본질 식별자(업무적 의미) / 인조 식별자(일련번호 등)
  • 명칭, 내역 같은 이름 속성은 주식별자로 적절하지 않음 (특히 사람 이름 → 동명이인 문제, 유일성 미보장)
  • SQL 조인 관계를 최소화하려면 → 식별자 관계로 연결
  • 도메인: 속성이 가질 수 있는 값의 범위

+ Recent posts