본문 바로가기
Develop/CS

SQL문 기초

by 연로그 2021. 1. 4.
반응형
-- 스키마: db 구조와 제약 조건에 관하 전반적인 명세
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자id;

-- 도메인 정의
CREATE DOMIAN 도메인명 [AS] 데이터타입
	[DEFAULT 기본값]
	[CONSTRAINT 제약조건명 CHECK(값)];

-- 뷰 정의. SELECT문 결과를 뷰로 생성
CREATE VIEW 뷰명(속성명)
AS SELECT문;

-- 인덱스 정의
CREATE [UNIQUE] INDEX 인덱스명  -- UNIQUE: 중복 값 X
ON 테이블명(속성명 [ASC/DESC]   -- ASC: 오름차순, DESC: 내림차순
[CLUSTER];                      -- 클러스터드 인덱스 설정

-- 테이블 생성
CREATE TABLE 테이블명 (
	속성명 타입 [DEFAULT 기본값][NOT NULL],
	PRIMARY KEY(속성),
	FOREIGN KEY(속성) REFERENCES 테이블(속성),
		[ON DELETE SET NULL]	-- 참조 테이블 삭제시 값 NULL로
		[ON UPDATE CASCADE]		-- 참조 테이블 수정시 같이 변경
	CONSTRAINT 제약조건명 CHECK(조건)
);

-- 테이블 수정
ALTER TABLE 테이블명
ADD/DROP COLUMN/ALTER 속성명;

-- 테이블 제거
DROP TABLE 테이블명 [CASCADE|RESTRICTED];

-- 권한 부여/취소
GRANT 사용자등급 TO 사용자ID [IDENTIFIED BY 암호];
REVOKE 사용자등급 FROM 사용자ID;
사용자등급: DBA 관리자, RESOURCE 생성 가능, CONNECT 단순 사용자

GRANT 권한 ON 개체 TO 사용자 [WITH GRANT OPTION];
REVOKE [GRANT OPTION FOR] 권한 ON 개체 FROM 사용자 [CASCADE];
권한 종류: ALL, SELECT, INSERT, UPDATE, ...

-- DB 반영/취소
COMMIT;
ROLLBACK [TO 위치];
SAVEPOINT;	-- 롤백 위치 저장점 지정

-- 데이터 삽입
INSERT INTO 테이블명(속성)
VALUES(값);

-- 데이터 삭제
DELETE FROM 테이블 [WHERE 조건];

-- 데이터 갱신
UPDATE 테이블명
SET 속성=데이터
[WHERE 조건];

-- 데이터 조회
SELECT [PREDICATE] 속성 [AS 별칭]
FROM 테이블명
[WHERE 조건]
[GROUP BY 속성 HAVING 조건]
[ORDER BY 속성 [ASC}DESC]];
PREDICATE: ALL, DISTINCT, DISTINCTROW(튜플 전체 대상으로 중복 제거)

연산자: = <> < LIKE(%문자열, _문자, #숫자), NOT, AND

-- 그룹 함수
- MAX(), MIN(), COUNT(), SUM(), AVG()
- STDEV(): 표준편차
- VARIANCE(): 분산

-- WINDOW 함수
- ROW_NUMBER(): 레코드에 대한 일련 번호
- RANK(): 윈도우별 순위 (공동 순위 O)
- DENSE_RANK(): 윈도우별 순위 (공동 순위 X)

-- 프로시저: 절차형 SQL을 활용해 특정 기능 수행하는 일종의 트랜지션 언어
CREATE [OR REPLACE] PROCEDURE 프로시저(파라미터)
[지역변수]
BEGIN
	SQL문;
END;

EXECUTE 프로시저;
EXEC 프로시저;
CALL 프로시저;

DROP PROCEDURE 프로시저;
-- 트리거: 이벤트 발생마다 관련 작업 자동 수행되는 절차형 SQL
CREATE [OR REPLACE] TRIGGER 트리거 [동작시기][동작] ON 테이블명
REFERENCING [NEW|OLD] AS 테이블명
FOR EACH ROW
[WHEN 조건식]
BEGIN
	SQL문;
END;

- 동작 시기: 변경전후 AFTER, BEFORE
- 동작 옵션: INSERT, DELETE, UPDATE
- NEW|OLD: 트리거 적용될 테이블의 별칭 (NEW:추가 수정, OLD: 수정 삭제 전)
- FOR EACH ROW: 각 튜플마다 트리거 적용
- A:=B: A에 B를 저장하라

DROP TRIGGER 트리거;

-- 사용자 정의 함수
CREATE [OR REPLACE] FUNCTION 함수명(파라미터)
[지역변수 선언]
BEGIN
	SQL문;
	RETURN 반환값;
END;

DROP FUNTION 함수명;

-- 제어문
IF 조건 THEN
	SQL;
ELSIF 조건 THEN
	SQL;
ELSE
	SQL;
END IF;

-- LOOP문
LOOP
	SQL;
	EXIT WHEN 조건;
END LOOP;

FOR 변수 IN 초기값..종료값
LOOP
	SQL;
END LOOP;

WHILE 조건
LOOP
	SQL;
END LOOP;

CONTINUE WHEN 조건;
GOTO 레이블;		-- 레이블은 <<레이블>> 형태로 작성

-- 커서: 쿼리문 처리 결과가 저장된 메모리 공간을 가리키는 포인터
- Oracle의 특징. MySQL에서 사용 X
- FETCH: 커서에서 원하는 결과값 추출

- 묵시적 커서: 내부에서 자동으로 생성
	SQL%FOUND	: 패치된 튜플 수 1개 이상 -> TRUE
	SQL%NOTFOUND: 패치된 튜플 수 0개 -> TRUE
	SQL%ROWCOUNT: RETURN 패치된 튜플 수
	SQL%ISOPEN	: 커서 열린 상태 -> TRUE 
				  (묵시적 커서는 자동으로 닫히기 때문에 항상 FALSE)
				  
- 명시적 커서: 사용자가 직접 정의해서 사용
	CURSOR 커서명(매개변수)
	IS
	SELECT문;	-- 커서 열릴 때 수행
	
	OPEN 커서명(매개변수);
	FETCH 커서명 INTO 변수;
	CLOSE 커서명;

스키마, 도메인, 뷰, 인덱스 정의 테이블 생성/수정/삭제 권한 부여/취소 DB 반영/취소 데이터 삽입/삭제/수정/조회 그룹 함수 윈도우 함수 프로시저 생성/실행/삭제 트리거 사용자 정의 함수 제어문 루프문 (반복문) 커서 - 묵시적 커서, 명시적 커서

반응형