SQL 명령어 종류
DML (데이터 조작어) | SELECT, INSERT, UPDATE, DELETE |
DDL (데이터 정의어) | CREATE, ALTER, DROP, RENAME |
DCL (데이터 제어어) | GRANT, REVOKE |
TCL (트랜잭션 제어어) | COMMIT, ROLLBACK |
- 비절차적 데이터 조작어: 무슨 데이터를 원하는지
- 절차적 데이터 조작어: 무슨 데이터를 원하는지, 어떻게 접근해야 하는지(Oracle, SQL Server)
- 데이터 부속어(Data Sub Langauga): 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어
- Oracle에서는 DDL 문장 수행 후 자동 COMMIT
- SQL Server에서는 DDL 문장 수행 후 자동 COMMIT 하지 않음
- ROLLBACK
- Oracle: CREATE TABLE은 내부적으로 트랜잭션을 종료 시키므로 ROLLBACK해도 테이블 생성
- SQL Server: CREATE TABLE도 트랜잭션 범주에 포함되므로 ROLLBACK하면 테이블 생성 안됨
테이블 컬럼에 대한 정의 변경
1. Oracle
ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터 유형, 컬럼명2 데이터유형);
2. SQL Server - 여러 컬럼 동시 수정 X, 괄호 사용 X
ALTER TABLE 테이블명 ALTER 컬럼명1 데이터유형;
컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
제약조건
- PK: UNIQUE & NOT NULL
- UNIQUE: NULL 가능
- CHECK: 데이터 무결성을 유지하기 위해 테이블의 특정 컬럼에 설정하는 제약
Delete Action
- Casecade
- Set Null
- Set Default
- Restrict: Childe 테이블에 PK 값이 없는 경우만 Master 삭제 허용
- No Action: 참조무결성을 위반하는 삭제/수정 액션 취하지 않음
Insert Action
- Automatic: Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Childe 입력
- Set Null
- Set Default
- Dependent: Master 테이블에 PK가 존재할 때만 Child 입력 허용
- No Action: 참조무결성을 위반하는 입력 액션을 취하지 않음
Table 삭제
DROP | TRUNCATE | DELETE |
DDL | DDL(일부 DML 성격) | DML |
ROLLBACK 불가능 | ROLLBACK 불가능 | COMMIT 이전 ROLLBACK 가능 |
AUTO COMMIT | AUTO COMMIT | 사용자 COMMIT |
테이블 구조를 완전히 삭제 | 테이블을 최초 생성된 초기 상태로 만듦 | 데이터만 삭제 |
로그를 남기지 않음 | 로그를 남기지 않음 | 로그를 남김 |
- TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 DELETE 보다 빠름
트랜잭션의 특성
- 원자성: 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다.
- 일관성: 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
- 고립성: 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.
- 지속성: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점
- Dirty Read
- 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
이미 커밋된 데이터 X
- Non-Repeatable Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리의 결과가 다르게 나타나는 현상
- Phantom Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상
BEGIN TRANSACTION
- COMMIT 또는 ROLLBACK으로 트랜잭션 종료
- ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK 수행
- COMMIT 된 것은 제외하고 ROLLBACK 됨
내장함수
- 단일행 함수, 다중행 함수 둘 다 여러 개의 인수가 입력되어도 단일 값 만을 반환
- 다중행 함수: 집계 함수, 그룹 함수, 윈도우 함수
- 단일행 문자형 함수: CHR(ASCII번호) : ASCII 코드 번호를 문자나 숫자로 바꾸어 줌
연산자
- 우선순위: 괄호 → NOT → 비교 → 논리(AND, OR)
- NULL
- NULL 값과의 연산은 NULL값 리턴
- 비교연산자는 FALSE 리턴
- ORACLE: ‘’ → NULL 입력, IS NULL로 조회
- SQL Server: ‘’ → 공백값 입력, ‘’로 조회
시간 계산
1/24: 1시간(하루를 24시간으로 나눔)
1/24/60: 1분(하루를 24시간으로 나누고(1시간), 60분으로 나눔)
1/24/(60/10): 10분(하루를 24시간으로 나누고(1시간), 6분으로 나눔)
1/24/60/60: 1초
NULL 관련 함수
- NVL(A, B) - ORACLE 함수, A의 결과값이 NULL이면 B값 출력
- ISNULL(A, B) - SQL Server 함수, A의 결과값이 NULL이면 B값 출력
- NULLIF(A, B) - A와 B가 같으면 NULL, 다르면 A 리턴
- COALESCE(A, B) - NULL이 아닌 최초의 표현식 리턴, 모두 NULL이면 NULL 리
- 1:M 관계의 두 테이블을 조인할 경우 M쪽에 다중행이 출력되므로 단일행 함수는 사용할 수 없다(x) → 사용 가능
CASE WHEN
- SEARCHED_CASE_EXPRESSION
- CASE WHEN LOC = ‘NEW WORK’ THEN ‘EAST’
- SIMPLE_CASE_EXPRESSION
- CASE LOC WHEN ‘NEW WORK’ THEN ‘EAST’
GROUP BY, HAVING
- GROUP BY 절에서는 ALIAS 사용 불가
- 집계 함수는 WEHRE 절에 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행)
- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거
- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시
ORDER BY
- GROUP BY가 있으면 순서상 마지막이므로 SELECT 기준 정렬, SELECT에 없는 컬럼으로 정렬 불가
- 컬럼명 대신 ALIAS 명이나 컬럼 순서를 나타내는 정수 혼용해서 사용 가능
- NULL: ORACLE(가장 큰 값), SQL Server(가장 작은 값)
SELECT 문장 실행 순서
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
TOP() WITH TIES
정렬 시 같은 값이 있으면 같이 출력
'++ > 자격증' 카테고리의 다른 글
[SQLD] 2과목 - SQL 기본 및 활용(2) (6) | 2023.11.20 |
---|---|
[SQLD] 1과목 - 데이터 모델링의 이해 (0) | 2023.11.11 |