본문으로 건너뛰기

관계형 데이터베이스 개요

SQLD 목차SQL 기본레슨 12 / 35

목차

관계형 데이터베이스는 데이터를 행과 열로 된 테이블에 담고, 테이블끼리는 키 값으로 잇습니다. 이 데이터를 다루는 SQL 문장은 하는 일에 따라 데이터 조작어(DML)·데이터 정의어(DDL)·데이터 제어어(DCL)·트랜잭션 제어어(TCL) 네 종류로 나뉩니다.

여러 사람이 함께 쓰려고 한곳에 모은 데이터가 데이터베이스(database)이고, Oracle·SQL Server 같은 DBMS가 이를 만들고 관리합니다. 데이터를 표 모양으로 담는 관계형 데이터베이스(RDB)에 데이터를 묻고 바꾸는 언어가 SQL(Structured Query Language)입니다.

7단계 중 1단계. 관계형 데이터베이스는 데이터를 행과 열로 된 표, 테이블(table)에 담습니다.

1테이블·행·열

EMP는 사원 6명을 행 6개에 담고, 사번(EMPNO)·이름(ENAME)·월급(SAL)·부서 번호(DEPTNO)·관리자 사번(MGR)을 열로 둡니다. 그림에서는 MGR 열을 뺐습니다. 한 열에는 같은 종류의 값만 들어갑니다. 1과목의 엔터티·인스턴스·속성이 물리 모델에서 테이블·행·열이 된 것이고, 열은 칼럼(column)이라고도 부릅니다.

2기본키와 외래키

1과목의 주식별자는 테이블에서 기본키(PK)가 되고, 관계로 받아 온 속성은 외래키(FK)가 됩니다. 두 키는 들어오는 값을 막습니다.

넣는 값기본키 EMPNO외래키 DEPTNO
이미 있는 값막힘(ORA-00001)됨(20번 사원 셋)
NULL막힘(ORA-01400)됨(정하늘)
DEPT에 없는 값—막힘(ORA-02291)

MGR도 같은 EMP의 EMPNO를 가리키는 외래키라서, 관리자 칸에는 EMP에 지금 있는 사번이나 NULL만 들어갑니다.

3SQL 문장의 네 종류

종류다루는 것명령어
DML행을 조회하고 넣고 바꾸고 지움SELECT, INSERT, UPDATE, DELETE, MERGE
DDL테이블 같은 구조를 만들고 바꾸고 없앰CREATE, ALTER, DROP, RENAME, TRUNCATE
DCL권한을 주고 거둠GRANT, REVOKE
TCLDML로 바꾼 것을 확정하거나 되돌림COMMIT, ROLLBACK, SAVEPOINT

행을 모두 지우는 TRUNCATE와 이름을 바꾸는 RENAME은 DDL입니다. 조회만 하는 SELECT와, 넣거나 바꾸는 MERGE는 DML입니다. SAVEPOINT는 트랜잭션 안에 되돌아갈 지점을 표시합니다. Oracle은 DDL을 실행하기 전과 후에 저절로 커밋해서, DDL 앞에서 하던 DML까지 확정됩니다. GRANT·REVOKE도 Oracle에서는 실행 앞뒤에 커밋하지만, 시험에서 종류를 물으면 DCL입니다. 종류마다 DML·TCL·DDL·DCL 레슨에서 자세히 봅니다.

4이 과목의 예제 데이터

이 과목의 SQL 예제는 모두 DEPT(부서)·EMP(사원)·SALGRADE(급여 등급) 세 테이블로 돌립니다. SQL 블록마다 아래 처음 데이터에서 시작하고, 결과 표는 Oracle(Oracle AI Database 26ai — 버전 23)에서 돌린 것입니다. 행 순서는 ORDER BY(결과 행을 정렬하는 절 — ORDER BY 절 레슨에서 자세히)로 정했습니다.

SELECT *
FROM DEPT
ORDER BY DEPTNO;
DEPTNODNAMELOC
10기획서울
20개발판교
30영업부산
40인사서울

40번 인사 부서에는 사원이 없습니다.

