본문 바로가기

전공/데이터베이스

[데이터베이스] SQL - (1)

개요


 

- SQL언어는 세 종류의 명령어로 이루어진다.

 

1. DDL(Data-definition language):

relation schema를 정의하고, relation을 삭제하고, relation schema를 수정하는 명령어를 제공한다.

 

예시)  CREATE, INDEX, DROP 등

 

 

 

2. DML(Data-manipulation language):

정보를 찾기 위해 데이터베이스에 질의하고, 튜플을 삽입, 삭제, 수정하는 명렁어를 제공한다.

 

예시) SELECT, INSERT, UPDATE, DELETE 등

 

 

 

3. DCL(Data-control language):

데이터베이스에 접근하거나 객체에 권한을 주는 등의 기능을 제공한다.

 

예시) START, COMMIT ROLLBACK 등

 

 

 

 

- 관계형 모델(relational model)과 SQL 언어의 비교

 

1. 용어 비교

 

 

 

 

2. 이론 비교

 

set은 중복된 element(row)를 포함할 수 없지만, multiset은 중복된 element(row)를 포함할 수 있다.

 

 

 

 

 

 

SQL에서 Domain Type


 

- char(n): 사용자가 지정한 길이 n을 갖는 고정 길이 문자.

- varchar(n): 사용자가 지정한 최대 길이 n을 가지는 가변 길이 문자.

- int: 정수.

- smallint: 작은 정수.

- numeric(p, d): 사용자가 지정한 정밀도(precision)를 갖는 고정 소수점 수. 수는 p 개의 숫자로 구성되며, p 개의 숫자 중 d개는 소수점 이하에 있는 숫자의 개수를 의미한다.

- real: 부동 소수점 수. 

- double precision: 배정밀도(double-precision) 부동 소수점 수.

- float(n): 적어도 n개의 숫자로 나타낼 수 있는 정밀도(precision)를 갖는 부동 소수점 수.

 

 

 

 

 

 

DDL로서의 SQL


 

- 테이블(table) 정의

 

예시)

create table instructor(ID                 char(5),

                                     name            varchar(20) not null,

                                     dept_name  varchar(20),

                                     salary            numeric(8, 2),

                                     primary key (ID),

                                     foreign key (dept_name) references department);

 

 

 

- 뷰(View) 정의

 

뷰(View)는 특정 user의 view에서 특정 data를 숨기기 위해  유도된 "가상 테이블(virtual table)"이다.

 

뷰(View)는 create view 명령을 사용해서 정의된다. 형태는 다음과 같다.

create view v as < query expression >

 

뷰(View)는 query 결과의 tuple을 미리 계산하고 저장하는 것이 아니라, 뷰에 접근 할 때마다 질의 결과를 계산하여 tuple을 생성한다.

 

예시)

create view faculty as

     select ID, name, dept_name

     from instructor;

 

create view departments_total_salary(dept_name, total_salary) as

     select dept_name, sum(salary)

     from instructor

     group by dept_name;

-> 뷰의 column title을 지정할 수 있다.

 

 

 

- 테이블(table) 제거

 

drop table table_name

: 테이블을 삭제하는 명령문.

 

 

- 테이블(table) 속성 추가

 

alter table r add A D 

: column을 추가하는 명령문. A는 table r에 추가할 속성의 이름이고, D는 A의 domian이다.

 

alter table r drop A

: column을 삭제하는 명령문. A는 table r에서 삭제할 속성의 이름이다.

 

 

 

 

 

 

DML로서의 SQL


 

- 삽입(insert)

 

하나의 튜플을 삽입하는 insert 문.

 

예시)

insert into instrutor (ID, name, dept_name, salary)

values ('22222', 'Einstein', 'Physics', 95000);

 

 

 

- 갱신(update)

 

tuple의 모든 값을 바꾸지 않고 tuple의 하나의 값만 변경하는 update 문.

 

예시) 

update instructor

set salary = 100000 

where ID = '22222';

 

 

 

- 삭제(delete)

 

전체 tuple의 값을 삭제하는 delete 문. (특정 속성이 값만 삭제할 수는 없다.)

 

예시)

delete from instructor

where ID = '22222'; 

 

 

 

- SQL query의 기본 구조

 

SQL query는 다음과 같은 형태를 가진다.

select A1, A2, ..., An
from r1, r2, ..., rm
where P

여기서 Ai는 attribute이고, ri는 table이며, P는 predicate이다.

 

SQL query의 결과는 table(relation)이다.

 

예시)

select name, course_idfrom instructor, teaches //cartesian productwhere instructor.ID = teaches.ID and year = 2010;