본문 바로가기
관리자

Programming-[Backend]/SQL

[SQLD] 9. SQL 기본 5 - WITH, GRANT, SAVEPOINT, HASH JOIN, INTERSECT, CROSS JOIN

728x90
반응형

 

1. WITH 구문

 

WITH 구문은 서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다. WITH로 지정하는 서브쿼리에 별칭을 지정할 수 있으며, 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다.

 

주로 서브쿼리문의 재사용성을 높이기 위해 사용한다. 특정 조건이나 데이터를 반복적으로 조회해야할 때, WITH 구문을 통해서 저장해놓고 사용하면 편리하다.

 

예제 )

WITH W_EMP AS
  (SELECT * FROM EMP WHERE DEPTNO = 30)
SELECT * FROM W_EMP;

 

 


 

2. DCL 문 : GRANT, REVOKE

 

DCL(Data Control Language)는 보통 잘 사용하지 않는다. 실무에서 사용하는 클라우드 서비스에서는 이를 한 단계 더 추상화한 형태로 제공한다. 그러나 그 동작원리를 알고 있어야하고, 혹시 사용해야할 경우가 있을 수 있으므로 기록한다.

 

GRANT

 

문법

privileges는 권한, object는 테이블명이라고 생각하면 되고, user는 database에 등록한 사용자 이름이다.

GRANT {privileges} ON {object} TO {user}

 

예시

GRANT SELECT, INSERT, UPDATE, DELETE ON EMP TO EMP01;

 

privileges 목록

SELECT 테이블을 조회하는 권한이다.
INSERT 테이블에 로우를 삽입하는 권한이다.
UPDATE 테이블에 로우를 갱신하는 권한이다.
DELETE 테이블에 로우를 삭제하는 권한이다.
ALTER 스키마 객체의 특성을 변경하는 권한이다.
INDEX 테이블에 인덱스를 생성하는 권한이다.
REFERENCES 테이블을 참조하는 제약조건을 생성하는 권한이다.

이외에 ALL은 테이블에 대한 모든 권한을 부여한다.

 

 

WITH GRANT OPTION

권한을 부여할 수 있는 권한을 부여하는 옵션이다. GRANT문 맨 마지막에 작성하면 된다.

 

WITH GRANT OPTION -사용자에게 권한을 부여할 수 있는 권한을 부여
-A 사용자가 B에게 부여하고, B가 C에게 부여한 후 A가 B의 권한을 취소하면 "모든 권한이" 취소된다.
WITH ADMIN OPTION -테이블에 대한 모든 권한을 부여
-A 사용자가 B에게 부여하고, B가 C에게 부여한 후 A가 B의 권한을 취소하면 "B의 권한만" 취소된다.

 

 

 

REVOKE

 

사용자의 권한을 회수한다.

 

문법

REVOKE privileges ON {object} FROM {user}

 

 


 

3. SAVEPOINT

 

SAVEPOINT는 COMMIT, ROLLBACK과 같은 TCL(Transaction Control Lanugage) 중의 하나로, 트랜잭션을 작게 분리하여 부분적으로 롤백하는 등의 관리가 가능하도록 저장하는 것이다.

 

참조 0.의 예제

SAVEPOINT t1;
INSERT INTO EMP VALUES(10, 20);
SAVEPOINT t2;
INSERT INTO EMP VALUES(20, 30);
ROLLBACK TO t2;
COMMIT;
SELECT * FROM EMP;

마지막 줄의 조회 결과는 EMP 테이블에 10, 20 값이 들어간 1개 행만 조회된다.

 

 

 


 

4. JOIN

 

EQUI 조인

EQUI 조인은 ISO 표준 SQL로는 INNER JOIN을 말한다. 두 개의 테이블 간에 일치하는 교집합 릴레이션을 기준으로 테이블들을 조인한다.

 

SELECT * FROM EMP, DEPT
WHERE EMP.DEPNO = DEPT.DEPTNO;

 

INTERSECT

INTERSECT는 두 개의 테이블에서 공통된 값을 조회한다. 두 개의 테이블에 공통된 값이 있는 컬럼을 지정하여 INTERSECT를 실행하면 공통으로 존재하는 값들이 나온다.

 

SELECT DEPTNO FROM EMP
  INTERSECT
SELECT DEPTNO FROM DEPT;

 

OUTER JOIN

left outer join은 from 테이블을 기준, right outer join은 조인하는 테이블을 기준을 한다. 그림으로 이해하는게 쉽다.

 

 

left outer join : from 테이블인 음식 테이블을 기준으로, 가게 테이블에 null인 값이 있더라도 4개 행으로 표시된다.

right outer join : join 하는 가게 테이블 기준으로 4개 행으로 표시된다.

 

만약 각 상황에서 inner join을 실행하면 외래키 가게 코드가 null인 값은 join되지 않아서 각 4개행, 2개행이 표기된다.

 

 

CROSS JOIN

 

카테시안 곱을 발생시킨다. 14개 행이 있는 테이블과 4개행이 있는 테이블에 CROSS JOIN을 하면, 14 x 4 = 56개 행이 조회된다.

 

SELECT * FROM EMP CROSS JOIN DEPT;

 

 

 

 


참조

 

0. [도서] 영진닷컴 - SQL 개발자 이론서 + 기출문제

 

1. 꿈꾸는 개발자, DBA 커뮤니티 구루비 - Tibero4 기본강좌_특권 관리

http://www.gurubee.net/lecture/2092

 

 

 

 

728x90
반응형