SELECT *
FROM EMP
ORDER BY EMPNO;
EMPNOENAMESALDEPTNOMGR
1001김민준52010NULL
1002이서연380201006
1003박지호410201006
1004최유나450301001
1005정하늘300NULL1004
1006강도윤470201001

SAL은 월급(단위 만 원)입니다. NULL(값이 없다는 표시)은 정하늘의 부서와, 맨 위 김민준의 관리자 두 칸입니다. 관리 관계는 다음과 같습니다.

  • 1001 김민준
    • 1004 최유나
      • 1005 정하늘
    • 1006 강도윤
      • 1002 이서연
      • 1003 박지호
SELECT *
FROM SALGRADE
ORDER BY GRADE;
GRADELOSALHISAL
10349
2350399
3400449
4450499
55009999

월급이 LOSAL 이상 HISAL 이하면 그 등급입니다. SALGRADE는 조인 더 보기 레슨에서 씁니다.

예제

성과급 열 COMM을 더하고(DDL), 김민준의 SAL을 530으로 바꾼 뒤(DML), ROLLBACK(TCL)합니다.

ALTER TABLE EMP
  ADD (COMM NUMBER);
UPDATE EMP
SET SAL = 530
WHERE EMPNO = 1001;
ROLLBACK;
SELECT ENAME,
  SAL,
  COMM
FROM EMP
WHERE EMPNO = 1001;
ENAMESALCOMM
김민준520NULL

ROLLBACK은 DML로 바꾼 SAL만 되돌려서, DDL로 더한 COMM 열은 남았습니다.

시험 포인트

  • 기본키는 같은 값도 NULL도 막습니다. 외래키는 같은 값과 NULL은 받고, 가리킬 행이 없는 값을 막습니다.
  • 외래키는 같은 테이블의 기본키도 가리킵니다(MGR → EMPNO).
  • TRUNCATE·RENAME은 DDL, SELECT·MERGE는 DML입니다. 행을 지운다고 TRUNCATE를 DML로 고르면 틀립니다.
  • Oracle은 DDL 앞뒤에서 커밋하므로 DDL은 ROLLBACK으로 되돌릴 수 없고, DDL 앞의 DML도 확정됩니다.
  • GRANT·REVOKE는 DCL로 고릅니다.

확인 문제

1. 다음 일에 쓰는 SQL 문장은 각각 어느 종류일까요?

  • (가) EMP에 입사일 열을 더한다
  • (나) 40번 부서의 행을 지운다
  • (다) KIM의 EMP 조회 권한을 거둔다
  • (라) 바꾼 월급을 확정한다
정답

(가) DDL(ALTER) · (나) DML(DELETE) · (다) DCL(REVOKE) · (라) TCL(COMMIT)입니다. (나)는 40번 행만 골라 지우는 DELETE라 DML입니다. 같은 지우기라도 TRUNCATE로 테이블을 통째로 비웠다면 DDL입니다.

2. 처음 데이터의 EMP에 다음 행을 각각 따로 넣는다고 합시다. 오류가 나는 것을 고르세요.

  • ① INSERT INTO EMP VALUES (1007, '한지우', 400, 40, 1001);
  • ② INSERT INTO EMP VALUES (1008, '오민재', 350, NULL, 1001);
  • ③ INSERT INTO EMP VALUES (1009, '윤서아', 360, 10, 2000);
정답

③입니다. MGR이 가리킬 사번 2000이 EMP에 없습니다(ORA-02291). ①의 40번 부서는 사원이 없어도 DEPT에 행이 있고, ②처럼 외래키를 비우는 것은 됩니다.

3. Oracle에서 다음을 차례로 실행하면 마지막 SELECT의 결과는 무엇일까요?

UPDATE EMP
SET SAL = 600
WHERE EMPNO = 1001;
ALTER TABLE EMP
  ADD (COMM NUMBER);
ROLLBACK;
SELECT SAL
FROM EMP
WHERE EMPNO = 1001;
정답

600입니다.

SAL
600

ALTER TABLE 앞에서 저절로 커밋되어 UPDATE가 이미 확정됐으므로, ROLLBACK은 되돌릴 것이 없습니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

SQLD 목차로