본문 바로가기
Kosta DevOps 과정 280기/Java

테이블 컬럼 추가하기 + 기존 내용 예제 + union, minus

by 롯슈83 2024. 6. 18.

칼럼을 추가하면 전부 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