MyCloud

Oracle SQL Query 본문

Knowledge/Database

Oracle SQL Query

Swalloow 2016. 6. 7. 20:43



Oracle SQL Query - Join


오라클에서 지원하는 다양한 SQL 쿼리문에 대해 알아보겠습니다.

먼저 JOIN 입니다. JOIN은 둘 이상의 테이블을 합쳐서 하나의 큰 테이블로 만드는 방법입니다.

JOIN은 테이블의 Foreign Key를 이용하여 참조하며,

정규화된 테이블로부터 결합된 형태의 정보를 추출할 때 사용합니다.


방법1은 여러 DBMS의 SQL 문법을 맞추기 위해 나중에 생긴 편리한 방법입니다.

따라서 방법1을 추천하지만 출력결과는 같기 때문에 상관없습니다.



1. JOIN (방법1)

// NATURAL JOIN

SELECT * FROM emp NATURAL JOIN dept;

SELECT * FROM emp JOIN dept USING (deptno);

SELECT * FROM emp JOIN dept ON emp.deptno = dept.deptno;


// OUTER JOIN

SELECT * FROM emp RIGHT OUTER JOIN dept ON (emp.deptno = dept.deptno);


2. JOIN (방법2)

SELECT * FROM EMP E1, EMP E2 WHERE E1.EMPNO = E2.MGR;

SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO (+)= DEPT.DEPTNO;







Oracle SQL Query - Group, Aggregation


Group과 Aggregation은 그룹의 결과 값을 찾고자 할 때 사용됩니다.

이를 통해 여러행으로부터 하나의 결과 값을 반환할 수 있습니다.

종류 : AVG, COUNT, MAX, MIN, SUM, STDDEV, VARIANCE



1. Aggregation

SELECT AVG(sal) FROM emp;

SELECT COUNT(empno) FROM emp;

 Aggregation은 그룹의 결과 값을 찾고자 할 때 사용됩니다.
 이를 통해 여러 행으로부터 하나의 결과 값을 반환할 수 있습니다.


2. GROUP BY

// 부서별 평균 연봉을 출력

SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;

 GROUP BY는 어떤 조건에 의해 그룹으로 묶고자 할 때 사용됩니다.

 * 주의 : 단일 SQL문은 FROM - WHERE - GROUP BY - HAVING - ORDER BY - SELECT 순서로 실행



3. HAVING

// 평균 월급이 2000 이상인 부서

SELECT deptno, AVG(sal) FROM emp

WHERE AVG(sal) > 2000

GROUP BY deptno;

 HAVING은 Aggregation 결과에 대해 다시 조건을 검사할 때 사용됩니다.

 HAVING절에는 반드시 GROUP BY 에 참여한 컬럼이나 Aggregate 함수만 사용 가능합니다.








Oracle SQL Query - Subquery


Subquery는 하나의 SQL 질의문 속에 다른 SQL 질의문이 포함되어 있는 형태입니다.

어떤 질의문이 5줄 짜리라면 상황에 따라 Subquery를 이용해서 간결하게 줄일 수 있습니다.



1. Single-Row Subquery

// 'SCOTT' 보다 월급이 많은 사람의 이름

SELECT ename FROM emp

WHERE sal > ( SELECT sal FROM emp WHERE ename = 'SCOTT' );


// 평균 월급보다 많이 받는 사람의 이름

SELECT ename, sal FROM emp

WHERE sal < ( SELECT AVG(sal) FROM emp );

 Single-Row Subquery란 Subquery의 결과가 하나의 ROW인 경우를 말합니다.

 이 경우에는  =, >, <, <>  과 같은 Operator를 사용하여 조건을 처리해야 합니다.



2. Multi-Row Subquery

// ROLE 생성, 관리

CREATE ROLE reviewer;

GRANT select any table TO reviewer;

GRANT create session, resource TO reviewer;


// 특정 ROLE을 사용자에게 GRANT / REVOKE

GRANT reviewer TO user3;

 Multi-Row Subquery란 Subquery의 결과가 둘 이상의 ROW인 경우를 말합니다.

 이 경우에는 ANY, ALL, IN, EXIST 와 같은 연산을 사용하여 조건을 처리해야 합니다.



3. TOP-K Query

// 81년도에 입사한 사람 중 월급이 가장 많은 3명

SELECT rownum, ename, sal

FROM ( SELECT * FROM emp

WHERE hiredate like '81%'

ORDER BY sal DESC)

WHERE rownum < 4;

 TOP-K Query는 오라클에서 제공하는 질의문입니다.

 ROWNUM 이라는 변수를 질의의 결과에 가상으로 부여하며,

 조건을 만족하는 상위 K개의 결과를 얻기 위해 사용합니다.



'Knowledge > Database' 카테고리의 다른 글

Oracle DDL, DML, DCL  (0) 2016.06.06
Oracle DB, SQL Developer 설치  (0) 2016.04.08
관계형 데이터베이스의 구조  (0) 2016.04.01
데이터베이스와 DBMS  (2) 2016.03.27
Comments