Q ] 가장최근에 입사한 사원의 입사일과 가장 먼저 입사한 사원의 입사일을 출력하시요
A ] select max(hiredate) 최근입사 , min(hiredate) 먼저입사 from emp;
Q ] 30번 소속 사원중에서 커미션을 받는 사원의 수를 카운트 하시요.
A ] select count(deptno) from emp where deptno = '30' and nvl(comm,0) != 0;
A ] select count(*) from emp where deptno = 30 and comm > 0;
// * 로 count 해주면 null 값도 카운트 해준다.
Q ] mgr 컬럼(상관의 사원번호)에서 중복을 배제하고 출력하시요.
A ] select distinct(mgr) from emp; //연산이 아니므로 null 값도 출력됨.
Q ] 소속 부서별 사원의 수와 커미션을 받는 사원의 수를 카운트하시요
단 0원도 받는사원이다.
A ] select deptno, count(*) , count(comm) from emp group by(deptno);
Q ] emp 테이블에서 년도별로 사원들이 몇명 입사했는지 카운트 하시요.
A ] select substr(hiredate,1,2) "년도", count(*) "카운트"
from emp group by(substr(hiredate,1,2));
A ] select to_char(hiredate,'YYYY'),count(*)
from emp group by to_char(hiredate,'YYYY');
A ] select count(decode(to_char(hiredate,'yyyy'),'1980',1))as "1980",
count(decode(to_char(hiredate,'yyyy'),'1981',1))as "1981",
count(decode(to_char(hiredate,'yyyy'),'1982',1))as "1982",
count(decode(to_char(hiredate,'yyyy'),'1987',1))as "1987"
from emp;
=> 문자형으로 바꾼 입사년도를 1980년과 비교를 하여서 true 면 1 의 값을 주었다.
(decode 1번식 , '1980',1)
1의 값을 준 (1980년도) 것을 count 하였다.
Q ] 부서별 평균급여를 구하고 그 결과 평균급여가 2000 이상인 부서만 출력하세요.
A ] select deptno , avg(sal) from emp group by deptno
HAVING avg(sal) >= 2000;
Q ] 1981년 5월 31일 이후 입사자 중에서
커미션이 null 이거나 0 인 사원의 커미션은 500으로
그렇지 않으면기존 커미션을 출력하라.
A ] select ename 입사자 , hiredate ,
decode(comm,null,500,
0 , 500,
comm)커미션
from emp
where hiredate > to_date(19810531)
order by ename;
Q ] 부서별로 월급의 최대값과 최소값을 구하되 최대 급여가 2900 이상인 부서만 출력
A ] select deptno, max(sal) "최대값",min(sal)"최소값" from emp
group by deptno
having max(sal) >= 2900;
Q ] 부서별 평균 급여를 구하고 그결과 평균 급여가 2000 이상인 부서만 출력하세요.
A ] select deptno , avg(sal) from emp
group by deptno
having avg(sal) >=2000;
Q ] 급여가 1000 이상인 사람들로 부서별 평균 급여를 구하고
그결과 평균 급여가 2000이상인 부서만 출력하세요.
A ] select deptno ,avg(sal) from emp
where sal >= 1000
group by deptno
having avg(sal) >=2000;
select job,count(*) cnt
from emp
where deptno in(10,20,30)
group by job
having count(*) > 2;
=> 그룹화해서 조건을 주겟다.
Q ] 이름에 'LA' 가 들어잇지 않고
job의 월급의 합이 1000이상이 job 그룹과
job에 속한 사원수를 출력하시요
job , 카운트 , 합 형식으로 나오게 하시요.
A ] select job ,count(*)"카운트" , sum(sal)"합"
from emp
where ename not like '%LA%'
group by job
having sum(sal) >= 1000;
Q ] 'DALLAS' 에서 근무하는 사원의 이름과 직급과 월급과 근무지를 출력하는 쿼리문을 작성하시요
A ] select deptno from dept where LOC = 'DALLAS';
A ] select ename , job , sal from emp where deptno = 20;
=> 위 두 쿼리문을 아래의 한쿼리문으로 작성가능하다.
A ] select e.ename, e.job , e.sal , d.loc from emp e, dept d
where e.deptno = d.deptno AND d.loc = 'DALLAS';
Q ] 'RESERARCH' 부서에서 근무하는 사원들의 이름 , 입사일 , 월급 , 근무지 , 근무부서명 을 출력하시요
A ] select e.ename , e.hiredate , e.sal , d.loc
from emp e, dept d
where e.deptno = d.deptno AND d.dname ='RESERARCH';
Q ] 직급이 'MANAGER' 인 사원의 이름 , 월급 , 근무지 를 출력하는 쿼리문 작성
A ] select e.ename , e.sal, d.loc
from emp e , dept d
where e.deptno = d.deptno and e.job = 'MANAGER';
Q ] 'ACCOUNTING' 부서 소속 사원들의 이름과 입사일과 근무지를 출력하시요
A ] select e.ename , e.hiredate , d.loc
from emp e , dept d
where e.deptno = d.deptno and d.dname = 'ACCOUNTING';
Q ] 각사원의 급여가 몇 등급인지 살펴보는 쿼리문
A ] select ename , sal , grade from emp , salgrade
where sal between losal and hisal;
Q ] emp 테이블의 한명의 사원이름과 소속 부서명 , 급여의 등급을 출력하는 쿼리문
( 사원 테이블에는 부서 이름과 급여 등급은 없고 , 부서 번호와 급여만 있다.)
A ] select e.ename , d.dname , s.grade
from emp e, dept d , salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal;
'국비 과정 > Oracle DataBase' 카테고리의 다른 글
| 국비 - 0901 ( DELETE, MERGE, TRANSACTION ) (0) | 2022.09.01 |
|---|---|
| 국비 - 0826 ( 그룹함수 , GROUP BY 절 ,HAVING 절 , JOIN ) (0) | 2022.08.26 |
| 국비 - 0824 ( 숫자 함수 , 문자 함수 , 날짜 함수) (0) | 2022.08.24 |
| DB - 0824 예제 (0) | 2022.08.24 |
| 국비 - 0823 ( 와일드카드 , NULL , ORDER BY) (0) | 2022.08.23 |