본문 바로가기
  • 適者生存
WorkOut/정보처리기사

데이터베이스 | 트랜잭션 (DML&DCL) + Join

by lcrvvxln 2024. 4. 7.

적자생존

 


Chapter 01. 데이터베이스 기본

 

1. 트랜잭션

 

(3) 데이터 조작어 (DML; Data Manipulation Language)


- 데이터 조작어는 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어

* Create, Read, Upate, Delete 앞 글자 따서 CRUD

> CRUD는 데이터베이스 기본 연산

 

[1] DML 명령어

 

  • DML 유형

1. SELECT - 조회
: 테이블 내 칼럼에 저장된 데이터 조회

2. INSERT - 삽입
: 테이블 내 칼럼에 데이터 추가

3. UPDATE - 갱신
: 테이블 내 칼럼에 저장된 데이터 수정

4. DELETE - 삭제
: 테이블 내 칼럼에 저장된 데이터 삭제

데이터베이스 DML

세인업데

SELECT / INSERT / UPDATE / DELETE

> 내 친구 세인이 집에 업데 (....업데..)

 

[3] SELECT (데이터 조회) 명령어


- SELECT 명령어는 데이터 내용 조회할 때 사용하는 명령어
- SELECT 절, FROM절, WHERE 절, GROUP BY 절, HAVAING 절, ORDER BY 절로 구성

SELECT [ ALL | DISTINCT] 속성명1, 속성명2...
   FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...],
[HAVING 그룹 조건]
[ORDER BY 속성 [ASC | DESC] ];
SELECT 명령문

셀프 웨 구해오

SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY

> 셀프 웨이터를 구해오라

 

  • SELECT 절

- 검색하고자 하는 속성명, 계산식 기술
- 속성명 별칭은 'AS' 사용, 생략 가능
- 2개 이상 테이블 대상 검색 시, '테이블명.속성명' 으로 표현
- 술어 부분은 ALL 이 기본값


1. ALL
- 모든 튜플 검색 시 사용
- SELEC 뒤 별도 명시 없는 경우, ALL로 인식

2. DISTINCT
- 중복된 속성 조회 시, 그중 한 개만 검색 (SELECT 뒤 명시된 속성 중복될 경우 한 개만 검색)

DISTINCT

SELECT 명령문에서 'DISTINCT' 는 중복된 튜플이 있을 경우, 그 중 첫 번째 한 개만 검색

 

  • FROM 절

- 질의에 의해 검색될 데이터들을 포함하는 테이블명 기술

  • WHERE 절

- 검색 조건 기술

  • GROUP BY 절

- 속성값 그룹으로 분류하려 할 때 사용

 

  • HAVING 절

- GROUP BY에 의해 분류된 그룹에 대한 조건 지정

 

  • ORDER BY 절

- 속성값 정렬에 사용, 기본값오름차순 정렬
> ASC : 오름차순, DESC : 내림차순




1. SELECT 절
- 테이블에서 출력할 칼럼 명시하기 위해 사용

 

[성적 테이블]

이름 과목 학점
김철수 C언어 A
한유리 자료구조 A
신짱구 자료구조 A
이훈이 알고리즘 B

 

[ 쿼리 & 쿼리 결과 ]

 

#1

SELECT 과목
  FROM 성적;
과목
C언어
자료구조
자료구조
알고리즘
  • 성적 테이블에서 과목 열 모두 출력

#2

SELECT DISTINCT 과목 
  FROM 성적;

 

과목
C언어
자료구조
알고리즘
  • 성적 테이블의 과목 열 중 중복된 값은 맨 첫번째 값만 출력 

#3

SELECT 과목
  FROM 성적 
 WHERE 학점 ='A'
과목
C언어
자료구조
자료구조
  • 과목 테이블의 성적 열 중에서 학점 값이 'A'인 과목만 모두 출력 

 

#4

SELECT DISTINCT 과목
  FROM 성적 
 WHERE 학점 ='A'
과목
C언어
자료구조
  • 성적 테이블의 과목 열에서 중복값은 제거하고 학점 값이 'A'인 것만 모두 출력 

 

#5

