📌 Etc./자격증

[SQLD] 최종 빈출 개념 정리

nerowiki 2024. 8. 24. 03:11
728x90

🔍  Inline View에서는 연관 서브 쿼리를 활용할 수 없음

SELECT C.광고매체명, B.광고명, A.광고시작일자
FROM 광고게시 A, 광고 B, 광고매체 C, [ㄱ] D
WHERE A.광고시작일자 = D.광고시작일자
AND A.광고매체ID = D.광고매체ID
AND A.광고ID = B.광고ID
AND A.광고매체ID = C.광고매체ID
ORDER BY C.광고매체명;

ㄱ 에 다음과 같은 연관 서브 쿼리를 활용하는 방법은 적용될 수 없는 점 유의

SELECT D.광고매체ID, MIN(D.광고시작일자) AS 광고시작일자
FROM 광고게시 D
WHERE D.광고매체ID = C.광고매체ID
GROUP BY D.광고매체ID

 

🔍  GROUP BY 절은 NULL 데이터도 집계에 포합합니다.

🔍  기본적인 정렬 순서는 오름차순(ASC) 입니다.

🔍  오라클에서는 NULL 값을 가장 큰 값으로 간주합니다. 즉, 오름차순 정렬일 경우 가장 마지막에 위치합니다.

🔍  SQL Server에서는 NULL 값을 가장 작은 값으로 간주합니다. 즉, 오름차순 정렬일 경우 가장 앞쪽에 위치합니다.

🔍  여러 테이블로부터 필요한 칼럼을 조회하기 위해 전체 테이블 개수에서 최소 N-1 개만큼의 JOIN 조건이 필요합니다.

🔍  NULLIF(표현식1, 표현식2) 함수는 표현식 1, 표현식 2가 같으면 NULL, 아니면 표현식 1을 반환합니다.

🔍  NVL(인수1, 인수2) 함수는 인수1이 NULL이면 인수2를 반환하고, NULL이 아니면 그대로 인수1을 반환합니다.

🔍  USING 조건절을 이용한 EQUI JOIN 에서도 JOIN 칼럼에 대해 ALIAS나 테이블 이름 같은 접두사를 붙일 수 없습니다.

USING T.STADIUM_ID = S.STADIUM_ID
-> USING(STADIUM_ID)

 

🔍  CROSS JOIN 은 테이블 간 조건이 없는 경우 생길 수 있는 모든 데이터 조합을 말합니다.

🔍  UNION 결과물의 컬럼명은 첫번 째 테이블의 컬럼명을 따라갑니다.

🔍  집합 연산자를 사용한 SQL의 ORDER BY 절은 가장 마지막 줄에 한번만 사용할 수 있습니다.

🔍  SET OPERATOR (수직 결합) 종류

1) UNION : 합집합
2) INTERSECT : 교집합
3-1) MINUS : 차집합 (ORACLE)
3-2) EXCEPT : 차집합 (SQL-SERVER)
4) UNION ALL : 합집합 (ALL만 중복 인정)
SET OPERATOR 이용한 결합은 위치 기반(POSITIONAL 방식) 결합을 실시합니다.
복수의 SET OPERATOR의 경우 위, 아래 - 위, 아래 순서로 연산이 이루어집니다.

 

🔍  전체 합계와 동시에 그룹별 합계를 한번에 구하고 싶은 경우 ROLLUP, CUBE, GROUPING SETS 함수를 사용합니다.

 

🔍  CUBE 함수와 ROLLUP 함수는 인자가 1개일 때는 결과가 동일합니다.

ROLLUP 함수 : 하나씩 증가하는 형태
GROUP BY ROLLUP(A) - 전체 합계, 칼럼 A소계
GROUP BY ROLLUP(A, B) - 전체 합계, 칼럼 A소계, 칼럼 A, B 조합 소계
CUBE 함수 : 모든 가능한 것
GROUP BY CUBE(A) - 전체 합계, 칼럼 A 소계
GROUP BY CUBE(A, B) - 전체 합계, 칼럼 A 소계, 칼럼 B 소계, 칼럼 A, B 조합 소계
* 가능한 모든 조합의 소계 및 합계를 생성하기 때문에 시스템에 무리가 갈 수 있다.
GROUPING SETS 함수
GROUP BY GROUPING SETS(A) - 칼럼 A 소계
GROUP BY GROUPING SETS(A, B) - 칼럼 A 소계, 칼럼 B 소계

 

🔍  계층형 질의

