자격증/정보처리기사

[데이터베이스 구축] 3장. SQL 응용

윤사부 2021. 2. 10. 23:15
728x90

101 SQL의 개념

◈ SQL(Structured Query Language)의 개요

  - 1974년 IBM연구소에서 개발한 SEQUEL에서 유래

  - 국제 표준 데이터베이스 언어

  - 많은 회사에서 관계형 데이터베이스(RDB)를 지원하는 언어로 채택함

  - 관계 대수와 관계 해석을 기초로 한 혼합 데이터 언어

  - 질의어지만 질의 기능 외 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖춤

 

◈ SQL의 분류

 1) DDL(Data Define Language, 데이터 정의어)

  - DDL은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어

  - 논리적 데이터 구조와 물리적 데이터 구조의 사상 정의

  - 데이터베이스 관리자(DBA)나 데이터베이스 설계자가 사용

  - DDL의 세 가지 유형

   * CREATE : SCHEMA, DOMAIN, TABLE, VIEW, INDEX 정의

   * ALTER : TABLE에 대한 정의 변경

   * DROP : SCHEMA, DOMAIN, TABLE, VIEW, INDEX 삭제

 2) DML(Data Manipulation Language, 데이터 조작어)

  - DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어

  - 데이터베이스 사용자와 데이터베이스 관리 시스템(DBMS) 간의 인터페이스 제공

  - DML의 네 가지 유형

   * SELECT : 테이블에서 조건에 맞는 튜플 검색

   * INSERT : 테이블에 새로운 튜플 삽입

   * DELETE : 테이블에서 조건에 맞는 튜플 삭제

   * UPDATE : 테이블에서 조건에 맞는 튜플의 내용 변경

 3) DCL(Data Control Language, 데이터 제어어)

  - DCL은 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어

  - 데이터베이스 관리자가 데이터 관리를 목적으로 사용

  - DCL의 네 가지 유형

   * COMMIT : 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장, 작업이 정상적으로 완료되었음을 알림

   * ROLLBACK : 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구

   * GRANT : 데이터베이스 사용자에게 사용자 권한 부여

   * REVOKE : 데이터베이스 사용자의 사용권한 취소

 

102 DDL

◈ DDL(Data Define Language, 데이터 정의어)의 개념

  - DDL은 데이터베이스를 구축하거나 수정할 목적으로 사용하는 언어

  - DDL은 번역한 결과가 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러 개의 테이블로서 저장

 

◈ CREATE SCHEMA

  - 스키마를 정의하는 명령문

  - 스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자 정의

  - 표기 형식

CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_ID;

※ 스키마 : 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 것

 

◈ CREATE DOMAIN

  - 도메인을 정의하는 명령문

  - 임의의 속성에서 취할 수 있는 값의 범위가 SQL에서 지원하는 전체 데이터 타입의 값이 아니고 일부분일 때, 사용자는 그 값의 범위를 도메인으로 정의할 수 있음

  - 정의된 도메인명은 일반적인 데이터 타입처럼 사용

  - 표기 형식

CREATE DOMAIN 도메인명 [AS] 데이터_타입

[DEFAULT 기본값]

[CONSTRAINT 제약조건명 CHECK(범위 값)];

※ 데이터 타입 : SQL에서 지원하는 데이터 타입

※ 기본값 : 데이터를 입력하지 않았을 때 자동으로 입력되는 값

 

◈ CREATE TABLE

  - 테이블을 정의하는 명령문

  - 표기 형식

CREATE TABLE 테이블명

(속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL],...

[PRIMARY KEY (기본키_속성명)],

[UNIQUE (대체키_속성명)],

[FOREIGN KEY (외래 키_속성명)],

[REFERENCES 참조 테이블(기본키_속성명)],

[ON DELETE 옵션]

[ON UPDATE 옵션]