SELECT COUNT(DISTINCT 과목)
  FROM 성적;
COUNT(DISTINCT 과목)
3
  • 성적 테이블의 과목 열에 중복값을 제외한 튜플의 갯수 출력 > C언어, 자료구조, 알고리즘 3개 

 

#6

SELECT DISTINCT 과목, 학점 
  FROM 성적;
과목 학점
C언어 A
자료구조 A
알고리즘 B
  • 성적 테이블에서 과목과 학점 두 칼럼 값모두 동일한 튜플은 삭제하여 출력 > 자료구조 A 학점이 2행이므로 하나만 출력

 

2. WHERE 절 

- 비교, 범위, 집합, 패턴, NULL, 복합조건 존재 

 

비교

 = : 값이 같은 경우 조회

<>, != : 값이 다른 경우 조회

<, <=, >, >= : 비교 연산 데이터 조회 

 

 

범위

BETEWEEN  > 컬럼명 BETWEEN 값1 AND 값2

: 값1보다 크거나 같고, 값2보다 작거나 같은 데이터 조회 

컬럼명 >= 값1 AND 컬럼명 <= 값2 조회 결과와 동일

 

집합

IN > 컬럼명 IN (값1, 값2, ...)

: 해당 컬럼의 값이 IN 안에 포함되는 데이터 조회

 

✔ 패턴

LIKE > 컬럼명 LIKE 패턴

: 칼럼 값이 패턴포함되는 경우 데이터 조회

 

% : 0개 이상 문자열과 일치 

[ ] : 1개 문자와 일치

[^] : 1개 문자와 불일치

_ : 특정 위치 1개 문자와 일치

 

✔ NULL

IS NULL > 컬럼명 IS NULL

: 컬럼값이 NULL인 데이터 조회IS NOT NULL > 컬럼명 IS NOT NULL: 컬럼값이 NULL 이 아닌 데이터만 조회

 

복합조건

AND > 조건1 AND 조건2

: 조건1조건2 둘다 만족하는 데이터 조회 

 

OR > 조건1 OR 조건2: 조건1과 조건2 둘 중 하나를 만족하는 데이터 조회 

 

NOT > NOT 조건: 조건에 해당하지 않는 데이터 조회

 

 

[ 쿼리 예제 ]

-- BETWEEN 

SELECT *
  FROM PRODUCT
 WHERE PRICE BETWEEN 50000 AND 80000;
  • 상품 테이블에서 가격 칼럼의 값이 5000 이상 80000 이하인 튜플 조회 
-- IN

SELECT *
  FROM PRODUCT
 WHERE PRICE IN (40000, 50000, 60000);
  • 상품 테이블에서 가격 칼럼 값이 4000 또는 5000 또는 6000인 튜플 조회 
-- LIKE

SELECT *
  FROM PRODUCT
 WHERE NAME LIKE '정보%'
  • 상품 테이블에서 NAME(이름) 칼럼 값이 '정보'로 시작하는 문자열인 튜플 조회 
--LIKE

SELECT *
  FROM PRODUCT
 WHERE NAME LIKE '[ABCD]%';
  • 상품 테이블에서 NAME(이름) 칼럼 값이 'A' 또는 'B' 또는 'C' 또는 'D'인 문자열과 일치하는 튜플 조회 
-- IS NULL

SELECT *
  FROM PRODUCT
 WHERE PRICE IS NULL;
  • 상품 테이블에서 가격 칼럼 값이 NULL 인 튜플 조회

 

3. GROUP BY 절 

- 속성값을 그룹으로 분류할 때 사용

 

[ 급여 테이블 ]

이름 직책 부서 급여
김철수 차장 마케팅 5000
한유리 차장 전산 4800
신짱구 사원 마케팅 2500
이훈이 사원 마케팅 2700

 

[ 쿼리 & 쿼리결과 ]

 

#1

SELECT 직책,
       COUNT(직책),
       SUM(급여)
  FROM 급여
GROUP BY 직책;
  • 급여테이블에서 GROUP BY 절에 명시된 직책을 기준으로 그룹을 분류했을 때, 직책별 튜플 수(COUNT)와 급여 합계(SUM) 조회 
