6.1 기본키와 외래키

(1) 기본키

  • 개체 무결성 규칙(튜플들은 중복 X) 을 구현하는 수단이다.

  • 기본키 컬럼은 NULL값이 저장될 수 없다.

  • 튜플의 고유성을 식별하는 기준이 되는 컬럼

    후보키는 기본키가 될 수 있는 기본키가 될 수 있는 자격이 있는 컬럼이고 기본키로 선정되지 못한 다른 후보키들을 대체키라고 한다.

    여러 개의 컬럼이 모여서 기본키 역할을 하는 경우를 복합키라고 하고 하나의 칼럼이 기본키 역할을 하는 경우를 단순키라고 한다.

(2) 외래키

  • 참조 무결성 규칙(연관된 두 테이블은 저장된 데이터 사이에 일관성을 유지)을 구현하는 수단이다.

  • NULL을 포함할 수 있다.

  • 참조 되는 테이블을 부모 테이블, 참조하는 테이블을 자식 테이블

  • 자식 테이블 쪽에 있는 컬럼이 외래키이다.

  • 자식 테이블의 외래키가 부모 테이블의 기본키와 연결된다.

    <무결성을 지키기 위한 조치 방법>

1) RESTRICT: 삭제하거나 변경하려는 부모 테이블의 튜플을 참조하는 자식 테이블의 튜플이 있으면 삭제/변경을 하지 못하도록 막는다.

2) CASCADE: 자식 테이블의 튜플도 함께 삭제하거나 변경한다.

3) NULLIFY: 그 튜플의 외래키 컬럼 값을 NULL로 변경

6.2 조인 연산

(1) 기본 조인 연산

SELECT emp.ename, dept.dname, dept.loc
FROM emp, dept    --연결 대상 테이블 목록
WHERE emp.deptno = dept.deptno;   --두 테이블의 튜플 연결 조건

조인 연산이 필요한 경우는 반드시 WHERE절에 조인 조건을 포함해야 한다.

(2) 테이블 이름 대신 별칭 붙여 사용하기

SELECT ename, dname, loc
FROM emp e, dept d
WHERE e.deptno = d.deptno;

(3) 다양한 형태의 조인 연산

  • Inner join : 두 테이블의 일치되는 튜플들만을 표시 (일반적 조인)
  • Left outer join : 왼쪽 테이블의 튜플은 모두 표시되고 여기에 대응하는 오른쪽 테이블의 튜플 연결. 오른쪽 튜플에서 연결할 튜플이 없으면 NULL로 표시
    이 문법은 오라클 DBMS에서만 사용 가능
--표준 SQL에서 방법
SELECT T1.code, name, discount
FROM T1 LEFT OUTER JOIN T2 ON T1.code = T2.code;
  • Right outer join : 오른쪽 테이블의 튜플은 모두 표시되고 여기에 대응하는 왼쪽 테이블의 튜플 연결. 왼쪽 튜플에서 연결할 튜플이 없으면 NULL로 표시

  • Full outer join : 왼쪽, 오른쪽 튜플들을 모두 표시. 연결할 튜플이 없는 경우는 NULL로 표시

(4) 셀프 조인
반드시 별칭 사용

SELECT e.ename, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno;
-- NULL 값은 추출 안됨

NULL 값도 추출하고 싶다면 Left join 또는 Right join을 사용

(5) 3개 이상의 테이블 조인
N개의 테이블을 조인하기 위해서는 N-1개의 조인 조건을 AND로 연결하여 서술

6.3 UNION, INTERSECT, MINUS

  • UNION : 두 테이블간의 합집합을 구하는 연산
  • INTERSECT : 두 테이블간의 교집합을 구하는 연산, 공통으로 포함된 튜플을 확인할 때 사용
  • MINUS : 두 테이블간의 차집합을 구하는 연산, 중복을 제외할 때 사용

6.4 중첩 SQL

(1) 중첩 SQL 용어

  • 메인 쿼리와 서브 쿼리
  • 단일값 서브 쿼리와 다중값 서브 쿼리
    단일값 서브 쿼리 : 질의문을 실행한 결과 하나의 값을 반환하는 서브 쿼리
    다중값 서브 쿼리 : 복수의 값을 반환하는 서브 쿼리

(2) 서브 쿼리와 비교 연산자
비교 연산자를 통해 서브 쿼리의 결과와 비교하는 경우는 반드시 서브 쿼리의 결과가 단일값이어야 한다.

(3) 서브 쿼리와 IN (...) , NOT IN (...)

서브 쿼리의 실행 결과가 복수 개의 값이라면 비교 연산자(=) 대신 IN (...) 또는 NOT IN (...) 으로 사용해야 한다.

SELECT ename, job, deptno
FROM emp
WHERE deptno IN (SELECT deptno
				 FROM dept
                 WHERE dname LIKE %'S'%);
SELECT ename, job, sal
FROM emp
WHERE job NOT IN (SELECT job
				  FROM emp
                  WHERE ename = 'SMITH' or ename = 'ALLEN');

📌연습문제

  1. 다음중 기본키에 대한 설명으로 잘못된 것을 고르시오 -
    ⓵ 개체 무결성 규칙을 구현하는 수단이다.
    ⓶ 새로운 튜플이 테이블에 입력될 때 중복성 여부를 체크하는 기준이 된다
    ⓷ 기본키는 하나의 컬럼이어야 한다
    ⓸ 하나의 테이블에 2개 이상의 기본키를 설정할 수 있다.

  2. 튜플의 고유성을 식별하는 기준이 될 수 있는 모든 컬럼 또는 컬럼의 집합을 (후보키)라
    고 한다. 이중 기본키로 지정되지 못한 컬럼 또는 컬럼의 집합을 ( 대체키)라고 한다.

  3. 외래키에 대한 설명으로 잘못된 것을 고르시오 -
    ⓵ 모든 테이블에는 외래키가 있어야 한다.
    ⓶ 외래키는 참조 무결성 규칙을 구현하는 수단이다.
    ⓷ 외래키는 두 테이블의 데이터간에 연관성이 있을 때 설정한다.
    ⓸ 자식 테이블의 외래키는 부모 테이불의 기본키와 연결된다.

  4. 다음은 외래키에 의해서 연결된 두 테이블에서 무결성을 지키기 위한 조치방법의 설
    명이다. 보기에서 알맞은 명칭을 고르시오.
    [보기] ㉠ RESTRICT ㉡ CASCADE ㉢ NULLIFY ㉣ NO ACTION

    (1) 삭제하거나 변경하려는 부모 테이블의 튜플을 참조하는 자식 테이블의 튜플이 있으면 그 튜플의 외래키 컬럼값을 널(NULL)로 변경한다. (㉢ NULLIFY)

    (2) 삭제하거나 변경하려는 부모 테이블의 튜플을 참조하는 자식 테이블의 튜플이 있으면 자식 테이블의 튜플도 함께 삭제하거나 변경한다. (㉠ RESTRICT )

    (3) 삭제하거나 변경하려는 부모 테이블의 튜플을 참조하는 자식 테이블의 튜플이 있으면 삭제/변경을 하지 못하도록 막는다. (㉡ CASCADE)

    (4) 삭제하거나 변경하려는 부모 테이블의 튜플을 참조하는 자식 테이블의 튜플이 있어도 아무 조치도 취하지 않는다. (그 결과 일관성이 깨어진다.) (㉣ NO ACTION )

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN