3장 SQL (Structured Query Language)
데이터베이스에 저장된 데이터를 CRUD하거나 다양한 객체(시퀀스, 인덱스 등)를 생성 및 제어하는 역할
01. 데이터 정의어, Data Definition Language
DB의 논리구조를 정의하기 위한 언어, 객체의 생성 및 수정, 데이터 사전(DD)에 저장
CREATE
create table member(
mem_id varchar2(6) not null constraint mem_id_PK primary key,
mem_grade varchar2(20),
constraint mem_grade_FK foreign key (mem_grade) references grade_pt_rade (mem_grade),
mem_pw varchar2(20) not null,
mem_birth date default sysdate not null,
mem_tel varchar2(20),
mem_pt varchar2(10) default 0 not null
);
- 데이터 타입
- char
- 자리수가 지정된 컬럼에 사용 (주민번호, 은행 비밀번호
- 성능 빠름, 하드 공간을 낭비할 수 있음
- varchar2
- 자리수를 알 수 없는 경우, (주소, email)
- varchar의 성능 개선 (오라클)
- char보다 성능이 떨어짐, 하드 공간 낭비를 줄임
- char
- constraint[^제약조건]
- primary key : 테이블에서 하나만 존재할 수 있음
- 데이터 수정 및 삭제 시 조건을 사용하는 컬럼
- 중복된 데이터 삽입 불가
- 인덱스가 자동으로 생성됨 (검색 시 유용)
- null 적용 불가
- foreign key : 다른 테이블(부모)의 primary key, unique 컬럼을 참조해서 값을 할당
- unique : 중복된 값을 넣을 수 없다. 테이블에서 여러번 사용 가능
- 1회에 한해 null 적용 가능
- 인덱스가 자동으로 생성됨
- check (조건) : 값의 범위 설정
- not null : 컬럼에 null 삽입 불가
- default [100] : 값이 입력되지 않을 때 [100]을 기본으로 입력
- primary key : 테이블에서 하나만 존재할 수 있음
ALTER
DB에 저장된 테이블의 칼럼/제약조건 변경
- add [column/constraint]
- modify
- rename column
- drop [column/constraint/primary key/unique]
- set unused : drop보다 응답이 빠름, 실제로는 삭제되지 않으나 select, describe 불가
- [enable/disable] constraint : 제약조건 일시적 활성/비활성화
alter table wine
add constraint nation_code_FK foreign key (nation_code) references nation (nation_code);
alter table dept20
modify email varchar2(200);
alter table dept20
drop column ADDRESS;
alter table dept20
rename column DNO to D_NO;
--SET UNUSED : CPU 부하없이 특정 컬럼 사용 중지
alter table dept20
set unused (email);
DROP
DB 데이터 삭제 (저장공간 유지)
RENAME
DB 객체[^객체] 이름 변경
TRUNCATE
DB 저장공간 삭제
- 시퀀스 (sequence)
- 테이블의 특정 컬럼에 적용, 고유한 번호가 할당됨 (자동 번호 발생기)
- 컬럼의 값을 자동으로 증가시킴, 출력된 시퀀스는 되돌릴 수 없음
- 인덱스 (index)
- 검색 속도를 향상을 위해 사용 기본 키나 유일 키는 인덱스가 자동으로 생성됨
- 고유인덱스 ↔ 비고유인덱스 (유일성 여부)
- 단일인덱스 ↔ 결합인덱스 (구성 칼럼 개수)
- 함수기반인덱스 (함수에 인덱스 지정) ```sql create sequence sample_seq increment by 10 – 증가값 : 10 start with 10; – 초기값 : 10
- 검색 속도를 향상을 위해 사용 기본 키나 유일 키는 인덱스가 자동으로 생성됨
create sequence sample_seq1 increment by 1 – 증가값 : 1 start with 1 – 초기값 : 1
–시퀀스 정보 확인 select * from user_sequences;
–시퀀스의 다음값 확인
select sample_seq.nextval from dual;
–현재 시퀀스가 가지고 있는 값
select sample_seq.currval from dual;
–첫 시퀀스에서 진행하면 오류 발생
–생성한 시퀀스를 테이블의 특정 컬럼에 적용
create table dept30
as
select * from department
where 0 = 1;
–where 절이 false이면서 테이블의 레코드를 복사하지 않음
## 02.데이터 처리어, Data Query Language
### SELECT
```sql
SELECT [DISTINCT] {*, column[Alias], . . .}
FROM table_name
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column]
-- 전체 칼럼 조회
select * from TABLE;
--일부 칼럼 조회
select COL1, COL2 .. from TABLE;
- 산술연산자(+, -, *, /) ⇒ alias로 사용
- nvl(연산값, 0)
- null과의 연산 결과는 항상 null, nvl함수는 null 값을 0으로 변환
WHERE- IS NULL / IS NOT NULL
- 비교연산자 ( =, >, >=, <=, <, <>, !=, ^=)
- 논리연산자 (AND, OR, NOT) : 2개 조건 조합
- BETWEEN a AND b ◦ IN (a,b,c)
- LIKE _ %
GROUP BY특정 칼럼을 기준으로 그룹화HAVING그룹별 조건 연산ORDER BY- ASC
- DESC
데이터사전 (Data Dictionary) 관리를 목적으로 객체의 정보를 저장하는 시스템 테이블 집합 (사용자가 수정, 삭제 불가) • USER_ : 자신의 계정이 소유한 객체 등에 관한 정보 조회 • ALL_ : 자신의 계정 소유했거나 권한을 부여 받은 객체 등에 관한 정보 조회 • DBA_ : 데이터베이스 관리자만 접근 가능한 객체 정보 조회, sys, system
--현재 로그온한 사용자의 모든 테이블 정보 출력
select * from user_tables;
--제약 조건 정보 출력 (not null, primary key, unique, foreign key, check)
select * from user_constraints;
--인덱스 정보를 출력 : 테이블 컬럼에 부여됨
select * from user_indexes;
--시퀀스 정보 출력
select * from user_sequences;
-- 뷰정보 출력
select * from user_view;
3. 데이터 조작어, Data Manipulation Language
DB에 저장된 데이터를 조작하기 위해 사용하는 언어
INSERT
데이터 입력
UPDATE
데이터 수정
DELETE
데이터 삭제 *where 생략 시 모든 데이터 삭제 유의
04. 트랜잭션 제어어, Transection Control Language
COMMIT
트랜잭션 처리 사항 영구 저장
ROLLBACK
트랜잭선 과정 중 변경 사항 취소
SAVEPOINT
임시 저장점 설정
05. 데이터 제어어, Data Control Language
GRANT
DB에 대한 권한 부여
REVOKE
DB에 대한 권한 회수