배경
- 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음
- SQL은 자연어와 유사하고 비절차적 언어이므로 사용하기 용이함
- SQL로 풀 수 없는 문제를 프로그래밍을 통해 풀 수 가 있음
- 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어
SQL 기본 명령어
- 데이터 정의 언어(data definition language) DDL: CREATE, ALTER, DROP
- 데이터 조작 언어(data manipulation language) DML: SELECT, INSERT, DELETE, UPDATE
- 데이터 제어 언어(data control language) DCL: GRANT, REVOKE, COMMIT, ROLLBACK
DDL VS DML
- 둘다 SQL 언어
- 테이블을 정의하는 것을 DDL (데이터 생성)
- SQL 문을 입력시 자동으로 commit 명령이 들어감(저장)된
- rollback이 불가능
- 테이블을 넣고 삽입 삭제 하는 것을 DML (데이터 처리)
- SQL 문 입력 후 exit 나 commit 을 입력해야 해당 데이터가 저장됨
- rollback시 취소 가능
필드의 Data type 종류 (Oracle)
- 문자
- char(n): (길이가 n인 고정 길이의 문자열)
- varchar2(n): (길이가 n인 가변 길이의 문자열)
- 숫자
- int(정수), float(실수)
- number(6): (10진수 6자리 자연수 0~999999)
- number(6,2): (10진수 6자리 중 소수점 자리 2개 0~9999.99)
- 사용 이유: 필요한 메모리 공간을 절약하기 위해서 int 로 선언시 number(38) 로 처리되는데 이는 데이터의 범위에 비해 공간적으로 과도하게 잡아먹는 경우가 있음
- 날짜 시간
테이블 생성
create table member(
id int not null ato_increment,
name varchar(10) not null,
passwd varchar(50) not null,
primary key(id)
)
- 형식 create table <테이블이름> (<필드리스트>)
- not null은 해당 필드에 널을 허용하지 않는다는 것을 의미함
기본키, 외래키 설정
- pk_department: 제약식의 이름 (not null 이 디폴트로 설정 됨)
- 어느 테이블에서 작업을 할때 에러가 발생했는지 알기 쉽기 때문에 사용
- 외래키는 반드시 프라이머리 키(기본 키)로 참조하여야 함
- 기본키와 외래키는 이름이 같을 필요는 없다.
- 외래키는 테이블과 테이블 사이의 조인 연산을 할때 이용되기 때문에 필요 (관계 정의 요소)
- 기본키, 외래키 관련 주의사항
- 외래키를 필드로 갖는 테이블을 생성 할 때
- 외래키가 참조하는 테이블을 먼저 생성 해야 한다.
- 만일 외래키가 참조하는 테이블을 먼저 생성하지 않으면 "ORA-00942" 테이블 또는 뷰가 존재하지 않습니다." 라는 오류가 발생하게 된다.
- 테이블을 삭제할 때도 같은 문제가 발생함
- 외래키를 먼져 해제하거나 제거 하여 관계를 끊은 다음에 삭제를 진행해야 테이블 간의 일관성을 유지 할 수 있다.
테이블 추가와 삭제
- 형식 alter table <테이블이름> add <추가할필드>
- 새로운 필드가 생성시 기존의 레코드 값들은 null 값으로 배치가 된다.
- 형식 alter table <테이블이름> drop column <삭제할필드>
레코드 삽입
- 형식: insert into <테이블이름> (<필드리스트>) values (<값리스트>)
- <필드리스트>: 삽입에 사용될 테이블의 필드들
- <값리스트>: <필드리스트>의 순서에 맞춰 삽입될 값
- <필드리스트>에 나열되지 않은 필드에 대해서는 널값이 입력됨
- <필드리스트>를 생략할 경우 <값리스트>에는 테이블을 생성할 때 나열한 필드의 순서에 맞춰서 값을 나열
- 테이블의 필드 중 생략된 필드에는 널이 입력됨
- 단 not null이 설정된 필드가 있을 경우 해당 필드는 insert문에서 생략 할 수 없음
레코드 수정
- <수정내역>
- 대상 테이블의 필드에 들어가는 값을 수정하기위한 산술직
- ,을 이용하여 여러 필드에 대한 수정 내역을 지정가능
- <조건>
- 대상이 되는 레코드에 대한 조건을 기술
- 관계대수에서 선택 연산의 조건식과 같은 의미
- 테이블의 모든 레코드에 대해 수정을 적용하려면 where 절을 생략
레코드 삭제
- where절이 생략되면 테이블에서 모든 레코드를 삭제
- DDL의 drop table과의 차이점: delete 문을 이용하여 테이블의 모든 레코드를 삭제하더라도 테이블은 삭제 되지 않음
- 외래키로 참조되는 필드를 가지고 있는 테이블에서 레코드를 삭제 할 수 없음