[CONSTRAINT 제약조건명] [CHECK (조건식)]);)];

  - 기본 테이블에 포함될 모든 속성에 대하여 속성명과 그 속성의 데이터 타입, 기본값, NOT NULL 여부 지정

  - NOT NULL : NOT NULL은 특정 속성이 데이터 없이 비어 있어서는 안 된다는 것을 지정할 때 사용

  - PRIMARY KEY : 기본키를 사용할 속성 또는 속성의 집합을 지정

  - UNIQUE : 대체키로 사용할 속성 또는 속성의 집합을 지정하는 것

  - FOREIGN KEY ~ REFERENCES ~

   * 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래 키 속성 지정

   * 외래 키가 지정되면 참조 무결성 CASCADE 법칙 적용

   * ON DELETE 옵션 : 참조 테이블의 튜플이 삭제되었을 때 기본 테이블에 취해야 할 사항 지정(NO ACTION, CASCADE, SET NULL, SET DEFAULT)

   * ON UPDATE 옵션 : 참조 테이블에 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항 지정(NO ACTION, CASCADE, SET NULL, SET DEFAULT)

   * NO ACTION : 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조치를 취하지 않음

   * CASCADE : 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제

   * SET NULL : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 NULL로 변경

   * SET DEFAULT : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 기본값으로 변경

   * CONSTRAINT : 제약 조건의 이름 지정

   * CHECK : 속성 값에 대한 제약 조건 정의

 

◈ CREATE VIEW

  - 뷰를 정의하는 명령문

  - 표기 형식

CREATE VIEW 뷰명[(속성명[, 속성명, ...])]

AS SELECT문;

  - SELECT문을 서브 쿼리로 사용하여 SELECT문의 결과로써 뷰 생성

  - 서브 쿼리인 SELECT문에는 UNION이나 ORDET BY 절을 사용할 수 없음

  - 속성명을 기술하지 않으면 SELECT문의 속성명이 자동으로 사용

 

◈ CREATE INDEX

  - 인덱스를 정의하는 명령어

  - 표기 형식

CREATE [UNIQUE] INDEX 인덱스명

ON 테이블명(속성명 [ASC | DESC]);

[CLUSTER];

  - UNIQUE

   * 사용된 경우 : 중복 값이 없는 속성으로 인덱스 생성

   * 생략된 경우 : 중복 값이 있는 속성으로 인덱스 생성

  - 정렬 여부 지정

   * ASC: 오름차순 정렬

   * DESC: 내림차순 정렬

   * 생략 : 오름차순 정렬

 

◈ ALTER TABLE

  - 테이블에 대한 정의 변경하는 명령문

  - 표기 형식

ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];

ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];

ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];

- ADD : 새로운 속성(열) 추가

- ALTER : 특정 속성의 기본값(Default) 변경

- DROP : 특정 속성 삭제

 

◈ DROP

  - 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스를 삭제하는 명령문

  - 표기 형식

DROP SCHEMA 스키마명 [CASCADE | RESTRICTED];

DROP DOMAIN 도메인명 [CASCADE | RESTRICTED];

DROP TABLE 테이블명 [CASCADE | RESTRICTED];

DROP VIEW 뷰명 [CASCADE | RESTRICTED];

DROP INDEX 인덱스명 [CASCADE | RESTRICTED];

DROP CONSTRAINT 제약조건명;

  - CASCADE : 제거할 요소를 참조하는 다른 모든 개체를 함께 제거

  - RESTRICT : 다른 개체가 제거할 요소를 참조 중일 때는 제거 취소

 

103 DCL

◈ DCL(Data Control Language, 데이터 제어어)의 개념

  - DCL는 데이터 보안, 무결성, 회복, 병형 제어 등을 정의하는 데 사용하는 언어

  - DCL는 데이터베이스 관리자(DBA)가 데이터 관리를 목적으로 사용

  - DCL에는 GRANT, ROVOKE, COMMIT, ROLLBACK, SAVEPOINT 등이 있음

 

