[SQLD] SQL 기본 및 활용 문제풀이-2

·2023년 5월 23일
0

SQLD

목록 보기
13/18
post-thumbnail
post-custom-banner

HAVING절

  • GROUP BY절의 WHERE
  • GROUP BY절 없이도 사용이 가능하며, 이때 HAVING절의 범위는 전체그룹이다.

서브쿼리

  • 단일 행 서브쿼리의 비교 연산자 : <, <=, = 등
  • 다중 행 서브쿼리의 비교 연산자 : ALL, IN, ANY 등

💡 단일 행 서브쿼리는 다중 행 서브쿼리의 비교 연산자를 사용할 수 있다.
다중 행 서브쿼리는 단일 행 서브쿼리의 비교 연산자를 사용할 수 없다.

  • 연관 서브쿼리 : 서브쿼리가 메인쿼리 컬럼을 가지고 있음
  • 비연관 서브쿼리 : 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용

메인쿼리의 결과가 서브쿼리에 제공될 수도 있고, 서브쿼리의 결과가 메인쿼리로 제공될 수도 있으므로 실행 순서는 상황에 따라 달라진다.

UPDATE문에 WHERE절

UPDATE문을 사용할 때는 UPDATE 대상이 되는 데이터의 범위를 WHERE절에 지정해줘야 한다.

그룹 함수

  • ROLLUP, CUBE, GROUPING SETS함수는 모두 일반 그룹함수로 동일결과를 추출할 수 있다.
  • 대상 컬럼 중 집계된 컬럼 이외의 대상 컬럼 값은 NULL을 반환한다.

ROLLUP

ROLLUP(컬럼명) : 기준 컬럼의 총합, 컬럼 순서에 따라 결과가 달라진다.

GROUP BY ROLLUP(C1, C2) = 
	GROUP BY C1, C2
    UNION ALL
    GROUP BY C1
    UNION ALL
    모든 집합의 결과

CUBE

  • 결합 가능한 모든 값에 대하여 다차원적인 집계 생성, 순서 영향 X
GROUP BY CUBE(C1, C2) = 
	GROUP BY C1, C2
    UNION ALL
    GROUP BY C1
    UNION ALL
    GROUP BY C2
    UNION ALL
    모든 집합의 결과

GROUPING SETS

  • 원하는 부분의 소계만 추출하는 함수, 개별 집계, 순서 영향 X
SELECT C1, C2, SUM(C3)
FROM A
GROUP BY GROUPING SETS(C1, C2) = 
	SELECT C1, C2, SUM(C3)
    FROM A
    GROUP BY C1
    UNION ALL
    SELECT C1, C2, SUM(C3)
    UNION ALL
    FROM A
    GROUP BY C2
    UNION ALL
    모든 집합의 결과

ROLLUP, CUBE, GROUPING SETS으로 생성된 ROW는 GROUPING(컬럼) = 1이 된다.

윈도우 함수

  • 윈도우 함수는 Partition에 정해진 범위를 넘을 수 없다.
  • 결과에 대한 함수이기 때문에 결과 건수는 줄지 않는다.

순위 함수

  • RANK : 동일 값 -> 동일 순위, 1위가 2개면 그 다음 순위는 3위
  • DENSE_RANK : 동일 값 -> 동일 순위, 1위가 2개면 그 다음 순위는 2위
  • ROW_NUMBER : 동일 값 -> 고유한 순위, 1위가 2개면 다른 기준에 의해 하나는 2위가 된다.

RANK() OVER(RANK의 기준)
EX)
1. RANK() OVER(ORDER BY 추천점수 DESC)
: 추천점수가 높은 순대로 순위를 매김
2. RANK() OVER(PARTITION BY 추천경로 ORDER BY 추천점수 DESC)
: 추천경로 별로 추천점수가 높은 순대로 순위를 매김

WINDOWING절

: 함수에 대상이 되는 행 기분의 범위를 지정(SQL Server X)

  • ROWS : 물리적인 결과 행의 수
  • RANGE : 논리적인 값에 의한 범위

RANGE

RANGE BETWEEN A AND B 형식으로 사용한다.

  • UNBOUNDED PRECEDING : 최종 출력될 값의 맨 처음 ROW의 값
  • UNBOUNDED FOLLOWING : 최종 출력될 값의 맨 마지막 ROW의 값
  • CURRENT ROW : 현재 ROW의 값

RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING
현재 행의 -1부터 현재 행의 +1까지라는 의미

PL/SQL

  • PL/SQL로 작성된 Precedure, User Defined Function은 작성자의 기준으로 트랜잭션을 분할할 수 있으며, 프로시저 내에서 다른 프로시저를 호출할 경우에는 호출 프로시저의 트랜잭션과는 별도로 PRAGMA AUTONOMOUS_TRANSACTION을 선언하여 자율 트랜잭션 처리를 할 수 있다.

EXECUTE IMMEDIATE문

EXECUTE IMMEDIATE "문자열쿼리" : PL/SQL에서 쿼리를 실행하기 위해 사용하는 문장

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게
post-custom-banner

0개의 댓글