직책 COUNT(직책) SUM(급여)
차장 2 9800
사원 2 5200

 

 

#2

SELECT 부서,
       SUM(급여) AS 급여합계
  FROM 급여
GROUP BY 부서;
부서 급여합계
마케팅 10200
전산 4800
  • 급여 테이블에서 GROUP BY 절에 명시된 부서를 기준으로 그룹을 분류하여 부서별 급여 합계(SUM)를 '급여합계' 칼럼으로 조회

 

#3

SELECT 직책,
       부서,
       SUM(급여) AS 급여합계
  FROM 급여
 GROUP BY 직책, 부서;
직책 부서 급여합계
차장 마케팅 5000
차장 전산 4800
사원 마케팅 5200
  • 급여 테이블에서 GROUP BY 절에 명시된 직책과 부서를 기준으로 그룹을 분류했을 때, 각 직책과 부서에 따른 급여 합계(SUM) 조회 

 

#4

SELECT COUNT(*)
  FROM 급여;
COUNT(*)
4
  • 급여 테이블에서 * (전체 값) 즉 전체 테이블의 총 튜플의 수(COUNT) 조회 > GROUP BY 절이 없으므로 전체 테이블을 하나의 그룹으로 취급
SELECT 절 - '컬럼명 AS 별칭'

SELECT 절에서 컬럼명 AS 별칭 형태로 작성 시,

쿼리 결과 조회에 컬럼명이 AS 뒤 별칭으로 표기되며 AS생략 가능함 

 

 

4. HAVING 절

- GROUP BY 절에 의해 분류된 그룹에 대한 조건 지정 시 사용

 

[ 급여 테이블 ] 

이름 직책 부서 급여
김철수 차장 마케팅 5000
한유리 차장 전산 4800
신짱구 사원 마케팅 2500
이훈이 사원 마케팅 2700

 

[ 쿼리 조회 및 결과 ]

SELECT 직책,
       부서,
       SUM(급여) AS 급여합계
  FROM 급여 
 GROUP BY 직책, 부서
HAVING SUM(급여) >= 5000;

 

직책 부서 급여합계
차장 마케팅 5000
사원 마케팅 5200

 

 

5. ORDER BY 절

- 속성값 정렬 시에 사용 

 

[ 성적 테이블 ]

이름 과목 학점
김철수 C언어 A
한유리 자료구조 A
신짱구 자료구조 A
이훈이 알고리즘 B

 

[ 쿼리 및 결과 ]

 

#1

SELECT *
  FROM 성적
 ORDER BY 이름;
이름 과목 학점
김철수 C언어 A
신짱구 자료구조 A
이훈이 알고리즘 B
한유리 자료구조 A
  • 성적 테이블에서 모든 값(*)을 조회
  • ORDER BY 절 뒤에 ASC/DESC 가 명시되지 않은 경우, DEFAULT 값은 ASC (오름차순)
  • 이름 칼럼에 대해 오름차순 정렬 > 가나다순 정렬

 

#2

SELECT *
  FROM 성적
 ORDER BY 과목, 이름;
이름 과목 학점
김철수 C언어 A
이훈이 알고리즘 B
신짱구 자료구조 A
한유리 자료구조 A
  • 성적 테이블의 모든 값을 조회(*)
  • ORDER BY 절에 과목, 이름 2가지 컬럼 존재 > 앞에 있는 속성으로 정렬 후, 같은 값일 경우 다음 속성으로 정렬 
  • 과목 기준으로 정렬 한 후, 동일 과목일 경우 이름을 기준으로 재정렬 

 

#3

SELECT *
  FROM 성적
 ORDER BY 학점 DESC, 이름 ASC;
이름 과목 학점
이훈이 알고리즘 B
김철수 C언어 A
신짱구 자료구조 A
한유리 자료구조 A
  • 성적 테이블의 모든 값(*) 조회
  • 학점을 기준으로 내림차순 조회 > 동일 학점인 경우, 이름 기준으로 오름차순 정렬
  • 알파벳은 오름차순이 ABC, 내림차순 ZYX...

 

 

  • 조인 (JOIN)