◈ GRANT / REVOKE

  - 데이터베이스 관리자가 데이터베이스 사용자에게 권한을 부여하거나 취소하기 위한 명령어

  - GRANT : 권한 부여를 위한 명령어

  - REVOKE : 권한 취소를 위한 명령어

  - 표기 형식(사용자 등급 지정 및 해제)

GRANT 사용자 등급 TO 사용자_ID_리스트;

REVOKE 사용자 등급 FROM 사용자_ID_리스트;

  - 사용자 등급

   * DBA : 데이터 베이스 관리자

   * RESOURCE : 데이터베이스 및 테이블 생성 가능자

   * CONNECT : 단순 사용자

  - 표기 형식(테이블 및 속성에 대한 권한 부여 및 취소)

GRANT 권한_리스트 ON 테이블명 TO 사용자 [WITH GRANT OPTION];

REVOKE [GRANT OPTION FOR] 권한_리스트 ON 테이블명 FROM 사용자;

  - 권한 종류 : ALL, SELECT, INSERT, DELETE, UPDATE, ALTER 등

  - WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 부여

  - GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소함

  - CASCADE : 권한 취소 시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소

 

◈ COMMIT

  - 트랜잭션이 성공적으로 끝나면 데이터베이스가 새로운 일관성 상태를 가지기 위해 변경된 모든 내용을 데이터베이스에 반영하여야 하는데 이때 사용하는 명령어

  - COMMIT 명령을 실행하지 않아도 DML문이 성공적으로 완료되면 자동으로 COMMIT이 되고 DML이 실패하면 자동으로 ROLLBACK이 되도록 Auto Commit 기능을 설정할 수 있음

 1) Oracle

  - 설정 : set autocommit on;

  - 해제 : set autocommit off;

  - 확인 : show autocommit;

 2) MySQL

  - 설정 : set autocommit = true;

  - 해제 : set autocommit = false;

  - 확인 : select @@autocommit;

 

◈ ROLLBACK

  - 아직 COMMIT 되지 않은 변경된 모든 내용들을 취소하고 데이터베이스를 이전 상태로 되돌리는 명령어

  - 트랜잭션이 성공적으로 끝나지 못하면 일부 변경된 내용만 데이터베이스에 반영되는 비일관성(Inconsistency)인 상태를 가질 수 있기 때문에 일부분만 완료된 트랜잭션은 롤백되어야 함

 

◈ SAVEPOINT

  - 트랜잭션 내에  ROLLBACK 할 위치인 저장점을 지정하는 명령어

  - 저장점을 지정할 때는 이름 부여, ROLLBACK시 저장된 저장점까지 트랜잭션 처리 내용이 취소됨

 

104 DML

◈ DML(Data Manipulation Language, 데이터 조작어)의 개념

  - DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 관리하는 데 사용되는 언어

  - DML의 유형

   * SELECT : 테이블에서 튜플 검색

   * INSERT : 테이블에서 새로운 튜플 삽입

   * DELETE : 테이블에서 튜플 삭제

   * UPDATE : 테이블에서 튜플의 내용 갱신

 

◈ 삽입문(INSERT INTO~)

  - 기본 테이블에 새로운 튜플을 삽입할 때 사용

  - 표기 형식

INSERT INTO 테이블명([속성명1, 속성명2, .....])

VALUES(데이터1, 데이터2, ...);

  - 대응하는 속성과 데이터는 개수와 데이터 유형이 일치해야 함

  - 기본 테이블의 모든 속성을 사용할 때는 속성명을 생략할 수 있음

  - SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있음

 

◈ 삭제문(DELETE FROM~)

  - 기본 테이블에 있는 튜플 중에서 특정 튜플을 삭제할 때 사용

  - 표기 형식

DELETE FROM 테이블명 [WHERE조건]; 

  - 모든 레코드 삭제 시 WHERE절 생략

  - 모든 레코드를 삭제하더라도 테이블 구조는 남아 있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다름

 

◈ 갱신문(UPDATE~ SET~)

  - 기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경할 때 상용

  - 표기 형식

