[데이터베이스] 6강. 관계 데이터베이스 언어 정의 및 종류

관계 데이터베이스 언어 정의 및 종류


관계 데이터베이스 언어 정의 및 종류

SQL의 개요


SQL의 역사


SQL의 특징


SQL의 유형


유형 명령문
DQL : Data Query Language (데이터 검색) * SELECT (데이터 검색 시 사용)
DML : Data Manipulation Language (데이터 조작어 - 데이터 변경시 사용) * INSERT (데이터 입력)
* UPDATE (데이터 수정)
* DELETE (데이터 삭제)
DDL : Data Definition Language (데이터 정의어 - 객체 생성 및 변경 시 사용) * CREATE (데이터베이스 생성)
* ALTER (데이터베이스 변경)
* DROP (데이터베이스 삭제)
* RENAME (데이터베이스 객체이름 변경)
* TRUNCATE (데이터베이스 저장 공간 삭제)
TCL : Transaction Control Language (트랜잭션 처리어) * COMMIT (트랜잭션의 정상적인 종료처리)
* ROLLBACK (트랜잭션 취소)
* SAVEPOINT (트랜잭션 내에 임시 저장점 설정)
DCL : Data Control Language (데이터 제어어) * GRANT (데이터베이스에 대한 일련의 권한 부여)
* REVOKE (데이터베이스에 대한 일련의 권한 취소)


데이터 정의어 (DDL : Data Definition Language)


테이블 생성1 - department 테이블을 생성

create table <테이블이름> (<필드리스트>)

-- 질의 1
-- dept_id는 필드명 (변수처럼 의미있는 네이밍 필요)
-- 테이블, 필드 이름에 공백 금지, 특수문자 ($, #, _ 제외), 30자 초과 X, 예약어 안됨
-- 한테이블안에 같은 테이블 같은 필드명 사용 금지
-- varchar()는 데이터 타입
-- not null은 해당 필드, NULL 값 X

create table department
{
    dept_id varchar(10) not null,
    dept_name varchar(14) not null,
    office varchar(10)
}


필드 삭제 형식

drop table <테이블 이름="">


테이블 수정1 - 추가


테이블 수정2 - 삭제


데이터 정의어 : 기본키, 외래키 관련 주의사항 (테이블 삭제)


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


레코드 삽입

insert into <테이블이름> (<필드리스트>) values (<값리스트>)

insert into department (dept_id, dept_name, office)
values ('920', '컴퓨터공학과', '201호')
insert into department (office, dept_id, dept_name)
values ('201호', '920', '컴퓨터공학과')


레코드 수정

update <테이블 이름="">
set <수정내역>
where <조건>


-- student 테이블에서 모든 학생들의 학년을 하나씩 증가

update student
set year = year + 1

-- professor 테이블에서 '고희석' 교수의 직위를 '교수'로 수정하고 학과번호를 '923'으로 수정

update professor
set position='교수', dept_id='923'
where name='고희석'


레코드 삭제

delete from <테이블이름>
where <조건>

delete from professor
where name='김태석'


데이터 조작어 : 기본키, 외래키 관련 주의사항


레코드 검색 - 기본구조

select <필드리스트>
from <테이블리스트>
where <조건>

select name, dept_name
from department, student
where department.dept_id = student_dept_id
-- student 테이블에서 모든 레코드의 모든 필드 값을 추출

select *
from student
-- professor 테이블에서 교수의 이름과 현재까지의 재직연수를 검색

select name, 2012-year_emp
from professor
-- select문은 학생들의 이름, 학번, 그리고 소속 학과의 이름을 검색

select student.name, student.stu_id, department.dept_name
from student, department
where student.dept_id = department.dept_id


레코드 검색 - 레코드의 순서 지정

-- student 테이블에서 3,4학년 학생들의 이름과 학번을 검색 (오름차순 정렬)

select name, stu_id
from student
where year=3 or year=4
order by name, stu_id


레코드 검색 - 재명명 연산

-- student 테이블과 department 테이블을 조인하여 학생들의 이름과 소속 학과 이름을 검색

select student.name, department.dept_name
from student, department
where student.dept_id = department.dept_id

select s.name, d.dept_name
from student s, department d
where s.dept_id = d.dept_id


레코드 검색 - like 연산자

-- student 테이블에서 김씨 성을 가진 학생들을 찾는 질의

select *
from student
where name like '김%'

-- student 테이블에서 여학생들만을 검색

select *
from student
where resident_id like '%-2%'


레코드 검색 - 집합 연산

-- student 테이블의 학생 이름과 professor 테이블의 교수 이름을 합쳐서 출력

select name from student
union
select name from professor

-- 컴퓨터공학과 학생들 중에서 교과목에 상관없이 학점을 'A+' 받은 학생들의 학번을 검색

select s.stu_id
from student s, department d, takes t
where s.dept_id = d.dept_id and
      t.stu_id = s.stu_id and
      dept_name='컴퓨터공학과' and grade = 'A+'


레코드 검색 - 외부조인 : 완전 외부조인

select title, credit, year, semester
from course full outer join class
using (course_id)


레코드 검색 - 집계 함수


레코드 검색 - 중첩 질의

-- 301호 강의실에서 개설된 강좌의 과목명을 출력

select title
from course
where course_id in
                (select distinct course_id
                 from class
                 where classroom='301호')


select distinct title
from course c1, class c2,
where c1.course_id = c2.course_id and
      classroom = '301호'
-- 301호 강의실에서 개설된 강좌의 과목명을 출력

select title
from course
where exists
        (select *
         from class
         where classroom='301호' and
                course.course_id = class.course_id)


데이터 제어어 (DCL : Data Control Language)

데이터 제어어 역할

구분 역할
데이터 보안 (Security) 불법적인 사용자로부터 데이터를 보호
무결성 (Integrity) 데이터의 정확성 유지
회복 (Recovery) 시스템 장애에 대비
병행수행제어 (Concurrency Control) 여러 수행자가 DB에 동시 접근 가능


데이터 제어어 종류


뷰 (View)

-- takes 테이블에서 grade 필드를 제외한 나머지 필드만으로 구성된 뷰를 생성

create or replace view v_takes as
                                    select stu_id, classs_id
                                    from takes


create or replace view cs_student as
    select s.stu_id, s.resident_id, s.name, s.year, s.address, s.dept_id
    from student s, department d
    where s.dept_id = d.dept_id and
          d.dept_name = '컴퓨터공학과'