- 두 개 이상테이블연결하여 데이터를 검색하는 방법 

- 두 릴레이션으로부터 관련 튜플을 결합하여 하나의 튜플로 만드는 가장 대표적인 데이터 연결 방법

 

  • 논리적 조인 유형

1. 내부 조인 (Inner Join)

: 공통 컬럼 값이 같은 경우를 추출

 

2. 외부 조인 (Outer Join)

: 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인

 

- 왼쪽 외부 조인(Left Outer Join) : 왼쪽 테이블 모든 데이터오른쪽 테이블 동일 데이터 추출

- 오른쪽 외부 조인 (Right Outer Join) : 오른쪽 테이블 모든 데이터와 왼쪽 테이블 동일 데이터 추출 

- 완전 외부 조인 (Full Outer Join) : 양쪽 모든 데이터 추출 

 

3. 교차 조인 (Cross Join)

: 조인 조건없는 모든 데이터 조합 추출 

 

4. 셀프 조인 (Self Join)

: 자기 자신의 별칭 지정한 후, 다시 조인

 

 

1. 내부 조인

SELECT A.칼럼1, A.칼럼2, ...,
       B.칼럼1, B.칼럼2, ...
  FROM 테이블1 A [INNER] JOIN 테이블2 B
    ON 조인조건
 [WHERE 검색조건];
  • 같은 이름의 컬럼여러 테이블에 있는 경우, ' 별칭.컬럼명' 형태로 명시
  • INNER 키워드 생략해도 내부 조인 
  • 검색 조건 추가할 경우, 조인된 값에서 해당 조건에 맞는 결과만 출력 

 

2. 왼쪽 외부 조인

SELECT A.칼럼1, A.칼럼2, ...,
       B.칼럼1, B.칼럼2, ...,
  FROM 테이블1 A LEFT [OUTER] JOIN
       테이블2 B
    ON 조인조건
 WHERE 검색조건;
  • OUTER 키워드 생략해도 왼쪽 외부 조인
  • 검색조건 추가 시, 조인된 값에서 해당 조건 맞는 결과만 출력

 

3. 오른쪽 외부 조인

SELECT A.컬럼1, A.컬럼2, ...,
       B.컬럼1, B.컬럼2, ...,
  FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
    ON 조인조건
 [WHERE 검색조건;]
  • OUTER 키워드 생략해도 오른쪽 외부 조인
  • 검색조건 추가 시, 조인 값에서 해당 조건에 맞는 결과만 출력

 

4. 완전 외부 조인 

SELECT A.컬럼1, A.컬럼2, ...,
       B.컬럼1, B.컬럼2, ...,
  FROM 테이블1 A FULL [OUTER] JOIN
       테이블2 B
    ON 조인조건
 [WHERE 검색조건];
  • OUTER  키워드 생략해도 완전 외부 조인
  • 검색조건 추가 시, 조인 값에서 해당 조건 맞는 결과만 출력

 

5. 교차 조인

SELECT A.컬럼1, A.컬럼2, ...,
       B.컬럼1, B.컬럼2, ...
  FROM 테이블1 A CROSS JOIN 테이블2 B;
  • 조인 조건없는 모든 데이터 조합 추출ON 절 없음 

 

6. 셀프 조인

SELECT A.컬럼1, A.컬럼2, ...,
       B.컬럼1, B.컬럼2, ...,
  FROM 테이블1 A [INNER] JOIN 테이블1 B
    ON 조인조건
 [WHRER 검색조건];
  • 같은 테이블 쓰고 별칭만 A, B와 같이 다르게 함 
  • 검색조건 추가 시, 조인된 값에서 해당 조건에 맞는 결과만 출력되게 설정 

 

 

  • 조인 예시

[ 도서 테이블 ]

책번호 책명
111 운영체제
222 자료구조
555 컴퓨터구조

 

[ 도서 가격 테이블 ]

책번호 가격
111 20000
222 25000
333 10000
444 15000

 

 

#1 내부 조인

SELECT A.책번호, A.책명, B.가격
  FROM 도서 A JOIN 도서가격 B
    ON A.책번호=B.책번호;
