ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL) Oracle vs SQL Server 명령어 전체 비교 (2)
    🧑‍💻/SQL 2021. 3. 24. 00:04
    반응형

    이전 포스트를 참고해주세요! 😄

    [🧑‍💻/SQL] - SQL) Oracle vs SQL Server 명령어 전체 비교 (1) - DDL, DML, ...


    집합연산자

      Oracle Database SQL Server
    합집합 (중복 행 제외, 정렬 O) UNION UNION
    합집합 (중복 행 포함, 정렬 X) UNION ALL UNION ALL
    교집합 INTERSECT INTERSECT
    차집합 MINUS EXCEPT
    곱집합 CROSS JOIN CROSS JOIN


    조인

      Oracle Database SQL Server
    조건에서 동일한 값이 있는 행만 반환 테이블1 INNER JOIN 테이블2 ON|USING ( 조건 ) 테이블1 INNER JOIN 테이블2 ON ( 조건 )
    동일한 이름을 갖는 모든 컬럼에 대해 EQUI JOIN 테이블1 NATRUAL JOIN 테이블2 ON|USING ( 조건 ) 없음
    좌측 테이블로 데이터를 읽어 온다. 조건이 맞지 않으면 NULL로 채움. 테이블1 LEFT [OUTER] JOIN 테이블2 ON|USING ( 조건 ) 테이블1 LEFT [OUTER] JOIN 테이블2 ON ( 조건 )
    우측 테이블로 데이터를 읽어 온다. 조건이 맞지 않으면 NULL로 채움 테이블1 RIGHT [OUTER] JOIN 테이블2 ON|USING ( 조건 ) 테이블1 RIGHT [OUTER] JOIN 테이블2 ON ( 조건 )
    좌우측 테이블의 모든 데이터를 읽어 온다. 중복 행 삭제 테이블1 FULL [OUTER] JOIN 테이블2 ON|USING ( 조건 ) 테이블1 FULL [OUTER] JOIN 테이블2 ON ( 조건 )
    M*N 건의 데이터 조합을 반환 테이블1 CROSS JOIN 테이블2 테이블1 CROSS JOIN 테이블2


    계층형 질의

      Oracle Database
    계층 구조 전개의 시작(루트) 위치 지정 START WITH
    다음에 전개될 자식 데이터 지정 CONNECT BY 
    부모 -> 자식 순방향 전개
    자식 -> 부모 역방향 전개
    PRIOR 자식 = 부모
    PRIOR 부모 = 자식
    동일한 데이터 전개 X NOCYCLE
    동일 LEVEL 사이 정렬 ORDER SIBLINGS BY
    루트는 1, 하위 데이터는 1씩 증가 LEVEL
    리프 데이터면 1, 아니면 0 CONNECT_BY_ISLEAF
    사이클 발생하면 1, 아니면 0 CONNECT_BY_ISCYCLE
    루트부터 현재까지 경로 표시 SYS_CONNECT_ BY_PATH
    루트 표시 CONNECT_BY_ROOT


    예제로 보는 서브쿼리

      Oracle Databse SQL Server
    단일 행 서브쿼리 (결과 1건 이하)
    =, <, <=, >, >=, <>

    SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
    FROM PLAYER
    WHERE HEIGHT <= (SELECT AVG(HEIGHT) FROM PLAYER)
    ORDER BY PLAYER_NAME;
    다중 행 서브쿼리 (결과 여러 건 이하)
    IN, ALL, ANY, SOME, EXISTS
    SELECT REGION_NAME 연고지명, TEAM_NAME 팀명, E_TEAM_NAME 영문팀명
    FROM TEAM
    WHERE TEAM_ID IN (SELECT TEAM_ID FROM PLAYER WHERE PLAYER_NAME = '정현수')
    ORDER BY TEAM_NAME;
    다중 컬럼 서브쿼리 (결과 여러 컬럼 반환) SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
    FROM PLAYER
    WHERE (TEAM_ID, HEIGHT) IN (SELECT TEAM_ID, MIN(HEIGHT) FROM PLAYER GROUP BY TEAM_ID)
    ORDER BY TEAM_ID, PLAYER_NAME;
    없음

     



    그룹 함수

      Oracle Databse SQL Server
    N+1 레벨의 SubTotal 생성 / 순서 중요 ROLLUP(컬럼1[, 컬럼2, ...]) ROLLUP(컬럼1[, 컬럼2, ...])
    결합 가능한 모든 값에 대해 다차원 집계 생성 CUBE(컬럼1[, 컬럼2, ...]) CUBE(컬럼1[, 컬럼2, ...])
    개별 집계 생성 GROUPING SETS(컬럼1[, 컬럼2, ...]) GROUPING SETS(컬럼1[, 컬럼2, ...])
    ROLLUP, CUBE, GROUPING SETS에 의한 SubTotal이면 1, 아니면 0 GROUPING(컬럼) GROUPING(컬럼)


    예제로 보는 윈도우 함수

      Oracle Database SQL Server
    -M ~ +N 범위 RANGE BETWEEN M PRECEDING AND N FOLLOWING
    앞 M행 ~ 뒤 N행 범위 ROWS BETWEEN M PRECEDING AND N FOLLOWING
    1,2,2,4 동일한 값에 대해 동일한 순서를 부여 SELECT JOB, ENAME, SAL, RANK( ) OVER (ORDER BY SAL DESC)  ALL_RANK, RANK( ) OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP;
    1,2,2,3 동일한 순위를 하나의 등수로 간주 SELECT JOB, ENAME, SAL, DENSE_RANK( ) OVER (ORDER BY SAL DESC) DR FROM EMP;
    1,2,3,4 동일한 값이라도 고유한 순위 부여 SELECT JOB, ENAME, SAL, ROW_NUMBER() OVER (ORDER BY SAL DESC) RN FROM EMP;
    파티션별 카운트를 인수 값으로 N등분한 결과 SELECT ENAME, SAL, NTILE(4) OVER (ORDER BY SAL DESC) as QUAR_TILE FROM EMP
    파티션별 윈도우의 합 SELECT MGR, ENAME, SAL, SUM(SAL) OVER (PARTITION BY MGR) MGR_SUM FROM EMP;
    파티션별 윈도우의 최대값 SELECT MGR, ENAME, SAL, MAX(SAL) OVER (PARTITION BY MGR) as MGR_MAX  FROM EMP;
    파티션별 윈도우의 최소값 SELECT MGR, ENAME, HIREDATE, SAL, MIN(SAL) OVER(PARTITION BY MGR ORDER BY HIREDATE) as MGR_MIN FROM EMP;
    조건에 맞는 데이터의 평균값 SELECT MGR, ENAME, HIREDATE, SAL, ROUND (AVG(SAL) OVER (PARTITION BY MGR ORDER BY HIREDATE ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)) as MGR_AVG FROM EMP;
    조건에 맞는 데이터의 개수 SELECT ENAME, SAL, COUNT(*) OVER (ORDER BY SAL RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING) as SIM_CNT FROM EMP;
    파티션별 윈도우의 첫번째 값 SELECT DEPTNO, ENAME, SAL, FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC ROWS UNBOUNDED PRECEDING) as DEPT_RICH FROM EMP; 없음
    파티션별 윈도우의 마지막 값 SELECT DEPTNO, ENAME, SAL, LAST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) as DEPT_POOR FROM EMP; 없음
    파티션별 윈도우의 이전 N번째 행의 값 SELECT ENAME, HIREDATE, SAL, LAG(SAL) OVER (ORDER BY HIREDATE) as PREV_SAL FROM EMP WHERE JOB = 'SALESMAN'; 없음
    파티션별 윈도우의 이후 N번째 행의 값 SELECT ENAME, HIREDATE, LEAD(HIREDATE, 1) OVER (ORDER BY HIREDATE) as "NEXTHIRED" FROM EMP; 없음
    파티션 내 전체 합에 대한 행별 컬럼 값의 백분율. >0, <=1 SELECT ENAME, SAL, ROUND(RATIO_TO_REPORT(SAL) OVER (), 2) as R_R FROM EMP WHERE JOB = 'SALESMAN'; 없음
    파티션별 행의 순서 백분율. >=0, <=1 SELECT DEPTNO, ENAME, SAL, PERCENT_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) as P_R FROM EMP; 없음
    현재 행보다 작거나 같은 건수에 대한 누적 백분율. >0, <=1 SELECT DEPTNO, ENAME, SAL, CUME_DIST() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) as CUME_DIST FROM EMP; 없음

     



    DCL

      Oracle Databse SQL Server
    시스템 권한 부여 GRANT CREATE TABLE | USER | ... TO 계정; GRANT CREATE TABLE | USER | ... TO 계정;
    객체 권한 부여 GRANT SELECT | INSERT | DELETE | UPDATE ON 테이블 TO 계정;
    GRANT SELECT | INSERT | DELETE | UPDATE ON 테이블 TO 계정;
    ROLE 사용하여 권한을 한번에 부여 e.g.) CREATE ROLE LOGIN_TABLE;
    GRANT CREATE SESSION, CREATE TABLE TO LOGIN_TABLE;
    GRANT LOGIN_TABLE TO JISUNG;
    dbcreater, sysadmin, db_owner 등 제공되는 ROLE 멤버에 참여하는 방식
    시스템 권한 회수 REVOKE CREATE TABLE | USER | ...  FROM 계정; REVOKE CREATE TABLE | USER | ...  FROM 계정;
    객체 권한 회수 REVOKE SELECT | INSERT | DELETE | UPDATE ON 테이블 FROM 계정; REVOKE SELECT | INSERT | DELETE | UPDATE ON 테이블 FROM 계정;
    타 계정 테이블 접근 시 계정 이름으로 접근
    e.g.) SELECT * FROM PJS.MENU;
    스키마 이름으로 접근
    e.g.) SELECT * FROM dbo.MENU


    절차형 SQL

    PL/SQL (Oracle Database) T-SQL (SQL Server)
    CREATE Procedure Procedure_name ( argument1 mode data_type1, argument2 mode date_type2, ... ... ) IS AS ... ... BEGIN ... ... EXCEPTION ... ... END;

    DROP Procedure Procedure_name;
    CREATE Procedure schema_name.Procedure_name @parameter1 data_type1 mode, @parameter2 date_type2 mode, ... ... WITH AS ... ... BEGIN ... ... ERROR 처리 ... ... END;

    DROP Procedure schema_name.Procedure_name;
    DECLARE
         선언부(변수, 상수)
    BEGIN
         실행부
    EXCEPTION
         예외 처리부
    END
    DECLARE
         선언부(변수, 상수)
    BEGIN
         실행부
    ERROR 처리
         예외 처리부
    END

     



    2편 포스팅 마무리를 시험 끝나고 나서야 하게됐네요. 정신없이 바쁜 한 주 였어서.. ㅠㅠ
    SQLD 시험 보기 전 마지막 핸드폰으로 스르륵 보는 것을 추천합니다. 💯💯💯

    🌈 참고

    반응형

    댓글

Designed by Tistory.