칼럼을 추가하면 전부 null
형식
alter table 테이블이름 add 칼럼이름 자료형
alter table emp add comm number;
행추가
update emp set comm = 100 where eno = 1000;
update emp set comm=80 where eno=1001;
update emp set comm = 50 where eno = 1002 ;
update emp set comm = 70 where eno = 1003;
update emp set comm = 100 where eno = 1004;
update emp set comm = 70 where eno = 1005;
update emp set comm = 90 where eno = 1006;
update emp set comm = 70 where eno=1007;
update emp set comm = 77 where eno=1008;
update emp set comm = 50 where eno = 1009;
update emp set comm = 60 where eno = 1010;
update emp set comm=60 where eno=1011;
update emp set comm = 100 where eno = 1012;
update emp set comm = 110 where eno = 1013;
update emp set comm = 150 where eno = 1014 ;
update emp set comm = 200 where eno = 1015 ;
UPDATE emp SET comm = 99 WHERE eno = 1016;
insert into emp values(2000, '홍길동','사원', sysdate, 500, 10, 1002, null);
commit;
예제
- 사원의 이름과 직책을 출력
select ename, job from emp;
- 10번 부서에 근무하는 모든 직원의 이름과 급여를 출력
select ename, salary from emp
where dno =10;
- '기획팀'에 근무하는 모든 직원의 이름과 급여를 출력
select ename, salary from emp e, dept d
where e.dno = d.dno and
dname='기획팀';
- 모든 직원에게 급여를 10% 인상
- 사원번호, 이름, 현재급여, 증가된 급여(열 이름은 '증가액'), 10% 인상된 급여(열 이름은 '인상급여') 를 사원 번호 순으로 출력- 공백이 있는 애칭으로 지어주려면 쌍따옴표로 묶어 이름을 지정해준다.
select eno, ename, salary, (salary*0.1) 증가액,(salary+salary*0.1) 인상급여
from emp
order by eno;
select eno, ename, salary, (salary*0.1) "증가액",(salary+salary*0.1) "인상급여"
from emp
order by eno;
- 기획팀에 근무하는 모든 직원의 이름과 급여 출력
select ename, salary from emp
where dno = (
select dno from dept where dname ='기획팀');
)
select ename, salary from emp
where dno = (select dno from dept where dname ='기획팀');
- 이름이 '김'으로 시작하는 모든 직원과 부서번호를 출력
select ename, dno from emp
where ename like '김%';
- 모든 직원의 최대 급여, 최소 급여, 합계 및 평균 급여를 출력합니다
select max(salary), min(salary), sum(salary), avg(salary)
from emp;
- 직책명과 직책별로 동일한 직책의 인원 수를 출력
select job, count(*)
from emp
group by job;
- 직원의 최대 급여와 최소 급여의 차액을 출력
select max(salary)-min(salary) from emp;
- 10번 부서의 구성원수와 직원들의 급여의 합계와 평균을 출력
select count(*), sum(salary), avg(salary)
from emp
where dno=10;
- 종각에 근무하는 구성원수와 직원들의 급여의 합계와 평균을 출력
select count(*), sum(salary), avg(salary)
from emp e, dept d
where e.dno = d.dno and
dloc='종각';
select count(*), sum(salary), avg(salary)
from emp
where dno in (select dno from dept where dloc='종각');
- 평균 급여가 가장 높은 부서 번호 출력
select max(avg(salary)) from emp
group by dno;
-부서 번호별로 평균 급여 출력
select dno, avg(salary) avg from emp group by dno;
- A 중에 평균 급여가 가장 높은 값 출력
select max(avg(salary))) from emp group by dno;
- A중에서 평균 급여가 B인 부서 번호를 출력
select dno
from (select dno, avg(salary) avg from emp group by dno)
where avg= (select max(avg(salary)) from emp group by dno);
- '대리'를 제외하고 각 직책별로 총 급여가 2000이상인 각 직책에 대하여 직책명과 각 직책별 평균 급여를 출력한다.
단, 평균 급여의 내림차순으로 출력
select job, avg(salary)
from emp
group by job
having sum(salary) >= 2000 and job <> '대리'
order by sum(salary) desc;
select job, avg(salary)
from emp
where job <> '대리'
group by job
having sum(salary) >=2000
order by avg(salary) desc;
- 전체 직원중에 직속 상관이 있는 직원의 수를 출력
select count(*)
from emp
where mgr is not null;
- emp 테이블에서 이름, 급여, 수당, 실수령액을 구하여 실수령이 높은 순서대로 출력
단, comm이 null인 사람은 제외
select ename, salary, comm, salary+comm 실수령
from emp
where comm is not null
order by 실수령 desc;
select ename, salary, comm, salary + comm 실수령액
from emp
where comm is not null;
select ename, salary, comm, salary + comm 실수령액
from emp;
null인 것은 연산이 되지 않아요.
select ename, salary, comm, salary + nvl(comm,0) 실수령액
from emp;
select ename, salary, comm, salary + nvl(comm, 대체값 ) 실수령액
from emp;
select avg(comm) from emp where dno=10;
select ename, salary, comm, salary + nvl(comm, ( select avg(comm) from emp where dno=10 ) ) 실수령액
from emp;
select ename, salary, comm, salary + nvl(comm,
( select avg(comm) from emp e2 where e1.dno = e2.dno ) ) 실수령액
from emp e1;
- 각 부서별로 같은 직책의 사람의 인원 수를 구하여 부서번호, 직책이름, 인원 수를 출력
select dno, job, count(*)
from emp
group by dno, job;
select (select dname from dept d where d.dno = e.dno) dname, job, count(*)
from emp e
group by dno;
- 사원이 한 명도 없는 부서의 이름을 출력
select dname from dept
where dno not in (select dinstinct dno from emp);
//사원 수를 나타내고 싶을떄
select dname, count(eno)
from dept d left outer join emp e
on d.dno = e.dno
group by dname
having count(ename) = 0;
- 같은 직책을 하는 사람의 수가 2명 이상인 직책과 인원 수를 출력
select job, count(*)
from emp
group by job
having count(*) >= 2;
- 사원 번호가 1002~1010 이하인 직원의 이름을 출력
//between 이용
select ename
from emp
where eno between 1002 and 1010;
//범위값 이용
select ename
from emp
where eno >= 1002 and eno <= 1010;
- 직원의 이름과 부서명을 출력
//조인식
select ename, dname
from emp e, dept d
where e.dno = d.dno;
//서브쿼리
select ename,
( select dname from dept d where d.dno = e.dno ) dname
from emp e;
- 직원의 이름과 관리자 이름을 출력
//조인식
select e.ename, m.ename
from emp e, emp m
where e.mgr = m.eno;
//서브쿼리
select ename,
(select ename from emp m where e.mgr = m.eno)
from emp e;
- '박규희'보다 급여를 많이 받는 사람의 이름을 출력
select ename from emp
where salary > (select salary from emp where ename = '박규희');
- '박규희'가 일하는 부서번호 혹은 '가산'에 있는 부서번호를 출력
- 다음 연산을 쓸 때는 조회하는 컬럼이 일치해야 한다.
- minus - 앞에 조회한 결과에서 뒤에 조회한 결과를 빼준다.
- union - 앞의 조회 결과에 뒤의 조회결과를 합쳐준다.
select dno from emp where ename = '박규희'
union
select dno from dept where dloc = '가산';
select dno from dept
where dno = (select dno from emp where ename ='박규희') or
dno in (select dno from dept where dloc = '가산');
- '박규희'가 일하는 동일한 근무지에 근무하는 사람의 이름을 출력
//박규희가 일하는 곳 조회
select dloc from emp e, dept d
where e.dno = d.dno and ename ='박규희';
//근무지가 박규희가 일하는 곳에서 일하는 사람의 이름
select ename from
emp e, dept d
where e.dno = d.dno and
dloc = (select dloc from emp e, dept d where e.dno = d.dno and ename ='박규희');
'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글
기본키와 참조키의 설정 (0) | 2024.06.19 |
---|---|
제약의 종류와 설정 (0) | 2024.06.18 |
3개 이상 테이블 Outer join 하기 (2) | 2024.06.17 |
셀프 조인 (0) | 2024.06.12 |
데이터 베이스 having (0) | 2024.06.12 |