A.책번호 A.책명 B.가격
111 운영체제 20000
222 자료구조 250000
  • '도서' 테이블은 A, '도서가격' 테이블은 B 별칭으로 설정
  • A와 B의 책번호가 같은 튜플끼리 조인
  • A는 111, 222, 555 / B는 111, 222, 333, 444 > 각 테이블의 111과 222 튜플 연결해서 조인

 

#2 왼쪽 외부 조인

SELECT A.책번호, A.책명, B.책번호, B.가격
  FROM 도서 A LEFT JOIN 도서가격 B
    ON A.책번호 = B.책번호;
A.책번호 A.책명 B.책번호 B.가격
111 운영체제 111 20000
222 자료구조 222 25000
555 컴퓨터구조 NULL NULL
  • '도서' 테이블은 A, '도서가격' 테이블은 B 별칭으로 설정 > 왼쪽의 도서 테이블 기준으로 왼쪽 외부 조인 
  • A와 B가 동일하게 가지는 컬럼인 책번호를 기준으로 조인
  • A와 B 모두 111, 222 튜플은 가지고 있으나 B는 555 튜플을 가지고 있지않으므로 NULL 값 기입

 

#3 오른쪽 외부 조인

SELECT A.책번호, A.책명, B.책번호, B.가격
  FROM 도서 A RIGHT JOIN 도서가격 B
    ON A.책번호 = B.책번호;
A. 책번호 A.책명 B.책번호 B.가격
111 운영체제 111 20000
222 자료구조 222 25000
NULL NULL 333 10000
NULL NULL 444 15000
  • '도서' 테이블은 A, '도서가격' 테이블은 B 별칭 설정 > 오른쪽에 있는 '도서가격' 테이블 기준으로 오른쪽 외부 조인 
  • A와 B 테이블 동일하게 가지는 책번호 컬럼 기준으로 조인
  • A와 B 모두 111, 222 튜플은 가지고 있으나 B가 가지고 있는 333, 444 튜플은 A에 없으므로 NULL 값 기입

 

#4 완전 외부 조인

SELECT A.책번호, A.책명, B.책번호, B.가격
  FROM 도서 A FULL JOIN 도서가격 B
    ON A.책번호=B.책번호;
A.책번호 A.책명 B.책번호 B.가격
111 운영체제 111 20000
222 자료구조 222 25000
NULL NULL 333 10000
NULL NULL 444 15000
555 컴퓨터구조 NULL NULL
  • '도서' 테이블은 A, '도서가격' 테이블은 B로 별칭 > 완전 외부 조인 
  • A와 B의 책번호 컬럼에 공통인 111,222 외에도 A에만 있는 555 튜플과 B에만 있는 333, 444 튜플까지 완전 조인 
  • 각각의 테이블에 없는 값들은 NULL로 설정하여 기입

 

#5 교차 조인 

SELECT A.책번호, A.책명, B.책번호, B.가격
  FROM 도서 A CROSS JOIN 도서가격 B;
A.책번호 A.책명 B.책번호 B.가격
1111 운영체제 1111 20000
1111 운영체제 2222 25000
1111 운영체제 3333 10000
1111 운영체제 4444 15000
2222 자료구조 1111 20000
2222 자료구조 2222 25000
2222 자료구조 3333 10000
2222 자료구조 4444 15000
5555 컴퓨터구조 1111 20000
5555 컴퓨터구조 2222 25000
5555 컴퓨터구조 3333 10000
5555 컴퓨터구조 4444 15000
  • '도서' 테이블은 A, '도서가격' 테이블은 B 별칭 설정 > 조건 없이 교차 조인 
  • A테이블은 2열 3행 , B테이블은 2열 4행 > 2*2=4열, 3*4= 12행 이므로 4열 12행 테이블 생성 
  • 조건 없으므로 ON 절 없음
  • A 테이블의 첫번째 행인 책번호 111, 책명 운영체제 튜플에 B 테이블 전체 붙이기 (4행) > A 테이블 튜플 수만큼 반복 

 

#6 셀프 조인

 