UPDATE 테이블명 SET 속성명 = 데이터, [속성명=데이터, .....] [WHERE 조건];

 

◈ 데이터 조작어의 네 가지 유형

SELECT~ FROM~ WHERE~

INSERT INTO~ VALUES~

DELETE FROM~ WHERE~

UPDATE~ SET~ WHERE~

 

105 DML-SELECT-1

◈ 일반 형식

SELECT  [PREDICATE] [테이블명.]속성명1, [테이블명.]속성명2, ......,

[그룹함수(속성명)],

[WINDOW함수 OVER(PARTITION BY 속성명1, 속성명2, .... ORDER BY 속성명 3, 속성명4,...)]

FROM 테이블명1, 테이블명2, ...

[WHERE 조건]

[GROUP BY 속성명1, 속성명2, ...]

[HAVING 조건]

[ORDER BY 속성명 [ASC | DESC]];

 1) SELECT절

  - PREDICATE : 불러올 튜플 수를 제한할 명령어 기술

   * ALL : 모든 튜플 검색, 주로 생략

   * DISTINCT : 중복된 튜플이 있으면 그중 첫 번째 한 개만 검색

   * DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌 튜플 전체를 대상으로 함

  - 속성명 : 검색하여 불러올 속성 또는 속성을 이용한 수식을 지정

   * 기본 테이블을 구성하는 모든 속성을 지정할 때는 '*'를 기술

   * 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명' 으로 표현

  - AS : 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용

 2) FROM절 : 질의에 의해 검색될 데이터들을 포함하는 테이블명 기술

 3) WHERE절 : 검색할 조건 기술

 4) ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용

  - 속성명 : 정렬의 기준이 되는 속성명 기술

  - [ASC|DESC] : 정렬 방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순, 생략하면 오름차순

 

◈ 조건 연산자

  - 비교 연산자

   * = : 같다

   * <> : 같지 않다

   * > : 크다

   * < : 작다

   * >= : 크거나 같다

   * <= : 작거나 같다

  - 논리 연산자

   * NOT : 반대

   * AND : 그리고

   * OR : 또는

  - LIKE 연산자

   * % : 모든 문자를 대표

   * _ : 문자 하나를 대표

   * # : 숫자 하나를 대표

 

◈ 기본 검색

  - SELECT절에 원하는 속성을 지정하여 검색

  - ex1) <사원> 테이블의 모든 튜플 검색

SELECT * FROM 사원;

SELECT 사원.* FROM 사원;

  - ex2) <사원> 테이블에서 '주소'만 검색하되 같은 '주소'는 한 번만 출력하시오.

SELECT DISTINCT 주소 FROM 사원;

  - ex3) <사원> 테이블의 모든 튜플 검색

SELECT * FROM 사원;

SELECT 사원.* FROM 사원;

 

◈ 조건 지정 검색

  - WHERE 절에 조건을 지정하여 조건에 만족하는 튜플만 검색

  - ex1) <사원> 테이블에서 "기획"부서의 모든 튜플 검색

SELECT * FROM 사원 WHERE 부서='기획';

  - ex2) <사원>테이블에서 "기획"부서에 근무하면서 "대흥동"에 사는 사람의 튜플 검색

SELECT * FROM 사원 WHERE 부서='기획' AND 주소='대흥동';

  - ex3) <사원>테이블에서 '부서'가 "기획"이거나 "인터넷"인 튜플 검색

SELECT * FROM 사원 WHERE 부서='기획' OR 부서='인터넷';

  - ex4) <사원>테이블에서 성이 "김"인 사람의 튜플 검색.

SELECT * FROM 사원 WHERE 이름 LIKE "김%";

  - ex5) <사원>테이블에서 '생일'이 '01/01/69'에서 '12/31/73' 사이인 튜플 검색

SELECT * FROM 사원 WHERE 생일 BETWEEN #01/01/69# AND #12/31/73#;

  - ex6) <사원>테이블에서 '주소'가 NULL인 튜플 검색

