++/자격증

[SQLD] 2과목 - SQL 기본 및 활용(1)

writtenbyrla 2023. 11. 17. 17:37

SQL 명령어 종류

DML (데이터 조작어) SELECT, INSERT, UPDATE, DELETE
DDL (데이터 정의어) CREATE, ALTER, DROP, RENAME
DCL (데이터 제어어) GRANT, REVOKE
TCL (트랜잭션 제어어) COMMIT, ROLLBACK
  1. 비절차적 데이터 조작어: 무슨 데이터를 원하는지
  2. 절차적 데이터 조작어: 무슨 데이터를 원하는지, 어떻게 접근해야 하는지(Oracle, SQL Server)
  3. 데이터 부속어(Data Sub Langauga): 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어
  4. Oracle에서는 DDL 문장 수행 후 자동 COMMIT
  5. SQL Server에서는 DDL 문장 수행 후 자동 COMMIT 하지 않음
  6. 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 컬럼명;

 


 

제약조건

  1. PK: UNIQUE & NOT NULL
  2. UNIQUE: NULL 가능
  3. CHECK: 데이터 무결성을 유지하기 위해 테이블의 특정 컬럼에 설정하는 제약

Delete Action

  1. Casecade
  2. Set Null
  3. Set Default
  4. Restrict: Childe 테이블에 PK 값이 없는 경우만 Master 삭제 허용
  5. No Action: 참조무결성을 위반하는 삭제/수정 액션 취하지 않음

Insert Action

  1. Automatic: Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Childe 입력
  2. Set Null
  3. Set Default
  4. Dependent: Master 테이블에 PK가 존재할 때만 Child 입력 허용
  5. No Action: 참조무결성을 위반하는 입력 액션을 취하지 않음

 

Table 삭제

DROP TRUNCATE DELETE
DDL DDL(일부 DML 성격) DML
ROLLBACK 불가능 ROLLBACK 불가능 COMMIT 이전 ROLLBACK 가능
AUTO COMMIT AUTO COMMIT 사용자 COMMIT
테이블 구조를 완전히 삭제 테이블을 최초 생성된 초기 상태로 만듦 데이터만 삭제
로그를 남기지 않음 로그를 남기지 않음 로그를 남김
  • TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 DELETE 보다 빠름

 


 

트랜잭션의 특성

  1. 원자성: 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다.
  2. 일관성: 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
  3. 고립성: 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.
  4. 지속성: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

  1. Dirty Read
    • 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
    • 이미 커밋된 데이터 X
  2. Non-Repeatable Read
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리의 결과가 다르게 나타나는 현상
  3. Phantom Read
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상

 

BEGIN TRANSACTION

  1. COMMIT 또는 ROLLBACK으로 트랜잭션 종료
  2. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK 수행
  3. COMMIT 된 것은 제외하고 ROLLBACK 됨

 


 

내장함수

  1. 단일행 함수, 다중행 함수 둘 다 여러 개의 인수가 입력되어도 단일 값 만을 반환
  2. 다중행 함수: 집계 함수, 그룹 함수, 윈도우 함수
  3. 단일행 문자형 함수: CHR(ASCII번호) : ASCII 코드 번호를 문자나 숫자로 바꾸어 줌

연산자

  1. 우선순위: 괄호 → NOT → 비교 → 논리(AND, OR)
  2. 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 관련 함수

  1. NVL(A, B) - ORACLE 함수, A의 결과값이 NULL이면 B값 출력
  2. ISNULL(A, B) - SQL Server 함수, A의 결과값이 NULL이면 B값 출력
  3. NULLIF(A, B) - A와 B가 같으면 NULL, 다르면 A 리턴
  4. COALESCE(A, B) - NULL이 아닌 최초의 표현식 리턴, 모두 NULL이면 NULL 리
  5. 1:M 관계의 두 테이블을 조인할 경우 M쪽에 다중행이 출력되므로 단일행 함수는 사용할 수 없다(x) → 사용 가능

CASE WHEN

  1. SEARCHED_CASE_EXPRESSION
  2. CASE WHEN LOC = ‘NEW WORK’ THEN ‘EAST’
  3. SIMPLE_CASE_EXPRESSION
  4. CASE LOC WHEN ‘NEW WORK’ THEN ‘EAST’

GROUP BY, HAVING

  1. GROUP BY 절에서는 ALIAS 사용 불가
  2. 집계 함수는 WEHRE 절에 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행)
  3. WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거
  4. HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시

ORDER BY

  1. GROUP BY가 있으면 순서상 마지막이므로 SELECT 기준 정렬, SELECT에 없는 컬럼으로 정렬 불가
  2. 컬럼명 대신 ALIAS 명이나 컬럼 순서를 나타내는 정수 혼용해서 사용 가능
  3. 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