[ 도서 테이블 ]

책번호 책명 선수과목_책번호
111 운영체제 222
222 자료구조 555
555 컴퓨터구조 NULL
SELECT A.책번호, A.책명, B.책번호, B.책명
  FROM 도서 A JOIN 도서 B
    ON A.선수과목_책번호 = B.책번호;
A.책번호 A.책명 B.책번호 B.책명
111 운영체제 222 자료구조
222 자료구조 555 컴퓨터구조
  • '도서' 테이블 하나의 테이블에 대해 A, B라는 별칭 별도 설정
  • '도서' 테이블(A)의 '선수과목_책번호' 컬럼과 '도서' 테이블(B)의 '책번호' 컬럼을 기준으로 셀프 조인
  • A의 선수과목_책번호 컬럼과 B의 책번호 컬럼이 기준 > 선수과목_책번호 컬럼 중 책번호에 값이 있는 222, 555 튜플만 결합 
  • 조인 조건인 선수과목 책번호 컬럼이 아닌 A.책번호 컬럼을 조회 > 선수과목_책번호가 222인 책번호 111 튜플 & 선수과목_책번호가 555인 책번호 222 튜플 조회
  • A 테이블의 선수과목_책번호 컬럼의 값과 B 테이블의 책번호 컬럼의 값이 같은 결과값을 조회 >  A 테이블 책번호 111 튜플의 선수과목 책번호 컬럼값인 222를 붙이고 책명에는 222 튜플의 책명인 자료구조 붙이기 > A 테이블 책번호 222 튜플의 선수과목 책번호 컬럼값인 555를 붙이고 책명에는 555 튜플 책명인 컴퓨터 구조 붙이기 

 

 

  • 서브쿼리 (Sub-Query)

- 서브쿼리는 SQL 문 속에 포함또 다른 SQL문 

- 서브쿼리는 알려지지 않은 기준을 위한 검색에 사용

- 메인쿼리서브쿼리주종 관계, 서브쿼리컬럼 정보메인쿼리 컬럼 정보사용할 수 있으나 역은 성립 X 

 

  • 서브쿼리 유형 (위치 기준)

1. FROM 절 서브쿼리 

- 서브쿼리가 FROM 절 안에 들어있는 형태

- 인라인 뷰 (Inline Views) 로 불림

- 뷰(View) 처럼 결과동적으로 생성된 테이블 형태로 사용할 수 있음 

 

2. WHERE 절 서브쿼리 

- 서브쿼리가 WHERE 절 안에 들어있는 형태 

- 중첩 서브쿼리 (Nested Sub-Query)로 불림

 

 

[ 도서 테이블 ]

책번호 책명
111 운영체제
222 자료구조
555 컴퓨터구조

 

[ 도서가격 테이블 ]

책번호 가격
111 20000
222 25000
333 10000
444 15000

 

 

[ 서브쿼리 & 결과  ] 

 

# FROM 절 서브쿼리

SELECT MAX(가격) AS 가격
  FROM 도서가격 A,
       (SLEECT 책번호
          FROM 도서 
         WHERE 책명='자료구조') B
 WHERE A.책번호=B.책번호;
  • SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조' => 서브 쿼리 결과 값B로 명명하여 'B' 테이블로 사용
  • 도서 테이블에서 책명이 '자료구조' 여야 하므로 책번호 222 - 책명 자료구조 튜플이 B
  • 도서가격의 A 테이블과 서브쿼리에 따른 B 테이블에서 A책번호 값B 책번호 값같은 데이터를 조회 
  • A 책번호는 111, 222, 333, 444 / B 책번호 222 > 책번호 222 튜플만 조회
  • 조회된 데이터의 가격 칼럼에서 최대값을 조회 > 222 밖에 없으므로 222책 가격 25000
가격
25000

 

 

# WHERE 절 서브쿼리

SELECT MAX(가격) AS 가격
  FROM 도서가격
 WHERE 책번호 IN (SELECT 책번호 
                  FROM 도서
                 WHERE 책명='자료구조');
