데이터 제어어(DCL : Data Control Language)
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.
테이블 칼럼에 대한 정의 변경
- [Oracle]
ALTER TABLE 데이블명
MODIFY 칼럼명1 데이터 유형 [DEFAULT 식][NOT NULL], 칼럼명2 데이터 유형 ...);
- [SQL Server]
ALTER TABLE 테이블명
ALTER(칼럼명1 데이터 유형 [DEFAULT 식][NOT NULL], 칼럼명2 데이터 유형...);
NULL(ASCII 코드 00번)은 공백(BALCK, ASCII 코드 32번)이나 숫자 0 (ZERO, ASCII 48)과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 떄의 공집합과도 다르다.
'NULL'은 '아직 정의되지 않은 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'를 의미한다.
제약조건의 종류
- PRIMARY KEY(기본키)
- UNIQUE KEY(고유키)
- NOT NULL
- CHECK
- FOREIGN KEY(외래키)
테이블 생성의 주의사항
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
- 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다.
- 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
- 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)
- 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
- 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
- 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
- A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
테이블의 불필요한 칼럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 삭제할 컬럼명;
테이블에 데이터를 입력하는 두 가지 유형
INSERT INTO 테이블명 (COLUMN_LIST)
VALUES(COLUMN_LIST에 넣을 VALUE_LIST);
INSERT INTO 테이블명
VALUES(전체 COLUMN에 넣을 VALUE_LIST)
입력된 데이터의 수정
UPDATE 테이블명
SET 수정되어야하는 칼럼명 = 수정되기 원하는 새로운 값;
테이블에 입력된 데이터 조회
SELECT [ALL/DISTINCT] 칼럼명1, 칼럼명2, ,,,
FROM 테이블명;
- ALL : Default 옵션이므로 별도로 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다.
- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다. 테이블 구조를 오나전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.
트랜잭션의 특성
- 원자성(atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야한다. (all or nothing)
- 일관성(consistency) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
- 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
- 지속성(durability) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 ROLLBACK(롤백) 기능을 사용한다.
롤백(ROLLBACK)은 데이터 변경 사앟ㅇ이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
BEGIN TRANSACTION으로 트랜잭션을 시작하고 COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 트랜잭션을 종료한다.
ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점 까지 모두 ROLLBACK이 수행된다.
저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK)할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
[ORACLE]
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1;
[SQL SERVER]
SAVE TRANSACTION SVRT1;
...
ROLLBACK TRANSACTION SVTR1;
WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
- 칼럼(COLUMN)명(보통 조건식의 좌측에 위치함)
- 비교 연산자
- 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
- 비교 칼럼명(JOIN 사용시)
연산자의 우선순위
1. 괄호로 묶은 연산
2. 부정 연산자(NOT)
3. 비교 연산자(=, >, >=, <, <=)와 SQL 비교 연산자(BETWEEN a AND b, IN (list), LIKE, IS NULL)
4. 논리 연산자 중 AND, OR의 순으로 처리
NULL의 연산
- NULL 값과의 연산(+, -, *, / 등)은 NULL 값을 리턴
- NULL 값과의 비교연산(=, >, >=, <, <=)은 거짓(FALSE)을 리턴
- 특정 값보다 크다, 작다 라고 표현할 수 없음
부정 비교 연산자
!= : 같지 않다.
^= : 같지 않다.
<> : 같지 않다.
(ISO 표준, 모든 운영체제에서 사용 가능)
NOT 칼럼명 = : ~와 같지 않다.
NOT 칼럼명 > : ~보다 크지 않다.
BETWEEN a AND b
a와 b의 값 사이에 있으면 된다.(a와 b 값이 포함됨)
IN(list)
리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.
함수는 벤더에서 제공하는 함수인 내장 함수(Built-in Function)와 사용자가 정의할 수 있는 함수(User Defined Function)로 나눌 수 있다.
내장 함수는 다시 단일행 함수(Single-Row Function)와 다중행 함수(Multi-Row Function)로 나눌 수 있으며, 다중행 함수는 집계 함수(Aggregate Function), 그룹 함수(Group Function), 윈도우 함수(Window Function)로 구분된다.
DUAL 테이블의 특성
- 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.
- SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
- DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.
NULL의 특성
- 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
- 널 값을 포함하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 떄 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.
'자격증 > SQLD' 카테고리의 다른 글
SQLD - SQL 활용 (0) | 2021.05.28 |
---|---|
SQLD - 데이터 모델과 성능 (0) | 2021.05.26 |
SQLD 자격증 정리 02 (0) | 2021.05.24 |
SQLD 자격증 정리 01 (0) | 2021.05.19 |