SQLD(03)
이번 포스팅에서는 SQLD 자격검증 시험을 위한 내용으로 저번시간에 이어 SQL의 활용과 그에 대한 쿼리문을 토대로 공부를 이어가본다.
DML,DDL,DCL,TCL
우리는 관계형 데이터베이스를 사용하면서 데이터를 조작하기 위해 사용자를 만들기도 하고 테이블을 설계하여 데이터를 저장한다. 그 때 마다 각각의 필요한 언어들이 존재하는데 그 중 DDL/DML/DCL/TCL에 대해 알아보자
DML : Data Manipulation Language
데이터 조작어인 DML은 실제 테이블에 존재하는 데이터를 CRUD 하기 위해 사용하는 언어다
- SELECT : 데이터를 조회하기 위한 명령어로 RETRIEVE 라고도 한다.
- INSERT : 테이블에 데이터의 값을 넣기 위한 명령어이다.
- UPDATE : 존재하는 데이터의 값을 수정하기 위한 명령어이다.
- DELETE : 데이터를 제거하기 위한 명령어이다.
DDL : Data Definition Language
데이터 정의어인 DDL은 테이블의 구조를 정의하기 위한 언어이다.
- CREATE : 테이블을 생성하기 위한 명령어이다.
- ALTER : 기존의 테이블을 수정하기 위한 명령어이다.
- DROP : 테이블이나 컬럼의 구조를 지우기 위한 명령어이다.
- RENAME : 테이블의 이름을 변경하기 위한 명령어이다.
- TRUNCATE : 테이블을 초기화 하며 구조는 그대로 남는 명령어이다.
Orecle의 경우 DDL을 사용하면 오토 커밋이 적용되고 SQL server는 오토 커밋이 되지 않는다.
DCL : Data Control Language
데이터 베이스를 사용하는 권한을 주고 회수하기 위한 언어이다.
- GRANT : 데이터 베이스에 접근하고 사용하도록 권한을 주고는 명령어로 그온투 (GRANT 권한 ON 테이블 TO 사용자)로 외운다.
- REVOKE : 권한을 회수하는 명령어로 리온프 (REVOKE 권한 ON 테이블 FROM 사용자)로 외운다.
DCL의 경우 ORACLE과 SQL server를 막론하고 오토커밋이 이루어진다.
TCL : Transaction Control Language
데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용하는 언어이다.
- COMMIT : 트랜잭션의 작업을 데이터베이스에 반영시키는 명령어이다.
- ROLLBACK : 데이터베이스의 마지막 커밋 시점으로 상태를 돌리는 것으로 DML을 사용하여 데이터를 조작하다 이상이 발견되면 다시 원상 복구가 가능하다.
- SAVEPOINT : 저장지점을 미리 정하는 것으로 특정시점에 대해 작업을 돌릴 수 있어 대량의 작업에 대한 에러에 있어 미리 준비할 수 있다.
- SET TRANSACTION : 트랜잭션을 지정하는 명령어이다.
연산자
연산자는 데이터를 더 효율적으로 관리할 수 있게 해주며 종류로는 비교 연산자, SQL 연산자, 논리 연산자, 부정 비교 연산자, 부정 sql 연산자가 있다.
- 비교 연산자
- = : 같음을 의미
- > : 값이 큼을 의미
- >= : 값이 크거나 같음을 의미
- < : 값이 작음을 의미
- <= : 값이 작거나 같음을 의미
- SQL 연산자
- BETWEEN a AND b : 값이 a와 b 사이임을 의미 (이상, 이하)
- IN (list) : 리스트에 있는 값중 하나라도 일치
- LIKE ‘비교 문자열’ : 비교 문자열과 형태가 일치
- IS NULL : 값이 NULL인 경우
- 논리 연산자
- a AND b : a와 b를 동시 만족
- a OR b : a와 b중 하나라도 만족
- NOT : 조건에 반대되는 결과를 리턴
- 부정 비교 연산자
- != : 같지 않음
- ^= : 같지 않음
- <> : 같지않다 (ISO의 표준으로 모든 운영체제에서 사용이 가능하다고 함)
- NOT 칼럼명 = : ~와 같지 않음
- NOT 칼럼명 > : ~보다 크지 않음
- 부정 SQL 연산자
- NOT BETWEEN a AND b : a 와 b 사이값이 아니다
- NOT IN (list) : list와 일치하지 않는다
- IS NOT NULL : NULL 값을 갖지 않는다.
연산자의 우선순의
연산자는 기본적으로 ()가 우선이며 부정, 비교 , 논리 연산자의 우선순위를 가지며 논리 연산자는 AND, OR 순으로 처리된다.
NULL의 연산
NULL은 모르는 값으로 모든 연산의 결과는 NULL(비교는 false)을 리턴하며 ORACLE에서는 ‘‘공백도 NULL로 처리된다.
NULL이 아닌 값을 얻기 위해서는 NVL/ISNULL 함수를 사용하며 주로 숫자면 0, 문자면 ‘X’를 활용한다.
NULL 관련 함수
NULL은 SQL 서버와 ORACLE과 약간의 함수의 차이가 있다
- ORACLE
- NVL(표현식1, 표현식2) : 표현식1이 NULL이면 표현식2를 리턴
- ISNULL(표현식1, 표현식2) : 표현식1이 NULL이면 표현식2를 리턴
- SQL Server
- NULLIF(표현식1, 표현식2) : 표현식1과 표현식2가 같으면 NULL 다르면 표현식1을 리턴
- COALESCE(표현식1, 표현식2, …) : 표션식들중 NULL이 아닌 최초의 표현식을 리턴
DELETE ACTION
데이터를 삭제하기 위해 사용되는 Delete에는 여러 규칙이 존재한다.
- NO ACTION(default) : 다른 관계의 delete를 우선순위로 두고 참조되는 곳이 있다면 오류를 발생시키며 삭제에 실패한다
- RESTICT : 자신의 규칙을 먼저 적용하며 나머지는 NO ACTION과 동일
- CASCADE : 고유키 값을 참조하고 참조하는 모든 테이블의 행을 같이 삭제
- SET NULL : 고유키 값을 참조하고 참조하는 모든 테이블의 컬럼을 NULL로 변경(단 해당 테이블의 컬럼이 NULL이 허용이어야함)
- SET DEFAULT : 고유키 값을 참조하고 참조하는 모든 테이블의 컬럼을 default 값으로 설정
- RESTRIC : CHILD 테이블에 PK 값이 없는 경우에만 MASTER의 삭제 허용
Transaction(트랜잭션)
DB에서 업무처리를 위한 업무의 최소 단위로 원자성, 일관성, 고립성, 지속성의 특성을 가진다.
- 원자성 (atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공으로 실행되거나 전혀 실행되지 않아야함
- 일관성 (consistency) : 트랜잭션이 실행되기 전과 후의 내용이 다르면 안됨
- 고립성 (isolation) : 트랜잭션이 실행되는 동안 다른 트랜잭션의 영향을 받아선 안됨
- 지속성 (durability) : 트랜잭션이 성공적으로 수행되면 데이터베이스에 영구적으로 저장되어야 함
Rollback(롤백)
데이터의 조작중에 에러나 취소 사항이 생겨 데이터를 이전 상태로 복구하는 작업을 말한다. 이전 시점의 BEGIN TRANSACTION으로 돌아가며 SAVEPOIT(저장점)을 지정한다면 원하는 부분으로도 롤백이 가능하다.
마무리
내용이 길어 기본편을 (02)까지 나누어 다음시간엔 함수 부분부터 정리한다.
개인적인 이해를 바탕으로 작성한 글 입니다. 피드백 언제든 환영합니다!