select 실행 순서
1. from 테이블명
2. where 조건절
3. group by 칼럼명
4. having 조건절
5. select 칼럼명1, 칼럼명2, ...
6. order by 칼럼명 [asc/desc] > 오름차순 혹은 내림차순
※ 계정 파일은 oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN 폴더안에 있는 scott.sql 파일을 활용함.
예제 table
테이블 column 설명
- empno 사원번호
- ename 사원이름
- job 직책
- mgr 매니저의 사원번호
- hiredate 입사일
- sal 봉급
- comm 성과급
- deptno 부서번호
dept 예제 table
- deptno 부서번호
- dname 부서명
- loc 장소
Sub-Query
- 하나의 SQL 문장절에 포함된 또다른 select 문장, 따라서 두번 질의를 해야 얻을수 있는 결과를
한번의 질의로 해결이 가능하게 하는 쿼리
- 용어 : Main-Query 또는 Outer-Query
Sub-Query 또는 Inner-Query 두쌍이 같은 의미이다.
- 특징 : 괄호를 반듯이 묶어야한다.
서브쿼리는 메인 쿼리의 다음 부분에 위치할수 있다.
1) select / delect / update 문의 from 절과 where 절
2) select 문의 having 절
3) insert 문의 into 절
4) update 문의 set 절
종류
1. 단일행 서브쿼리
- 서비쿼리의 실행결과가 하나의 칼럼과 하나의 행만을 리턴해주는 쿼리 (하나의 데이터만 리턴해주는 쿼리)
2. 복수행 서브쿼리
- 서브쿼리의 실행결과가 하나의 칼럼과 여러개의 행을 리턴해주는 쿼리 (여러개의 데이터만 리턴해주는 쿼리)
단일행 서브 쿼리 예제
- 'SMITH' 가 근무하는 부서명을 서브쿼리를 이용해서 출력해 보세요.
- select dname from dept where deptno = (select deptno from emp where ename='SMITH');
- 'ALLEN' 과 같은 부서에서 근무하는 사원의 이름과 부서의 번호를 출력해 보세요.
- select ename, deptno from emp where deptno = (select deptno from emp where ename='ALLEN');
- 'ALLEN' 과 동일한 직책(job) 을 가진 사원의 사번과 이름, 직책을 출력해 보세요.
- select deptno, ename, job from emp where job = (select job from emp where ename = 'ALLEN');
- 'ALLEN' 의 급여와 동일하거나 더 많이 받는 사원의 이름과 급여를 출력해 보세요.
- select ename, sal from emp where sal >= (select sal from emp where ename='ALLEN');
- 'DALLAS' 에서 근무하는 사원의 이름, 부서번호를 출력해보세요.
- select ename, deptno from emp where deptno = (select deptno from dept where loc='DALLAS');
- 'SALES' 부서에서 근무하는 모든 사원의 이름과 급여를 출력해보세요.
- select ename, sal from emp where deptno = (select deptno from dept where dname='SALES');
- 자신의 직속 상관이 'KING' 인 사원의 이름과 급여를 출력해 보세요.
- select ename, sal from emp where mgr = (select empno from emp where ename='KING');
다중행 서브 쿼리 예제
- 다중행 서브쿼리의 결과값을 조건절에서 사용할때는 반드시 다중행 연산자와 함께 사용해야한다.
( IN, ALL, ANY, EXIST)
- 급여를 3000 이상받는 사원이 소속된 부서와 동일한 부서에서 근무하는
사원들의 이름과 급여, 부서번호를 출력해 보세요.
- select ename, sal, deptno from emp where deptno in(select deptno from emp where sal >=3000);
- IN 연산자를 이용하여 부서별로 가장 급여를 많이 받는 사원의 사원번호, 급여, 부서번호를 출력해보세요.
- select empno, sal, deptno from emp where sal in(select max(sal) from emp group by deptno);
- 직책이 MANAGER 인 사원이 속한 부서의 부서번호와 부서명과 부서의 위치를 출력해보세요
- select deptno, dname, loc from dept where deptno in(select deptno from emp where job='MANAGER');
- 30번 부서의 사원중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원의 이름과 급여를 출력해보세요
- select ename, sal from emp where sal > all(select sal from emp where deptno=30);
- 직책이 'SALESMAN' 보다 급여를 많이 받는 사원들의 이름과 급여를 출력하라. (ANY 연산자 이용)
- select ename, sal from emp where sal > ANY(select sal from emp where job='SALESMAN');
- 부서번호가 30번인 사원들의 급여중 최저 급여보다 높은 급여를 받는 사원의 이름, 급여를 출력해보세요
- select ename, sal from emp where sal > any(select min(sal) from emp where deptno=30);
- 직책이 'SALESMAN' 인 사원의 최소 급여보다 많이 받는 사원들의 이름과 급여, 직책을 출력하되 'SALESMAN' 은 출력하지 않습니다. (ANY 연산자를 사용하세요
- select ename, sal, job from emp where sal > any(select min(sal) from emp where job='SALESMAN') and job !='SALESMAN';
- SMITH 와 동일한 직책을 가진 사원의 이름과 직책을 출력하세요
- select ename, job from emp where job = (select job from emp where ename='SMITH');
- 직책이 'SALESMAN' 인 사원이 받는 급여들의 최대 급여보다 많이 받는 사원들 의 이름과 급여를 출력하되 부서번호가 20번인 사원은 제외한다. (ALL 연산자 이용)
- select ename, sal from emp where sal > all(select sal from emp where job='SALESMAN') and deptno!=20;
- 직책이 'SALESMAN' 인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원 들의 이름과 급여를 출력하되 부서번호가 20번인 사원은 제외한다. (ANY 연산자 이용)
- select ename, sal from emp where sal > any (select sal from emp where job='SALESMAN') and deptno!=20;
'Oracle' 카테고리의 다른 글
Oracle sqlplus Constraint(제약조건) (0) | 2023.04.21 |
---|---|
Oracle sqlplus select JOIN (0) | 2023.04.20 |
Oracle sqlplus select Function(복수행 함수) (0) | 2023.04.20 |
Oracle sqlplus select Function(단일행 함수) (0) | 2023.04.20 |
Oracle sqlplus select (연산자) (0) | 2023.04.19 |