* 관계대수 : 직관적 이해의 어려움 + 연산 순서도 고려
=> 자연어에 가까우면서도 비절차적 요소가 포함된 언어는 없을까? => SQL의 등장
SQL의 제공 기능
1. 데이터 정의 언어(DDL) : 데이터 저장 구조 명시 ex. 테이블 생성, 수정, 삭제
2. 데이터 조작 언어(DML) : 데이터 접근 및 조작 ex. 레코드의 삽립, 삭제, 수정 등
1. 데이터 정의 언어
*테이블 생성 조건 : 테이블 이름, 필드 이름, 필드의 데이터 타입 ...
- 필드의 데이터 타입
분류 | 표준 SQL | 오라클 | 설명 |
문자 | char(n) | char(n) | n byte 고정길이 문자열 (최대 2000) |
varchar(n) | varchar2(n) | 최대 n byte 가변 길이 문자열 (최대 4000) | |
숫자 | int | number(0, 0) | 정수 |
float | float | 부동 소수 | |
number(p, s) | 정밀도 p, 스케일 s 로 정의되는 실수 | ||
날짜 시간 |
date | date | 년, 월, 일 (yy/mm/dd) |
time timestamp |
timestamp | 년, 월, 일, 시, 분, 초 |
- 테이블 생성
create table 테이블이름 필드리스트
*필드리스트 : 필드명 + 데이터 타입
ex. department 테이블 생성하는 SQL문
create table department (
dept_id varchar2(10) not null,
dept_name varchar2(14) not null,
office varchar2(10)
)
create table : 생성문
department : 테이블 이름
( ... ) : 필드 리스트
ㄴ dept_id, dept_name, office : 필드명
ㄴ varchar2(2) : 데이터 타입
ㄴ not null : 제약 조건 (NULL을 허용하지 않음)
- 기본 키 설정
constraint 제약조건이름 primary key (기본키 필드명)
create table department (
dept_id varchar2(10) not null,
dept_name varchar2(14) not null,
office varchar2(10)
constraint pk_departmment primary key (dept_id)
)
constraint ~ primary key : 제약문
pk_department : 제약 이름. 자유롭게 지어도 됨.
dept_id : 기본키로 지정할 필드명
create table department (
dept_id varchar2(10) primary key
dept_name varchar2(14) not null,
office varchar2(10)
)
- 외래 키 설정
- constraint 제약조건이름 foreign key (외래 키 필드명) references 참조될테이블이름 기본키필드명
- 외래 키 필드 선언할 때 : references 참조될테이블명 (기본키필드명)
ex. student 테이블 생성 후 기본키 및 외래키 설정
create table student (
stu_id varchar2(10),
resident_id varchar2(14) not null,
name varchar2(10) notnull,
year int,
address varchar2(10),
dept_id varchar2(10)
constraint pk_student primary key(stu_id),
constraint fk_student foreign key(dept_id) references department(dept_id)
)
constraint ~ foreign key ~ references : 제약문
fk_student : student 테이블의 외래키
(dept_id) : student 테이블의 외래 키 필드명
department : 외래 테이블 (=참조될 테이블 이름)
(dept_id) : department 테이블의 기본 키 필드명
create table student (
stu_id varchar2(10),
resident_id varchar2(14) not null,
name varchar2(10) notnull,
year int,
address varchar2(10),
dept_id varchar2(10) references department(dept_id),
constraint pk_student primary key(stu_id)
)
- 테이블 삭제
drop table 테이블이름
* 다른 테이블에서 외래 키로 참조되는 경우에는 삭제 불가
ex.
class 테이블은 takes 테이블에게 class_id 필드를 외래키로 주고 있음. (= 참조되고 있음) => class 테이블 삭제 불가
ㄴ class테이블을 삭제하고 싶다면 takes 테이블을 삭제 or 외래키 제약 조건 삭제
ㄴ drop table 테이블이름 cascade constraints : 외래 키 해제 후 테이블 삭제
- 테이블 수정
- 새로운 필드 추가
alter table 테이블이름 add 추가할필드명 데이터타입
ex. student 테이블에 age 필드 추가
alter table student add age int
- 필드 삭제
alter table 테이블이름 drop column 삭제할필드명
ex. student 테이블의 age 필드 삭제
alter table student drop column age
DDL 주의 사항
- 외래키를 갖는 테이블 생성할 때, 외래키가 참조하는 테이블을 먼저 생성.
ex. student 테이블의 dept_id가 depatment의 dept_id를 참조하려는 상황
=> student 테이블을 먼저 생성하여 외래 키 설정 시, department 테이블이 존재하지 않으므로 오류 발생
- 참조되는 테이블도 삭제 할 수 없음 (테이블 삭제 항목 참고)