가격
25000
  • SELECT 책 번호 FROM 도서 WHERE 책명 = '자료구조' > 서브쿼리 결괏값과 책번호동일한 데이터 조회 
  • 도서 테이블에서 책명자료구조책 번호222 > 도서가격 테이블에서 책번호222인 데이터 조회 
  • 책 번호가 222인 데이터 중 가격최대인 것 > 25000 출력

 

  • 집합 연산자 (Set Operator)

- 테이블집합 개념으로 보고, 두 테이블 연산에 집합 연산자 사용 

- 집합 연산자는 여러 질의 결과 연결하여 하나 결합하는 방식 사용

- 2개 이상의 질의 결과를 하나의 결과로 변경

 

1. UNION

- 중복 레코드 제외

 

- 중복 행제거된 쿼리 결과 반환 

 

 

2. UNION ALL

- 중복 레코드 허용 

 

- 중복 행제거되지 않은 쿼리 결과 반환

 

 

3. INTERSECT

- 중복 레코드 포함

 

- 두 쿼리 결과에 공통적으로 존재하는 결과반환

 

 

4. MINUS

- 비교 레코드 제외

 

- 첫 쿼리있고 두 번째 쿼리에는 없는 결과 반환 

 

 

 

[ EMP 테이블 ]

EMPNO ENAME JOB SAL
1001 홍길동 대리 1000
1002 임꺽정 과장 1500
1003 장길산 차장 2000
1004 강은미 부장 2500

 

[ 쿼리 & 결과 ]

 

#1 UNION

SELECT ENAME
  FROM EMP 
 WHERE SAL <= 2000
 UNION
SELECT ENAME
  FROM EMP
 WHERE SAL>=1500;
ENAME
홍길동
임꺽정
장길산
강은미
  • 두 개 쿼리 결과를 집합 연산자 UNION을 사용 중복 제거하여 조회
  • 첫 번째 쿼리는 EMP 테이블에서 SAL 칼럼이 2000 이하인 튜플 중 이름 조회 > 홍길동(1000), 임꺽정(1500), 장길산(2000)
  • 두 번째 쿼리는 EMP 테이블에서 SAL 칼럼이 1500 이상인 튜플 중 이름 조회 >  임꺽정(1500), 장길산(2000), 강은미(2500)
  • 두 개의 결과를 합하고 중복 제거하므로 둘 다에 있는 임꺽정과 장길산은 한 개만 남기고 삭제 > 홍길동, 임꺽정, 장길산, 강은미 출력

 

#2 UNION ALL

SELECT ENAME
  FROM EMP
 WHERE SAL <=2000
 UNION ALL
SELECT ENAME
  FROM EMP
 WHERE SAL >=1500;
 ENAME
홍길동
임꺽정
장길산
임꺽정
장길산
강은미
  • 두 개의 쿼리 결과를 집합 연산자 UNION ALL을 사용하여 중복 허용 결과 조회
  • 첫 번째 쿼리 결과는 EMP 테이블에서 SAL 칼럼 값이 2000 이하인 데이터의 ENAME 조회 > 홍길동, 임꺽정, 장길산
  • 두 번째 쿼리 결과는 EMP 테이블에서 SAL 칼럼 값이 1500 이상인 데이터 ENAME 조회 > 임꺽정, 장길산, 강은미
  • UNION ALL은 중복을 허용 > 순서대로 홍길동, 임꺽정, 장길산, 임꺽정, 장길산, 강은미 출력

 

#3 INTERSECT

SELECT ENAME
  FROM EMP
 WHERE SAL <= 2000
INTERSECT
SELECT ENAME
  FROM EMP
 WHERE SAL >=1500;
ENAME
임꺽정
장길산
  • 두 쿼리 결괏값을 집합 연산자 INTERSECT를 이용하여 교집합 결과만 반환
  • 첫 번째 쿼리 결과 > 홍길동, 임꺽정, 장길산 조회 
  • 두 번째 쿼리 결과 > 임꺽정, 장길산, 강은미 조회
  • INTERSECT는 두 결과의 중복된 값인 교집합 값을 반환하므로 임꺽정, 장길산 반환

 

#4 MINUS

SELECT ENMAE
  FROM EMP
 WHERE SAL <= 2000
 MINUS
