*중간고사를 공부하면서 이거는 시험문제로 나왔으면 좋겠다는 문제를 개인적으로 만들어서 토요일까지 제출.
시험 출제자 이름 같이 적어줘 ㅋㅋㅋ 너무 어려워서도 ㄴㄴ 너무 쉬워서도 ㄴㄴ
좋은 문제~~~~ 하고싶은 사람은 꼮내래~~ 시험문제를 받아보면 왜 만들어내라고 했는지를 알게됨.
*조인 (Join)
여러개의 테이블의 컬럼들의 결과를 하나의 결과값으로 출력하기 위한 방법
select *
from dept;
deptno:부서번호
dname:부서명
loc:부서위치
문제85. 사원번호, 이름, 월급, 부서위치, 부서번호를 출력하시오!
select empno, ename, sal, loc, emp.deptno
frm emp, dept
where emp.deptno=dept.deptno;
select empno, ename, sal, loc, dept.deptno
from emp, dept
where emp.deptno=dept.deptno;
select emp.empno, emp.ename, emp.sal, dept.loc, dept.deptno
from emp, dept
where emp.deptno=dept.deptno;
select e.empno, e.ename, e.sal, d.loc, d.deptno
from emp e, dept d
where e.deptno=d.deptno;
select emp.empno, e.ename, e.sal, d.loc, d.deptno
from emp e, dept d
where e.deptno=d.deptno; (X)
select empno,ename,sal,loc,emp.emptno
from emp,dept
where emp.deptno = dept.deptno;
원래는 이거 다 써야된대 그래서 성능이 좋아진대
select emp.empno, emp.ename, emp.sal, dept.loc, emp.deptno
from emp,dept
where emp.deptno = dept.deptno;
select e.empno, e.ename, e.sal, d.loc, e.deptno
from emp e, dept d
where e.deptno = d.deptno;
이런식으로!!!!
근데 이거 위에 e.empno 이거를 emp.empno 해도되 ? 안해도되?
되!!!
문제 86.직업이 SALESMAN인 사원들의 이름과 직업과 부서위치를 출력하시오.
SELECT E.ENAME, D.LOC, E.JOB
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO -- 연결고리
AND E.JOB = 'SALESMAN' ; -- 검색조건
문제 87.월급이 3000이상인 사원들의 이름과 월급과 부서위치를 출력하시오.
SELECT E.ENAME, E.SAL, D.LOC
FROM EMP E ,DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL >= 3000;
문제88.DALLAS 에서 근무하는 사원들의 이름과 부서위치를 출력하시오.
SELECT E.ENAME , D.LOC
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND D.LOC = 'DALLAS' ;
WHERE E.DEPTNO = D.DEPTNO 이걸 왜 해야되냐면 잘봐
KING 이 만약 10 이라면
deptno loc
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON
킹의 부서 위치가 뭔지 나와야 되고 킹의 부서번호를 갖고 부서테이블에 가봐야지
아 10번이 뉴욕이구나~ 이렇게 조인을 해서 알아내는거.
그리고 SCOTT의 부서위치가 너무 궁금한거야. 20을 가지고 그래서 부서 테이블로 간거지.
문제89. 월급이 1000에서 3000사이인 사원들의 이름과 월급과 부서위치를 출력하시오.
SELECT E.ENAME,E.SAL,D.LOC
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO AND
E.SAL BETWEEN 1000 AND 3000;
문제 90.부서위치, 부서위치별 토탈월급을 출력하시오.
SELECT D.LOC , SUM(E.SAL)
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.LOC;
여기서 WHERE절을 안쓰면 어떻게 될까?? 나오긴 나오는데
값이 어어어어어어어ㅓ어엄청 커진다.다 조인할테니까
문제91.위의 결과에서 부서위치별 토탈월급이 9000이상인 것만 출력하시오.
SELECT D.LOC , SUM(E.SAL)
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO
HAVING SUM(E.SAL) => 9000;
SELECT D.LOC , SUM(E.SAL)
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.LOC 이걸 빠뜨렸네..
HAVING SUM(E.SAL) => 9000;
SELECT D.LOC , SUM(E.SAL)
FROM EMP E , DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.LOC
HAVING SUM(E.SAL) >= 9000;
(중간고사와 가까운 문제를 보여주면)
문제92.부서위치,부서위치별 인원수를 출력하는데 부서위치가 DALLAS는 제외하고 출력하고 부서위치별 인원수가 3명이상인 것만 출력하고 부서위치별 인원수가 높은 것부터 출력하시오.
select d.loc , count(e.ename)
from emp e , dept d
where e.deptno = d.deptno and d.loc != 'DALLAS'
group by d.loc
having count(e.name) >= 3
order by count(e.name) asc;
위에 틀린거..
select d.loc, count(e.empno)
from emp e , dept d
where e.deptno = d.deptno
and d.loc <> 'DALLAS'
group by d.loc
having count(*) >=3
order by count(*) desc;
혹은
5 select d.loc, count(*)
1 from emp e , dept d
2 where e.deptno = d.deptno
and d.loc <> 'DALLAS'
3 group by d.loc
4 having count(*) >=3
6 order by count(*) desc;
select d.loc, count(*)
from emp e , dept d
where e.deptno = d.deptno
and d.loc <> 'DALLAS' (임마를)
group by d.loc
having count(*) >=3 and <> 'DALLAS' (이렇게 쓰게되면 성능이 느려 where절에 써야된다.)
order by count(*) desc;
그래서 having절에 다쓰면안되고.. having은 그룹함수!!! 조건을 주어질때 하라는 것.
*다음주 시험 시험시간 7시 30분
1시간에서 ~ 1시간 30분 시험
15문제 ~ 20문제 (15문제 일 확률이 높다.) (SQL 작성하는게 시험문제,)
손으로 작성하면 됨. EMP와 DEPT 결과창 시험지에 보여줄거다.
sql에만 잘 작성해서 하면 된다.
공부방법 : 문제 92 직접 풀어보고 문제를 만든다는 생각으로 응용을 한다.
문제를 한번 다시 풀어보고 비교해봐라.
문제 93. 1981년도에 입사한 사원들의 이름과 월급과 부서위치와
입사일을 출력하시오.
select e.ename,e.sal,d.loc,e.hiredate
from emp e , dept d
where e.deptno = d.deptno and hiredate = '1981';
틀렸네..
select e.ename,e.sal,d.loc,e.hiredate
from emp e , dept d
where e.deptno = d.deptno and
to_char(e.hiredate,'RRRR') = '1981';
select e.ename,e.sal,d.loc,e.hiredate
from emp e , dept d
where e.deptno = d.deptno and e.hiredate between '81/01/01' and '81/12/31';
'디비1' 카테고리의 다른 글
디비 중간 요약정리!!!@@@@@@@@@@@@@ (0) | 2015.04.19 |
---|---|
디비문제풀이@@@@@@@@ (0) | 2015.04.19 |
디비1 - 4월6일월요일 - group 함수 (0) | 2015.04.06 |
디비1 - 3월30일 월요일 - 날짜형식,nvl,decode,case함수 (0) | 2015.03.30 |
디비 - 3월23일 월요일 (0) | 2015.03.23 |