내가 공부하기 위한 공간 - [데이터베이스] 6 - SQL
[SQL]
정의 : 관계 데이터베이스를 위한 표준 질의어
특징 : 비절차적, 직접 대화식/응용프로그램 삽입하여 사용가능, 끝은 세미콜론, 키워드 대소문자구분 X
정의어 : 테이블 생성,변경,삭제
조작어 : 데이터 삽입,수정,삭제,검색
제어어 : 보안 기능(접근, 사용권한 부여/취소)
[정의어]
생성 : create table
- 각 속성, 이름, 데이터타입, 기본제약사항 정의
- 기본키
- 대체키
- 외래키
- 무결성 제약조건
변경 : alter table
삭제 : drop table
[속성]
- 기본적으로 널값 허용
- 타입뒤에 NOT NULL로 차단
- 기본키는 반드시 NOT NULL(개체 무결성 제약조건, 자동)
<타입>
int, smallint
char(n)-길이n고정문자열, varchar(n)-최대길이n가변문자열
numeric(p, s)-고정소수점실수(p는소수점제외길이, s는소수점의길이)
float(n)-길이n부동소수점실수
real-부동소수점실수
date
time
datetime
[정의어 키워드]
<생성>
default-기본값 지정
primary key (속성)
unique (속성)
foreign key (속성) references (테이블)
참조하는테이블이변경될때처리
on delete no action : 삭제 못하게함
on delete cascade : 관련 투플삭제
on delete set null : 관련 투플 NULL
on delete set default : 관련투플 지정한기본값
참조되는테이블이변경될때처리
on update no action : 변경 못하도록함
on update cascade : 관련 투플 외래키값 함께변경
on update set null : 관련 투플 외래키값 NULL
on update set default : 관련 투플 외래키값 지정한기본값
check (제약조건)
constraint (고유이름) check (제약조건)-지정한제약조건에 고유이름부여
<변경>
alter table (테이블)
add (속성) (타입) ~
alter table (테이블) drop column (속성)
alter table (테이블) add constraint (고유이름) check (제약조건)
alter table (테이블) drop constraint (고유이름)
<삭제>
drop table (테이블)
[조작어 키워드 - 검색]
<기본>
select [all은 중복허용, distinct는 중복제거] (속성, *은 모든속성, 속성 as 이름은 해당 속성을 이름으로 출력-산술식가능)
from (테이블)
<조건>
select [] ()
from ()
[where 조건-비교연산자,논리연산자, 산술식, like, is null, is not null가능]
<like>-%(0개이상문자), _(1개의문자)
like ‘라이크%’ : 시작이 라이크
like ‘%라이크’ : 끝이 라이크
like ‘%라이크%’ : 라이크가 포함
like ‘라이크_ _’ : 라이크로 시작하는 5자
<null>
~
~
where (속성) is [not] null
<정렬>
~
~
order by (속성) asc-오름|desc-내림
<집계함수>
기능 : 개수, 합계, 평균, 최솟값, 최댓값의 계산
count-널은안셈, max, min, sum, avg
select (함수)(속성)[as 이름]
from (테이블)
<그룹>
~
~
group by (속성) [having 조건]
<조인>
select (테이블).(속성)
from (테이블),(테이블)
~
from (테이블1) inner join (테이블2) on (조인조건)
~
from (테이블1) left|right|full outer join (테이블2) on (조인조건)
<부속질의문>-select 안의 select
- order by 불가
- 먼저수행
- 종류에 따라 연결할 수 있는 연산자가 다름
- 단일은 일반비교연산자 가능
~
~
where ()=( select
~)
연결하는 연산자
in-질의문의결과값중일치하는것이있으면검색조건이참
not in-없으면참
exists-하나라도있으면참
not exists-하나라도없으면참
all-모두와비교한결과가참이면검색조건만족
any|some-하나라도참이면만족
[조작어 키워드 - 삽입]
<직접삽입>
insert
into (테이블)(속성리스트)
values (속성값리스트)
<부속질의문>
insert
into (테이블2)[(속성들)]
select (속성들)
from (테이블1)
-테이블1의 속성들을검색하여 테이블2에 삽입
[조작어 키워드 - 수정]
update (테이블)
set (속성)=(속성값)
- where생략하면 모든 투플을 대상
[조작어 키워드 - 삭제]
delete
from (테이블)
- where생략하면 모든 투플 삭제
[뷰]
정의 : 디른 테이블(기본테이블)로 만들어진 가상테이블
- 뷰로 다른 뷰를 만들 수 있음
- 실제 저장하지 않지만 키워드들이 일반 테이블에 대해 변환되어 수행
create view (뷰이름)(속성리스트)
as select ~
[with chech option]
<변경불가뷰>
- 기본키가 없는 뷰는 변경X(not null 속성이 없는 뷰)
- 집계함수로 새로계산된 내용 포함하는 뷰 변경X
- distinct키워드를 포함하여 정의한 뷰 변경X
- group by키워드를 포함하여 정의한 뷰 변경X
- 조인하여 정의한 뷰 변경X
<장점>
- 질의문 쉽게 작성
- 보안유지 도움
- 편리하게 관리
<삭제>
drop view (뷰이름)
[삽입 SQL]
정의 : 응용프로그램에 삽입하여 사용
- 일반 명령문이 위치할 수 있으면 어디든 삽입
- 일반 명령문과 구별하기 위해 exec sql을 붙임
- 일반변수를 sql에서 사용가능
커서 : 결과로 반환된 여러행을 한번에 하나씩 가리키는 포인터
<키워드>
exec sql begin declare section
exec sql end declare section
사이에 사용할 변수 선언
<커서필요없는삽입SQL>
행 하나만 반환하는 문
<필요한>
exec sql declare (커서이름) cursor for slect~
exec sql open (커서이름)
exec sql fetch (커서이름) into (변수리스트)-커서이동
exec sql close (커서이름)