SELECT * FROM 사원 WHERE 주소 IS NULL;

 

◈ 정렬 검색

  - ORDER BY 절에 특정 속성을 지정하여 지정된 속성으로 자료를 정렬하여 검색

ex1) <사원>테이블에서 '주소'를 기준으로 내림차순 정렬시켜 검색

SELECT * FROM 사원 ORDER BY 주소 DESC;

ex2) <사원>테이블에서 '부서'를 기준으로 오름차순 정렬, 같은 '부서'에 대해서는 '이름'을 기준으로 내림차순 정렬시켜 검색

SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;

 

◈ 하위 질의

  - 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용

ex1) '취미'가 "나이트댄스"인 사원의 '이름'과 '주소' 검색

SELECT 이름, 주소 FROM 사원 WHERE 이름=(SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');

ex2) 취미활동을 하지 않는 사원들 검색

SELECT * FROM 사원 WHERE 이름 NOT IN(SELECT 이름 FROM 여가활동);

 

◈ 복수 테이블 검색

  - 여러 테이블을 대상으로 검색 수행

ex1) '경력'이 10년 이상인 사원의 '이름', '부서', '취미', '경력' 검색

SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력 FROM 사원, 여가활동

WHERE 여가활동.경력>=10 AND 사원.이름=여가활동.이름;

 

106 DML-SELECT-2

◈ 일반 형식

SELECT [PREDICATE] [테이블명.]속성명1, [테이블명.]속성명2, ......,

[그룹함수(속성명)],

[WINDOW함수 OVER(PARTITION BY 속성명1, 속성명2, .... ORDER BY 속성명 3, 속성명4,...)]

FROM 테이블명1, 테이블명2, ...

[WHERE 조건]

[GROUP BY 속성명1, 속성명2, ...]

[HAVING 조건]

[ORDER BY 속성명 [ASC | DESC]];

  - 그룹 함수 : GROUP BY절에 지정된 그룹별로 속성의 값 집계

   * COUNT(속성명) : 그룹별 튜플 수

   * AVG(속성명) : 그룹별 평균

   * SUM(속성명) : 그룹별 합계

   * AVG(속성명) : 그룹별 평균

   * MAX(속성명) : 그룹별 최대값

   * MIN(속성명) : 그룹별 최소값

   * STDDEV(속성명) : 그룹별 표준편차

   * VARIANCE(속성명) : 그룹별 분산

  - WINDOW 함수 : GROUP BY 절을 이용하지 않고 속성의 값 집계

   * ROW_NUMBER( ) : 윈도 별로 각 레코드에 대한 일련 번호 반환

   * RANK( ) : 윈도우별로 순위 반환, 공동 순위 반영

   * DENSE_RANK( ) : 윈도우별로 순위 반환, 공동 순위 무시하고 순위 부여

  - GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 허용. 그룹 합수와 함께 사용

  - HAVING절 : GROUP BY와 함께 사용, 그룹에 대한 조건 지정

 

◈ WINDOW 함수 이용 검색

  - GROUP BY 절을 이용하지 않고 함수의 인수로 지정한 속성을 범위로 하여 속성의 값을 계산

  - ex1) <상여금> 테이블에서 '상여 내역'별로 '상여금'에 대한 일련번호를 구하시오. (단, 순서는 내림차순, 속성명은 'NO'로 할 것)

SELECT 상여 내역, 상여금

ROW_NUMBER( ) OVER(PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS NO

FROM 상여금 

  - ex2) <상여금> 테이블에서 '상여 내역'별로 '상여금'에 대한 순위를 구하시오. (단, 순서는 내림차순, 속성명은 '순위'로 할 것)

SELECT 상여 내역, 상여금 

RANK( ) OVER(PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS 순위

FROM 사원 WHERE 부서='기획' AND 주소='대흥동';

 

◈ 그룹 지정 검색

  - GROUP BY절에 지정한 속성을 기준으로 자료를 그룹화하여 검색

  - ex1) <상여금> 테이블에서 '부서'별 '상여금'의 평균을 구하시오.