SELECT ENAME
  FROM EMP
 WHERE SAL >= 1500;
ENAME
홍길동
  • 두 쿼리 결괏값을 집합 연산자 MINUS를 이용하여 쿼리 결과에 있고 번째 쿼리 결과에는 없는 결괏값만 반환
  • 첫 번째 쿼리 결과값 > 홍길동, 임꺽정, 장길산
  • 두 번째 쿼리 결과값 > 임꺽정, 장길산, 강은미
  • 홍길동, 임꺽정, 장길산 중 두 번째 쿼리 결과값과 겹치는 임꺽정, 장길산은 제거하고 홍길동만 반환

 

[4] INSERT (데이터 삽입) 명령어

 

- INSERT는 데이터 내용 삽입 시 사용

INSERT INTO 테이블명 ( 속성명1, ... )
VALUES (데이터1, ... )

- 데이터를 삽입할 속성삽입 데이터의 데이터 개수, 데이터 타입일치해야 함 
- 속성명 생략 가능 
- 속성 타입이 숫자인 경우, 데이터에 따옴표 X
- 속성 타입이 문자열인 경우, 데이터에 따옴표 O
Ex. [ 학생 ] 테이블에 학번이 6677, 성명 '장길산', 학년 3학년, 수강과목은 '수학'인 학생 삽입 

INSERT INTO 학생 (학번, 성명, 학년, 수강과목)
VALUES (6677, '장길산', 3, '수학')

 

- INSERT 명령어 

인인벨

INSERT INTO / VALUES

 

 

[5] UPDATE (데이터 변경) 명령어

 

- UPDATE데이터 내용 변경 시, 사용

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

- WHERE 절을 통한 조건 만족할 경우만, 특정 컬럼값 수정하는 용도로 자주 사용
Ex. [ 학생 ] 테이블에 장길산 주소 인천으로 수정 

UPDATE 학생
         SET 주소 = '인천'
  WHERE 성명 = '장길산';

 

- UPDATE 명령어

업셋웨

UPDATE / SET / WHERE

 

 

[6] DELETE (데이터 삭제) 명령어 

 

- DELETE는 데이터 내용 삭제 시 사용

DELETE FROM 테이블명
 WHERE 조건;

- 모든 레코드 삭제 시, WHERE없이 DELETE FROM 만 사용 
- 레코드 삭제해도 테이블 구조남기 때문에 디스크에서 테이블완전히 삭제하는 DROP 명령과 다름
- DELETE 명령어 

델프웨 

DELETE FROM / WHERE

 

 

 

(4) 데이터 제어어 (DCL; Data Control Language)

- 데이터 제어어데이터베이스 관리자(DBA) 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 사용하는 제어용 언어 

 

1. GRANT - 사용 권한 부여

: 관리자(DBA)사용자데이터베이스에 대한 권한을 부여하는 명령어

 

2. REVOKE - 사용 권한 취소 

: 관리자(DBA)사용자부여했던 권한 회수하는 명령어

 

  • GRANT (권한 부여) 명령어

- 데이터베이스 관리자 (DBA; Data Base Administrator)가 사용자데이터베이스에 대한 권한 부여하는 명령어

GRNAT 권한 ON 테이블 TO 사용자;

- 관리자사용자테이블에 대한 권한 부여
Ex.  관리자가 사용자 장길산에 '학생' 테이블에 대해 UPDATE 할 수 있는 권한 부여
GRANT UPDATE ON 학생 TO 장길산;
- GRANT 명령어

그온투

GRANT / ON / TO

 

 

  • REVOKE (권한 회수) 명령어

- 데이터베이스 관리자(DBA)사용자부여했던 권한 회수하는 명령어

REVOKE 권한 ON 테이블 FROM 사용자;

- 관리자사용자부여했던 테이블에 대한 권한 회수 
Ex. 관리자가 사용자 장길산에 '학생' 테이블에 대해 UPDATE 할 수 있는 권한 회수 

REVOEK UPDATE ON 학생 FROM 장길산;
- REVOKE 명령어

리온프

REVOKE / ON / FROM