select ename, max(sal) --일반컬럼과 그룹함수 함께 사용할 수 없다. 그럼 이름이랑 같이 출력하고싶은데 어또舊?
from emp;
--서브쿼리
--select 구문을 중첩해서 사용하는 것(where)
select ename,max(sal)
from emp;
---scott사원의 근무지 부서명을 알고시퍼
select deptno
from emp
where ename = 'SCOTT';
select dname
from dept
where deptno = 20;
--부서번호 자리에 쿼리 자체를 넣어서 출력한다.
--큰 틀이 메인쿼리 ()안에 서브쿼리
select dname
from dept
where deptno = (select deptno
from emp
where ename = 'SCOTT');
--급여를 가장 많이 받는 사원
--where절에는 그룹함수 못쓴다 계속생각
select ename,max(sal)
from emp;
select ename,sal
from emp
where sal =(
select max(sal)
from emp);
--델라스에 근무하는 사람들의 이름, 부서번호 출력하고 싶어요
select ename, deptno
from emp
where deptno = (
select deptno
from dept
where loc='DALLAS'
);
--직속 상관이 king인 사원의 이름과 급여를 조회(서브쿼리문으로 작성)
select ename,sal
from emp
where mgr = (
select empno
from emp
where ename = 'KING'
);
--값을 적는 부분을 서브쿼리로 바꾼것(아래 위 결과가 같음)
SELECT *
FROM EMP
WHERE SAL IN(5000,3000,2850);
--다중행 서브쿼리
--IN : 결과중에 하나만 만족하면 된다
-- > ANY: 결과중에 가장 작은값보다 크면 된다
-- > ALL : 결과중에 가장 큰값보다 크면된다.
SELECT *
FROM EMP
WHERE SAL IN (
SELECT MAX(SAL)
FROM EMP
GROUP BY DEPTNO
);
--ANY
SELECT *
FROM EMP
WHERE SAL > ANY (
SELECT MAX(SAL) --가장 작은값보다 크면
FROM EMP
GROUP BY DEPTNO
);
--ALL 기타는 몰라도된다
--부서가 30인 사원의 급여
SELECT ENAME,SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL --ALL 조회된 데이터를 모두 만족하는? 가장큰값보다 크면 된다ㅗㄱ??????????뭐라고??????
FROM EMP
WHERE DEPTNO = 30)
--------------------비교할 열이 여러개인 다중열 서브쿼리
SELECT *
FROM EMP
WHERE(DEPTNO,SAL) IN( --WHERE()내의 값을 각 비교한다 / AND 조건 처럼
SELCET DEPTNO,MAX(SAL)
FROM EMP
GROUP BY DEPTNO
);
'oracle' 카테고리의 다른 글
뷰 (View) (0) | 2022.10.26 |
---|---|
1019_날짜함수 (1) | 2022.10.26 |
Foreign Key(외래키) (0) | 2022.10.25 |
순위함수(ROW_NUMBER, DENSE_RANK,RANK) (0) | 2022.10.25 |
1021_제약조건(not null, unique, primary key) (0) | 2022.10.25 |