본문 바로가기
SQLD/2과목

2과목 개념 (윈도우 함수 ~ 프로시저 & 트리거)

by JHyun0302 2023. 8. 6.
728x90

윈도우 함수() OVER PARTITION BY 컬럼 ORDER BY 컬럼 ASC or DESC (Rows BETWEEN A AND B)

                                                                                               or

윈도우 함수() OVER (PARTITION BY 컬럼) ORDER BY 컬럼 ASC or DESC (RANGE BETWEEN A AND B)

                                                   행 분할                                           

 

 

 

 

윈도우 함수: 순위, 집계, 행순서, 비율(함수)

OVER: 필수! OVER 내부에 파티션 & ORDER BY 들어감.

PARTITION BY(행 수 안 바뀜) ≒ GROUP BY(행 수 줄어듬) : 전체 집합을 어떤 컬럼에 따라 나눌지

ORDER BY 컬럼: 어떤 컬럼을 기준으로 순위를 정할지...

Rows BETWEEN A AND B: 대상 행 지정

 

 

DEFAULT 세팅: RANGE BETWEEN UPBOUNDED PRECEDING AND CURRENT ROW

                             현재 컬럼의 값 기준, 연산에 참여 할 행 선택

 

 

  • UPBOUNDED PRECEDING : 첫 행
  • CURRENT ROW : 현재 row 값
  • UPBOUNDED FOLLOWING : 끝 행

 

 

 

 

윈도우 함수 : 행과 행간의 관계를 정의하거나 행과 행간을 비교, 연산하는 함수 - "GROUP BY" 병행 불가

                    SELECT 결과에 윈도우 함수써도 결과 행 수는 변하지 않음.

 

 

 

[순위 관련 함수]

  • RANK : 동일한 값에 대해서는 동일한 순위를 부여 (1,2,2,4) 
                  (동점자 처리 후 그만큼 점프)
  • DENSE_RANK : 동일한 순위를 하나의 등수로 간주(1,2,2,3)
                                 (동점자 처루 후 그 다음 순위)
  • ROW_NUMBER : 동일한 값이라도 고유한 순위 부여(1,2,3,4)
                                   (동점자 처리 안함)

 

 

 

[집계 관련 함수]

 

  • SUM : 파티션별 윈도우의 합 구할 수 있다.
                ex) 같은 매니저를 두고 있는 사원들의 월급 합
  • MAX, MIN : 파티션별 윈도우의 최대,최소 값을 구할 수 있다.
                         ex) 같은 매니저를 두고 있는 사원들 중 최대 값
  • AVG : 원하는 조건에 맞는 데이터에 대한 통계 값
               ex) 같은 매니저 내에서 앞의 사번과 뒤의 사번의 평균
    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
    (현재 행을 기준으로 파티션 내에서 앞의 1건, 현재행, 뒤의 1건을 범위로 지정)
  • COUNT : 조건에 맞는 데이터에 대한 통계 값
                   ex)본인의 급여보다 50 이하가 적거나 150 이하로 많은 급여를 받는 인원수

 

 

[행 순서 관련 함수] - SQL Server 지원X

  • FIRST_VALUE : 파티션별 윈도우의 처음 값
  • LAST_VALUE : 파티션별 윈도우의 마지막 값
  • LAG : 파티션별 윈도우에서 이전 몇 번째 행의 값
  • LEAD : 파티션별 윈도우에서 이후 몇 번째 행의 값

 

[비율 관련 함수]

  • RATIO_TO_REPORT : 파티션 내 전체 SUM에 대한 행별 칼럼 값의 백분율을 소수점으로 구할 수 있다. >0, <=1
  • PERCENT_RANK : 파티션별 윈도우에서 처음 값을 0, 마지막 값을 1로 하여 행의 순서별 백분율을 구한다. 0>=,<=1
  • CUME_DIST : 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구한다. >0, <=1
  • NTILE : 파티션별 전체 건수를 인수 값으로 N등분한 결과를 구할 수 있다.

 

 

 


[DCL] : 유저 생성하고 권한을 제어할 수 있는 명령어

 

 

