라벨이 서브쿼리인 게시물 표시

[Oracle] 오라클 SubQuery(서브쿼리)

서브쿼리 Sub Query가 생겨난 이유 여러 쿼리문장을 합쳐서 한 번에 사용할 수 있게 하기 위해서이다. 속도가 빠르다는 장점이 있다. 여러 쿼리 문장을 따로 실행하면 연결/해제를 반복(서버에 왔다갔다)해야 하기 때문에 성능이 저하될 수밖에 없다. Sub Query의 종류 단일행 출력 결과가 하나인 것 WHERE sal = (SELECT AVG(sal) ~~ ) 다중행 출력 결과가 여러개인 것 deptno IN (SELECT deptno FROM dept) 다중컬럼 스칼라 서브쿼리 실무에서 가장 많이 사용됨 컬럼 대신 사용될 수 있다. SELECT no, (SELECT ~) … JOIN을 걸지 않아도 되어서 편리하다. 단일행 서브쿼리 서브쿼리의 결과값이 여러 행이 아니라 단 하나의 행인 경우를 말한다. 단일행 서브쿼리의 연산자 : 비교연산자(= , !=(<>) , <= , >= , < , >) 형식 -- 메인쿼리 SELECT * FROM emp -- 서브쿼리 WHERE deptno=(SELECT ~) 예) emp테이블 : 사원의 평균 급여 = 평균보다 적게 받는 사원 정보를 출력 SELECT * FROM emp WHERE sal<(SELECT AVG(sal) FROM emp); 예) SCOTT이 근무하는 부서에 같이 근무하는 사원의 모든 정보를 출력 SELECT * FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='SCOTT'); 예) GROUP BY를 사용한 서브쿼리 : 사원의 평균 급여보다 높은 부서의 부서번호, 인원수를 출력하기 SELECT deptno,COUNT(*) FROM emp GROUP BY deptno HAVING AVG(sal)<(SELECT AVG(sal) FROM emp); 다중행 서브쿼리 서브쿼리 데이터 결과가 여러개인 방법이다. 다중행 서브쿼리는 서브쿼리의 결과가 여러 건 출력되기 때문에 단일행 연산자를 사용할 수 없다.