START WITH : 계층 구조 전개의 시작 위치 지정
CONNECT BY : 다음에 전개 될 자식 데이터 지정
PRIOR : CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정
PRIOR 자식 = 부모 형태를 사용하면 계층 구조에서 부모->자식 방향으로 전개하는 순 방향 전개를 함
반대는 역 방향 전개
NOCYCLE : 동일한 데이터가 전개되지 않음
ORDER SIBLINGS BY : 형제 노드 간의 정렬 수행
LEVEL : 루트 데이터면 1, 그 하위 데이터면 2, LEAF 데이터까지 1씩 증가
CONNECT_BY_ISLEAF : 해당 데이터가 리프 데이터면 1, 아니면 0
CONNECT_BY_ISCYCLE : 해당 데이터가 조상이면 1, 아니면 0 (CYCLE 옵션 사용했을 시에만 사용 가능)
SYS_CONNECT_BY_PATH : 루트 데이터부터 현재 전개할 데이터까지 경로 표시
CONNECT_BY_ROOT : 현재 전개할 데이터의 루트 데이터를 표시 (단항 연산자)

 

🔍  다중 칼럼 서브 쿼리는 서브쿼리 결과로 여러 개의 칼럼이 반환되어 메인 쿼리의 조건과 비교되는데,
SQL Server에서는 현재 지원하지 않는 기능입니다.

 

🔍  윈도우 함수 모음

[순위 관련 함수]
- RANK
  : 파티션 내의 ORDER BY에 의한 순위를 구하는 함수로 동일한 순위에 대해 동일한 순위를 부여 ex) 1, 2, 2, 4
- DENSE_RANK
  : 순위를 구하는 함수로 동일한 순위를 하나의 등수로 취급 ex) 1, 2, 2, 3
- ROW_NUMBER
  : 동일한 값이라도 고유한 순위 부여 ex) 1, 2, 3, 4
[집계 관련 함수]
- SUM
- MAX, MIN
- AVG
- COUNT
[행 순서 관련 함수] - SQL Server 지원 X
- FIRST_VALUE
  : 파티션 별 윈도우의 처음 값
- LAST_VALUE
  : 파티션 별 윈도우의 마지막 값
- LAG
  : 파티션 별 윈도우에서 이전 몇 번째 행의 값
- LEAD
  : 파티션 별 윈도우에서 이후 몇 번째 행의 값
[비율 관련 함수]
- RATIO_TO_REPORT
  : 파티션 내 주어진 칼럼 값의 합계에 대한 행별 백분율을 소수점으로 구하는 함수
- PERCENT_RANK
  : 파티션 별 윈도우에서 제일 먼저 나오는 것을 0으로 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 구함 
- CUME_DIST
  : 파티션 별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 구하는 함수
- NTILE
  : 파티션 별 전체 건수를 주어진 인자로 N등분한 결과를 반환

 

🔍  GROUP BY 및 집계함수를 사용하지 않고 HAVING 절을 사용한다고 해서 SQL 문장 오류가 발생하지 않습니다.

🔍  단일 행 서브쿼리의 비교 연산자는 다중 행 서브쿼리 비교 연산자로 사용할 수 없지만 반대의 경우는 가능합니다.

 

🔍  실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있습니다.

🔍  뷰의 특징 및 사용 장점

테이블은 실제 데이터를 가지고 있는 반면, 뷰는 실제 데이터를 가지고 있지 않습니다. (가상 테이블)
뷰는 실행 시점에 SQL 재작성하여 수행됩니다.
1. 독립성
  : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됩니다.
2. 편리성
  : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있습니다.
3. 보안성
  : 직원의 급여 정보와 같이 숨기고 싶은 정보가 존재할 때 사용할 수 있습니다.

 

🔍  산술 연산자의 우선 순위는 (), *, /, +, - 의 우선순위를 가집니다.

 

🔍  DROP과 TRUNCATE는 Auto Commit, DELETE은 사용자 Commit으로 수행됩니다.

DROP TRUNCATE DELETE
DDL DDL (일부 DML 성격 가짐) DML
Rollback 불가능 Rollback 불가능 Commit 이전 Rollback 가능
Auto Commit Auto Commit 사용자 Commit
테이블이 사용했던 Storage 모두 Release 테이블 사용했던 Storage 중 최초 테이블 생성 시 할당 된 Storage만 남기고 Release 데이터를 모두 Delete 해도 사용했던 Storage는 Release 되지 않음
테이블의 정의 자체를 완전 삭제 테이블을 최소 생성된 초기 상태로 만듦 데이터만 삭제