OracleSQL Server의 사용자 아키텍처 차이

Oracle : 유저를 통해 DB에 접속을 하는 형태, IDPW 방식으로 인스턴스에 접속을 하고 그에 해당하는 스키마에 오브젝트 생성 등의 권한을 부여받게 됨

SQL Server : 인스턴스에 접속하기 위해 로그인이라는 것을 생성하게 되며, 인스턴스 내에 존재하는 다수의 DB에 연결하여 작업하기 위해 유저를 생성한 후 로그인과 유저를 매핑해 주어야 한다. Windows 인증 방식과 혼합 모드 방식이 존재함

 

시스템 권한 : 사용자가 SQL 문을 실행하기 위해 필요한 적절한 권한

  • GRANT : 권한 부여
  • REVOKE : 권한 취소

 

GRANT CREATE USER TO SCOTT;
CONN SCOTT/TIGER(ID/PW)
CREATE USER PJS IDENTIFIED BY KOREA7;

GRANT CREATE SESSION TO PJS;

 

GRANT CREATE TABLE TO PJS;

REVOKE CREATE TABLE FROM PJS;

 

GRANT SELECT ON SCHEMA:: A_USER TO 유저명;

→ 유저에게 스키마 A(테이블 A)에 대한 SELECT 권한 부여

REVOKE SELECT ON SCHEMA::A_USER FROM 유저명; = DENY SELECT ON SCHEMA::A_USER TO 유저명; 

 

 

모든 유저는 각각 자신이 생성한 테이블 외에 다른 유저의 테이블에 접근하려면 해당 테이블에 대한 오브젝트 권한을 소유자로부터 부여받아야 한다.

 

 

DENY:유저에게 개체에 대한 권한 차단

ROLE : 유저에게 알맞은 권한들을 한 번에 부여하기 위해 사용하는 것

 

 

CREATE ROLE LOGIN_TABLE;
GRANT CREATE TABLE TO LOGIN_TABLE;

DROP USER PJS CASCADE;
CASCADE
: 하위 오브젝트까지 삭제

 

 

 


절차형 SQL : SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다, Procedure, User Defined Function, Trigger 등이 있음

 


저장 모듈 : PL/SQL 문장을 DB 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램, 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램

 

 

 

PL/SQL 특징

  1. Block 구조로 되어있어 각 기능별로 모듈화 가능
  2. 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환
  3. IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.
  4. DBMS 정의 에러사용자 정의 에러정의하여 사용할 수 있다.
  5. PL/SQL은 Oracle에 내장되어 있으므로 호환성 좋음
  6. 6. 응용 프로그램의 성능을 향상시킨다.
  7. Block 단위로 처리 -> 통신량을 줄일 수 있다.

 

 

DECLARE : BEGIN~END 절에서 사용될 변수와 인수에 대한 정의 및 데이터 타입 선언부

BEGIN~END : 개발자가 처리하고자 하는 SQL문과 여러 가지 비교문, 제어문을 이용 필요한 로직 처리

EXCEPTION : BEGIN~END 절에서 실행되는 SQL문이 실행될 때 에러가 발생하면 그 에러를 어떻게 처리할지 정의하는 예외 처리부

 

 

T-SQL : 근본적으로 SQL Server를 제어하는 언어

             CREATE Procedure schema_NAME.Procedure_name

 

Trigger : 특정한 테이블에 INSERT, UPDATE, DELETE와 같은 DML문이 수행되었을 때, DB에서 자동으로 동작하도록 작성된 프로그램, 사용자 호출이 아닌 DB 자동 수행 - TCL(COMMIT, ROLLBACK, SAVEPOINT) 불가능!

 

 

 

프로시저와 트리거의 차이점
프로시저
: BEGIN~END 절 내에 COMMIT, ROLLBACK과 같은 트랜잭션 종료 명령어 사용가능.

                  EXECUTE 명령어로 실행      → EXECUTE IMMEDIATE TRUNCATE TABLE DEPT;


트리거 : BEGIN~END 절 내에 사용 불가. 생성 후 자동 실행. TCL 불가능!

 

반응형