
오라클의 기본 설정은 모든 행를 조인을 수행한 것중에서 내가 원하는 행만 남기기(where)
조건을 안 주면 테이블의 행을 모두 연결함

select *
from
(select sub.*,rownum sunbun
from
(select empno,ename,sal
from emp
order by sal desc) sub)
where sunbun between 6 and 10
-> select 안에 select
-> table 생성 후 선택, 생성 후 선택
select ename,sal
from emp
where sal>=3000;
select ename
from emp
where mgr is null;
select ename,comm
from emp
where comm is not null;
select ename,job
from emp
where ename like 'A%;
5. 부서 번호가 20인 직원 중 급여가 가장 높은 직원의 이름과 급여를 조회하기
select ename,sal
from emp
where deptno = 20 and sal=(select max(sal) from emp where deptno=20) ;
select ename,sal
from emp
where deptno=20 and sal=max(sal)
-- where절에서는 max 사용불가
select deptno, count(*) from emp
group by(deptno);
7.급여의 합계가 5000이상인 부서의 부서 번호와 급여 합계를 조회하기
select deptno,sum(sal)
from emp
group by(deptno)
having sum(sal)>=5000;
8.부서별 최고 급여를 받는 직원의 이름과 급여를 조회하기
select deptno,ename,sal
from emp
where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);
=> 칼럼 2개 비교 가능함
<나의 오답>
select ename,sal
from emp
where sal in (select max(sal) from emp group by deptno);
왜 안되는가? sal만 비교하기에 각 부서의 최대값이 안 나올수도 있음

만약 20번 부서에서 sal이 2850이 있다면 조회되어 각 부서의 최대값이 안 나옴
9.급여가 부서별 평균 급여보다 높은 직원의 이름, 급여 조회하기
select ename,sal
from emp e1
where sal >any(select avg(sal) from emp where deptno= e1.deptno );

<나의 오답>
select ename,sal
from emp
where sal >any (select avg(sal) from emp group by(deptno));

10. 모든 직원의 급여와 평균 급여의 차이를 계산하시오
select ename,sal, sal -(select avg(sal) from emp) diff
from emp;








제약 조건 변경 시 alter : 제약 조건을 넣는다는 것은 아예 바꾸는 거임
칼럼 옆에 선언하는 제약 조건을 칼럼수준에서 정의 했다라고 말함 = column level 제약 조건
테이블를 정의 할때 선언하는 제약조건은 = table level 제약 조건 -> 칼럼명이 들어가야 함
not null은 테이블 수준에서 정의할 수 없음
개발할 때는 제약 조건 없이 만든 후에 조건을 넣음
dept2 테이블과 emp2 테이블을 여러번 만들고 삭제하고를 반복해 보세요
(제약 조건 적절히 부여하기)
만들어진 테이블에 row를 제약조건을 위배하지 않고 추가 해보세요.
제약조건을 위배하는 다양한 테스트를 해 보세요.
부모 - 자식 간의 관계가 이어져 있으면 자식을 먼저 삭제하고 부모를 삭제해야 함
자신의 직속 상관이 'KING' 인 사원의 이름과 급여를 출력해 보세요.
**서브쿼리랑 join으로 둘다 풀기
(일단 먼저 테이블 만들고 where 조건 생각하기)
select e1.ename,e1.sal,e2.ename manager_name
from emp e1
join emp e2 on e1.mgr=e2.empno
where e2.ename='KING'
단일행, 다중행 서브쿼리 예제문제,,,,


