ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLD 자격 대비 요약
    카테고리 없음 2022. 5. 13. 10:35

    ANSI SQL로 변환 

    inner join 일반적인 join, 교집합 개념 
    cross join : T1, T2의 모든 행을 대응시킨 카테시안 프로덕트 r1xr2 
    left outer join : FROM T1 LEFT OUTER JOIN T2    왼쪽 테이블 T1 중심 조인 
    right outer join  FROM T1 LEFT OUTER JOIN T2    오른쪽 테이블 T2 중심 조인 
    full outer join: left, right join 합집합 

    https://velog.io/@gillog/ANSI-SQL%EC%9D%B4%EB%9E%80 

     

    순위함수

    top()/ top() with ties
       -top(n) : order by 절 필수아님, n개 행만 출력
       -top with ties: order by 절 필수, 중복 데이터까지 출력 

    1000, 2000, 2000, 3000
    rank()   1 2 2 4
    dense_rank() 1 2 2 3
    row_number()  1 2 3 4
    ratio_to_report()  해당 컬럼값/ 컬럼의 전체 합 

    RATIO_TO_REPORT 함수 (tistory.com)

     

     

    해쉬조인


    -해쉬조인
    한 테이블을 기반으로 메모리에 해시테이블 생성, 해시테이블내 행 대응시키기 위해 해시함수 사용
    중첩루프 조인 단점인 랜덤 액세스 부하를 피함
    https://lee-mandu.tistory.com/470

     

     

    집합 연산자(sql set operation)

    UNION : 중복을 제거, 결과 합 
    UNION ALL: 중복포함 결과합 
    INTERSECT 교집합 결과 PostgreSQL에서만? 
    MINUS 차집합결과, 첫번째 검색결과에서 두번째 검색결과 제거  

    -sql set operation(집합 연산자) 에서 중복제거를 위해 정렬작업을 하지 않는 연산자: UNION ALL 

    https://keep-cool.tistory.com/45

     

    TCL(Transanction Control Language) 명령어 

    트랜잭션 제어 명령어  
    -commit 
    -rollback 
    -savepoint 작업처리 저장점 지정  

     

    계층형 데이터 

    SELECT 
    	LEVEL ,
    	LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME ,
    	SYS_CONNECT_BY_PATH(name,'/') AS PATH 
     FROM TEST_TABLE_ONE 
     START WITH PP_LEVEL IS NULL 
     CONNECT BY PRIOR P_LEVEL=PP_LEVEL;​

    SYS_CONNECT_BY_PATH 경로로 사용할 열 지정 -START WITH 계층의 최상위가 될 조건 
    CONNECT BY PRIOR 계층을 이어주는 조건

    SELECT LEVEL
                ,LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME
                ,CONNECT_BY_ISLEAF AS LEAF
                FROM  TEST_TABLE_ONE
                    START WITH PP_LEVEL IS NULL
                    CONNECT BY PRIOR P_LEVEL=PP_LEVEL;​

     CONNECT_BY_ISLEAF 계층형 쿼리에서 해당하는 로우가 자식노드가 있는지 없는지 여부를 체크. 자식노드가 있을 경우 0 , 자식노드가 없을 경우 1

    SELECT LEVEL
                ,LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME
                ,CONNECT_BY_ROOT NAME AS ROOT_NAME 
                FROM  TEST_TABLE_ONE
                WHERE LEVEL>=2
                    START WITH PP_LEVEL IS NULL
                    CONNECT BY PRIOR P_LEVEL=PP_LEVEL;​

    CONNECT_BY_ROOT 계층형 쿼리에서 최상위 노드를 찾고자 할 경우

    https://devjhs.tistory.com/166
    https://devjhs.tistory.com/171
    https://devjhs.tistory.com/172 

     

     

     

     

    OVER절

    --OVER사용X 
    SELECT ENAME, JOB, SAL, (SELECT AVG(SAL) FROM scott.EMP) 
    FROM scott.EMP; 
    --OVER사용 
    SELECT ENAME, JOB, SAL, AVG(SAL) OVER() FROM scott.EMP;​

    SELECT 번호 
      , 날짜 
      , 수량 
      , SUM(수량) OVER(PARTITION BY 물품 ORDER BY 날짜) AS 재고 
    FROM 창고​

    group by 쓰지않고 그룹함수 쓸수 있게함 
    PARTITION BY 기준으로 합계 


    https://wakestand.tistory.com/243 

     

    LAG/LEAD 

    LAG 명시된 값을 기준으로 이전 로우의 값 반환
    LEAD 명시된 값을 기준으로 이후 로우의 값 반환
    LAG( 조건 , 순서, 디폴트) OVER ( PARTITION BY 절) 
    LEAD( 조건 , 순서, 디폴트) OVER ( PARTITION BY 절)​

    https://devjhs.tistory.com/180

     

     

    Row Chaining/ Row Migration

    Row Chaining : Row에 저장된 데이터의 크기가 너무 커서, 하나의 블록에 다 담지 못하고 두 개 이상의 데이터 블록에 저장되는 것
    Row migration : 수정한 데이터를 원래 블록에 저장하지 못하고 다른 블록에 저장하는 것

    Row chaining, Row migration (tistory.com)

     

    TRIGGER


    - trigger :OLD :NEW 

    oracle Trigger(오라클 트리거) 정의 :: 댓츠굿 (tistory.com)


    coalesce(), nullif(), decode()

    SELECT COALESCE( A, B, C) FROM T1;
    SELECT NULLIF(1,1) FROM DUAL;
    SELECT DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') FROM T1;


    COALESCE() : NVL()과 비슷함. NVL과 달리 파라미터 개수가 정해지지 않음. 파라미터 중 처음으로 NULL 아닌 값을 리턴
    NULLIF() : 두 인수가 값으면 null, 그렇지 않으면 첫번째 인수 반환.
    DECODE() : 첫번째 인수가 2번째 인수와 일치하면 3번째 인수 반환. 2+2 , 3+2인수에 같은 규칙 적용. 마지막 인수는 어느 경우에도 해당되지 않을때 반환. ELSE 반환 값은 옵션.



    [오라클/SQL] DECODE 기본 및 예제 : 조건에 따라 각각 다른 값을 입력/출력하는 분기함수 (* 타 프로그래밍 언어에서의 IF ~ THEN, IFELSE 명령어) : 네이버 블로그 (naver.com)
    SQL Server NULLIF() 함수 (w3hmong.com)
    [오라클 MySQL] COALESCE 두 개 컬럼 중 존재하는 값으로 합치고 싶을 때, 컬럼 병합하는 함수, 여러 열 NULL아닌 컬럼 찾기 (tistory.com)

     

    -sql 실행순서? 일반select  
    explain plan for 
    -nested loop join, table access 수행문 실행순서 

     

    -index? 
    -view특징 
    -분산 데이터베이스 ~투명성??? 

    -unique index scan ?? 

     

    그룹함수


    SELECT
        DEPARTMENT_ID
        ,JOB_ID
        ,SUM(SALARY)
    FROM 
        EMPLOYEES
    WHERE DEPARTMENT_ID > 80
    GROUP BY ROLLUP(DEPARTMENT_ID, JOB_ID)
    ORDER BY DEPARTMENT_ID;​

    rollup() : department_id, job_id 별 합계 산출


    SELECT
        DEPARTMENT_ID
        ,JOB_ID
        ,SUM(SALARY)
    FROM
        EMPLOYEES
    WHERE DEPARTMENT_ID > 80
    GROUP BY CUBE(JOB_ID, DEPARTMENT_ID)
    ORDER BY DEPARTMENT_ID;​

    cube(): department_id, job_id별 합계 + 종합 합계 산출

    SELECT
        DEPARTMENT_ID
        ,JOB_ID
        ,SUM(SALARY)
    FROM
        EMPLOYEES
    WHERE DEPARTMENT_ID > 80
    GROUP BY GROUPING SETS((DEPARTMENT_ID, JOB_ID), ());

     grouping set()  : 출력 원하는 합계 기준을 두번째 인자에 입력. () 입력하면 종합 합계만 산출



    [Oracle] 오라클 GROUP BY ROLLUP, CUBE, GROUPING SETS 정리 :: 마이자몽 (tistory.com)

     

    댓글

Designed by Tistory.