SELECT 부서, AVG(상여금) AS 평균 FROM 상여금 

GROUP BY 부서;

  - ex2) <상여금>테이블에서 부서별 튜플 수 검색

SELECT 부서, COUNT(*) AS 사원수 FROM 상여금 

GROUP BY 부서;

  - ex3) <상여금>테이블에서 '상여금'이 100 이상인 사원이 2명 이상인 '부서'의 튜플 수를 구하시오

SELECT 부서, COUNT(*) AS 사원수 FROM 상여금 

WHERE 상여금>=100

GROUP BY 부서

HAVING COUNT(*)>=2;

 

◈ 집합 연산자를 이용한 통합 질의

검색문(SELECT~ FROM~)

SELECT 속성명1, 속성명2, ......,

FROM 테이블명1, 테이블명2, ...

UNION | UNION ALL | INTERSECT | EXCEPT

SELECT 속성명1, 속성명2, ......

FROM 테이블명1, 테이블명2, ...

[ORDER BY 속성명 [ASC | DESC]];

  - 두 개의 SELECT문에 기술한 속성들은 개수와 데이터 유형이 서로 동일해야 함

  - 집합 연산자의 종류

   * UNION : 두 SELECT문의 조회 결과를 통합하여 모두 출력, 중복된 행 한 번만 출력

   * UNION ALL :  두 SELECT문의 조회 결과를 통합하여 모두 출력, 중복된 행도 그대로 출력

   * INTERSECT : 두 SELECT문의 조회 결과 중 공통된 행만 출력

   * EXCEPT : 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행 출력

  - ex1) <사원> 테이블과 <직원> 테이블을 통합하는 질의문을 작성하시오 (단, 같은 레코드 중복 X)

SELECT * FROM 사원 

UNION

SELECT * FROM 직원;

 

107 DML-JOIN

◈ JOIN의 개념

  - JOIN은 2개의 테이블에 대해 연관된 튜플들을 결합하여 하나의 새로운 릴레이션을 반환

  - JOIN은 크게 INNER JOIN과 OUTER JOIN으로 구분

  - JOIN은 일반적으로 FROM 절에 기술하지만 릴레이션이 사용되는 어느 곳에서나 사용할 수 있음

 

◈ INNER JOIN

- INNER JOIN은 일반적으로 EQUI JOIN과 NON-EQUI JOIN으로 구분

- 조건이 없는 INNER JOIN을 수행하면 CROSS JOIN과 동일한 결과를 얻을 수 있음

- EQUI JOIN

   * JOIN 대상 테이블에서 공통 속성을 기준으로 '=' 비교에 의해 같은 값을 가지는 행과 연결하여 결과를 생성하는 JOIN 방법

   * 중복된 속성을 제거하고 한 번만 표기하는 것을 NATURAL JOIN이라고 함

   * EQUI JOIN에서 연결 고리가 되는 공통 속성을 JOIN 속성이라고 함

※ NON-EQUI JOIN : '='조건이 아닌 나머지 비교 연산자

※ CROSS JOIN : 조인하는 두 테이블에 있는 튜플들의 순서쌍을 결과로 반환

 

◈ OUTER JOIN

  - OUTER JOIN은 릴레이션에서 JOIN 조건을 만족하지 않는 튜플도 결과를 출력하기 위한 JOIN 방법

  - LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 이 있음

   * LEFT OUTER JOIN : INNER JOIN의 결과를 구한 후 우측 항 릴레이션의 어떤 튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가

   * RIGHT OUTER JOIN : LEFT OUTER JOIN의 반대

   * FULL OUTER JOIN : LEFT, RIGHT 합쳐 놓은 것

 

◈ SELF JOIN

- 같은 테이블에서 2개의 속성을 연결하여 EQUI-JOIN을 하는 JOIN 방법

728x90