순수 관계 연산자
SELECT, PROJECT, JOIN, DIVIDE(현재 사용 X)
JOIN
- INNER JOIN
- CROSS JOIN
- LEFT OUTER JOIN / RIGHT OUTER JOIN
- FULL OUTER JOIN: LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일
- SELF JOIN: 한 테이블 내에서 두 칼럼이 연관 관계가 있을 경우
집합 연산자
UNION, UNION ALL, INTERSECT, EXCEPT
PRIOR
- PRIOR 자식 = 부모: 부모 → 자식 방향으로 순방향 전개
- PRIOR 부모 = 자식: 자식 → 부모 방향으로 역방향 전개
- CONNECT BY, SELECT, WHERE 절 모두 사용 가능
Oracle 계층형 질의
- START WITH: 계층 구조의 시작점을 지정하는 구문
- ORDER SIBLINGS BY: 형제 노드 사이에서 정렬 수행
- 루트 노드의 LEVEL 값은 1
서브쿼리
- 종류
- 단일 행(Single Row): =, <, ≤, >, ≥, <>
- 다중 행(Multi Row): IN, ALL, ANY, SOME, EXISTS
- 다중 컬럼(Multi Column): SQL Server에서 지원 X
- SELECT, FROM, HAVING, ORDER BY에서 사용 가능
- 연관 서브쿼리: 서브쿼리가 메인쿼리 컬럼을 포함하고 있는 형태
- 서브쿼리에서는 ORDER BY 사용 불가(메인쿼리 마지막 문장에 위치)
- 다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 사용 가능
- 스칼라 서브쿼리: SELECT절에 사용, JOIN으로 동일한 결과 추출
- 동적 뷰(Dynamic View), 인라인 뷰(Inline View): FROM 절의 서브 쿼리
- 비연관 서브쿼리: 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용(
연관서브쿼리X) - 서브 쿼리는 항상 메인쿼리에서 읽혀진 데이터에 대해 서브쿼리에서 해당 조건이 만족하는지를 확인하는 방식으로 수행된다(X)
- → 메인 쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브쿼리의 결과가 메인쿼리로 제공될 수도 있음(실행 순서는 상황에 따라 다름)
뷰
- 장점
- 독립성: 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨
- 편리성
- 보안성
- 단지 정의만 가지고 있으며, 실행 시점에 질의를 재작성하여 수행
- 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있음
ROLLUP / CUBE / GROUPING SETS
- 일반 그룹 함수를 사용하여 ROLLUP, CUBE, GROUPING SETS와 동일한 결과 추출 가능
- CUBE 그룹 함수는 인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가 큼
- ROLLUP(A, B): A를 가지고 중간집계
- CUBE(A, B): A와 B 모두 중간집계
- GROUPING SETS: 그룹별로 처리된 여러개의 SELECT문을 하나로 합친 결과를 원할 때 사용
- GROUPING: 계산된 결과는 1, 그 외는 0 표
윈도우 함수
- Partition과 Group By 구문은 의미적으로 유사
- Partition 구문이 없으면 전체 집합을 하나의 Partition으로 정의한 것과 동일
- 윈도우 함수 적용 범위는 Partition을 넘을 수 없음
- 윈도우 함수 처리로 인해 결과 건수가
줄어든다(X)
RANK
- RANK() OVER - 공동 1등 다음 3위
- DENSE_RANK(): 동일한 순위를 하나의 건수로 취급 - 공동 1등 다음 2
- ROW_NUMBER: 동일한 값이라도 고유한 순위 부여
LAG / LEAD
- LAG: 이전 행
- LEAD: 이후 행
- SQL Server 지원 X
DCL
- ROLE: DBMS 관리자가 사용자별로 권한을 관리해야 하는 부담과 복잡함을 줄이기 위하여 다양한 권한을 그룹으로 묶어 관리할 수 있도록 사용자와 권한 사이에서 중개 역할을 수행
- WITH GRANT OPTION: 다른 유저에게 동일한 권한을 줌
PL/SQL
- 변수와 상수 등을 사용하여 일반 SQL 문장을 실행할 때 WHERE절의 조건 등으로 대입할 수 있음
- Procedure, User Defined Function, Trigger 객체를 PL/SQL로 작성할 수 있음
- Procedure 내부에 작성된 절차적 코드는 PL/SQL엔진이 처리하고 일반적인 SQL 문장은 SQL실행기가 처리
- Block 구조로 되어있어 각 기능별로 모듈화 가능
- IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 함
- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용 가능
- Oracle에 내장되어 있으므로 Oracle과 PL/SQL 지원하는 어떤 서버로도 프로그램을 옮길 수 있음
- 응용 프로그램의 성능 향상
- 여러 SQL 문장을 Block으로 묶고 한 번에 서버로 보내기 때문에 통신량을 줄일 수 있음
- PL/SQL로 작성된 Procedure, User Defined Function은 전체가
하나의 트랜잭션으로 처리되어야한다(X) - execute immediate ‘TRUNCATE TABLE DEPT’
- 모든 데이터를 ROLLBACK이 불가능 하도록 삭제
- 동적 SQL 또는 DDL 실행 시
프로시저 / 트리거
프로시저 트리거
CREATE Procedure 문법사용 | CREATE Trigger 문법 사용 |
EXECUTE 명령어로 실행 | 생성 후 자동으로 실행 |
COMMIT, ROLLBACK 실행 가능 | COMMIT, ROLLBACK 실행 안됨 |
트리거
- 데이터베이스에 의해서 자동으로 호출되고 수행
- 특정 테이블에 대해 INSERT, UPDATE, DELETE 문이 수행되었을 때 호출되도록 정의
- TCL 사용 불가
- 데이터베이스에 로그인하는 작업에도 정의 가능
'++ > 자격증' 카테고리의 다른 글
[SQLD] 2과목 - SQL 기본 및 활용(1) (0) | 2023.11.17 |
---|---|
[SQLD] 1과목 - 데이터 모델링의 이해 (0) | 2023.11.11 |