10. Oracle ์ค๊ฐ์ฐ์ต๋ฌธ์
26> ์ฌ์์ด๋ฆ ๋ฐ ์ฌ์๋ฒํธ, ํด๋น ๊ด๋ฆฌ์์ด๋ฆ ๋ฐ ๊ด๋ฆฌ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋, ๊ฐ ์ปฌ๋ผ๋ช ์ employee,emp#,manager,mgr#์ผ๋ก ํ์ํ์ฌ ์ถ๋ ฅํ๋ผ.
SELECT s.ename "employee", s.empno "emp#", e.ename "manager", s.mgr "mgr#"
FROM emp s, emp e
WHERE s.mgr = e.empno;
27> ๋ชจ๋ ์ฌ์์ ์ด๋ฆ,์ง์
,๋ถ์์ด๋ฆ,๊ธ์ฌ ๋ฐ ๋ฑ๊ธ์ ์ถ๋ ฅํ๋ผ.
SELECT e.ename, e.job, d.dname, e.sal, s.grade
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
AND e.sal BETWEEN s.losal AND s.hisal;
28> Smith๋ณด๋ค ๋ฆ๊ฒ ์
์ฌํ ์ฌ์์ ์ด๋ฆ ๋ฐ ์
์ฌ์ผ์ ์ถ๋ ฅํ๋ผ.
SELECT ename, hiredate
FROM emp
WHERE hiredate > (SELECT hiredate FROM emp WHERE ename = 'SMITH');
29> ์์ ์ ๊ด๋ฆฌ์๋ณด๋ค ๋จผ์ ์
์ฌํ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ, ์
์ฌ์ผ, ๊ด๋ฆฌ์์ ์ด๋ฆ, ๊ด๋ฆฌ์์ ์
์ฌ์ผ์ ์ถ๋ ฅํ๋ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช
์ Employee,EmpHiredate, Manager,MgrHiredate๋ก ํ์ํ์ฌ ์ถ๋ ฅํ๋ผ.
SELECT e.ename, e.hiredate, s.ename, s.hiredate
FROM emp e, emp s
WHERE e.mgr = s.empno AND e.hiredate < s.hiredate;
30> ๋ชจ๋ ์ฌ์์ ๊ธ์ฌ ์ต๊ณ ์ก,์ต์ ์ก,์ด์ก ๋ฐ ํ๊ท ์ก์ ์ถ๋ ฅํ๋ ๊ฐ ์ปฌ๋ผ๋ช
์ Maximum, Minimum, Sum, Average๋ก ์ง์ ํ์ฌ ์ถ๋ ฅํ๋ผ.
SELECT MAX(sal) "Maximum", MIN(sal) "Minimum", SUM(sal) "Sum", AVG(sal) "Average"
FROM emp;
31> ๊ฐ ์ง์
๋ณ๋ก ๊ธ์ฌ ์ต์ ์ก.์ต๊ณ ์ก,์ด์ก ๋ฐ ํ๊ท ์ก์ ์ถ๋ ฅํ๋ผ.
SELECT MAX(sal), MIN(sal), SUM(sal), AVG(sal)
FROM emp
GROUP BY job;
32> ์ง์
์ด ๋์ผํ ์ฌ๋ ์๋ฅผ ์ง์
๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ผ.
SELECT COUNT(job), job
FROM emp
GROUP BY job;
33> ๊ด๋ฆฌ์์ ์๋ฅผ ์ถ๋ ฅํ๋, ๊ด๋ฆฌ์ ๋ฒํธ๊ฐ ์ค๋ณต๋์ง ์๊ฒํ๋ผ. ๊ทธ๋ฆฌ๊ณ , ์ปฌ๋ผ๋ช
์ Number of Manager๋ก ์ง์ ํ์ฌ ์ถ๋ ฅํ๋ผ.
SELECT COUNT(DISTINCT(mgr)) "Number of Manager"
FROM emp;
34> ์ต๊ณ ๊ธ์ฌ์ ์ต์ ๊ธ์ฌ์ ์ฐจ์ก์ ์ถ๋ ฅํ๋ผ.
SELECT (MAX(sal) - MIN(sal))
FROM emp;
35> ๊ด๋ฆฌ์ ๋ฒํธ ๋ฐ ํด๋น ๊ด๋ฆฌ์์ ์ํ ์ฌ์๋ค์ ์ต์ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ผ. (๋จ, ๊ด๋ฆฌ์๊ฐ ์๋ ์ฌ์ ๋ฐ ์ต์ ๊ธ์ฌ๊ฐ 1000 ๋ฏธ๋ง์ธ ๊ทธ๋ฃน์ ์ ์ธ์ํค๊ณ ๊ธ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ผ.)
SELECT mgr, MIN(sal)
FROM emp
WHERE mgr IS NOT NULL
GROUP BY mgr
HAVING MIN(sal)>=1000
ORDER BY MIN(sal);
36> ๋ถ์๋ณ๋ก ๋ถ์์ด๋ฆ, ๋ถ์์์น, ์ฌ์ ์ ๋ฐ ํ๊ท ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ผ. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ปฌ๋ผ๋ช
์ ๋ถ์๋ช
,์์น,์ฌ์์ ์,ํ๊ท ๊ธ์ฌ๋ก ํ์ํ๋ผ.
SELECT e.deptno, d.dname, d.loc, COUNT(e.empno), AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname, e.deptno, d.loc;
37> Smith์ ๋์ผํ ๋ถ์์ ์ํ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ ๋ฐ ์
์ฌ์ผ์ ์ถ๋ ฅํ๋ผ. ๋จ, Smith๋ ์ ์ธํ๊ณ ์ถ๋ ฅํ์์ค
SELECT ename, hiredate
FROM emp
WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SMITH')
AND ename != 'SMITH';
38> ์์ ์ ๊ธ์ฌ๊ฐ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๋ง์ ๋ชจ๋ ์ฌ์์ ์ฌ์ ๋ฒํธ, ์ด๋ฆ, ๊ธ์ฌ๋ฅผ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ๊ณ ๊ธ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ผ.
SELECT empno, ename, sal
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp)
ORDER BY sal DESC;
39> ์ด๋ฆ์ T๊ฐ ๋ค์ด๊ฐ๋ ์ฌ์์ ์ํ ๋ถ์์์ ๊ทผ๋ฌดํ๋ ๋ชจ๋ ์ฌ์์ ์ฌ์๋ฒํธ ๋ฐ ์ด๋ฆ์ ์ถ๋ ฅํ๋ผ.
SELECT empno, ename
FROM emp
WHERE deptno IN (SELECT deptno FROM emp WHERE ename LIKE '%T%');
40> ๋ถ์์์น๊ฐ Dallas์ธ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ,๋ถ์๋ฒํธ ๋ฐ ์ง์๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT ename, deptno, job
FROM emp
WHERE deptno IN (SELECT deptno FROM dept WHERE loc = 'DALLAS');
* ๋ค๋ฅธ ๋ฐฉ๋ฒ
SELECT E.ENAME, E.DEPTNO, E.JOB
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND D.LOC='DALLAS';
41> KING์๊ฒ ๋ณด๊ณ ํ๋ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ๊ณผ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT ename, sal
FROM emp
WHERE mgr IN (SELECT empno FROM emp WHERE ename = 'KING');
42> Sales ๋ถ์์ ๋ชจ๋ ์ฌ์์ ๋ํ ๋ถ์๋ฒํธ, ์ด๋ฆ ๋ฐ ์ง์๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT d.deptno, e.ename, e.job
FROM emp e, dept d
WHERE d.dname = 'SALES';
43> ์์ ์ ๊ธ์ฌ๊ฐ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๋ง๊ณ ์ด๋ฆ์ T๊ฐ ๋ค์ด๊ฐ๋ ์ฌ์๊ณผ ๋์ผํ ๋ถ์์ ๊ทผ๋ฌดํ๋ ๋ชจ๋ ์ฌ์์ ์ฌ์ ๋ฒํธ, ์ด๋ฆ ๋ฐ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT empno, ename, sal
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp)
AND deptno IN (SELECT deptno FROM emp WHERE ename LIKE '%T%');
44> ์ปค๋ฏธ์
์ ๋ฐ๋ ์ฌ์๊ณผ ๊ธ์ฌ๊ฐ ์ผ์นํ๋ ์ฌ์์ ์ด๋ฆ,๋ถ์๋ฒํธ,๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT ename, deptno, sal
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE comm IS NOT NULL);
45> Dallas์์ ๊ทผ๋ฌดํ๋ ์ฌ์๊ณผ ์ง์
์ด ์ผ์นํ๋ ์ฌ์์ ์ด๋ฆ,๋ถ์์ด๋ฆ, ๋ฐ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ์์ค
SELECT e.ename, d.dname, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.job IN (SELECT e.job FROM emp e, dept d WHERE e.deptno = d.deptno AND d.loc = 'DALLAS');
46> Scott๊ณผ ๋์ผํ ๊ธ์ฌ ๋ฐ ์ปค๋ฏธ์
์ ๋ฐ๋ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ, ์
์ฌ์ผ ๋ฐ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ์์ค
SELECT ename, hiredate, sal
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE ename = 'SCOTT')
AND NVL (comm,0) IN (SELECT NVL(comm,0) FROM emp WHERE ename = 'SCOTT');
47> ์ง์
์ด Clerk ์ธ ์ฌ์๋ค๋ณด๋ค ๋ ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ฌ์์ ์ฌ์๋ฒํธ, ์ด๋ฆ, ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋, ๊ฒฐ๊ณผ๋ฅผ ๊ธ์ฌ๊ฐ ๋์ ์์ผ๋ก ์ ๋ ฌํ๋ผ.
SELECT empno, ename, sal
FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE job = 'CLERK')
ORDER BY sal DESC;
48> ์ด๋ฆ์ A๊ฐ ๋ค์ด๊ฐ๋ ์ฌ์๊ณผ ๊ฐ์ ์ง์
์ ๊ฐ์ง ์ฌ์์ ์ด๋ฆ๊ณผ ์๊ธ, ๋ถ์๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ผ.
SELECT ename, sal, deptno
FROM emp
WHERE job IN (SELECT job FROM emp WHERE ename LIKE '%A%');
49> New York ์์ ๊ทผ๋ฌดํ๋ ์ฌ์๊ณผ ๊ธ์ฌ ๋ฐ ์ปค๋ฏธ์
์ด ๊ฐ์ ์ฌ์์ ์ฌ์์ด๋ฆ๊ณผ ๋ถ์๋ช
์ ์ถ๋ ฅํ๋ผ.
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.sal IN (SELECT e.sal FROM dept d WHERE d.loc = 'NEW YORK')
AND NVL(comm,0) IN (SELECT NVL(comm,0) FROM emp e WHERE d.loc = 'NEW YORK');
50> Dallas์์ ๊ทผ๋ฌดํ๋ ์ฌ์๊ณผ ์ง์
๋ฐ ๊ด๋ฆฌ์๊ฐ ๊ฐ์ ์ฌ์์ ์ฌ์๋ฒํธ,์ฌ์์ด๋ฆ, ์ง์
,์๊ธ,๋ถ์๋ช
,์ปค๋ฏธ์
์ ์ถ๋ ฅํ๋ ์ปค๋ฏธ์
์ด ์ฑ
์ ๋์ง ์์ ์ฌ์์ NoCommission์ผ๋ก ํ์ํ๊ณ , ์ปค๋ฏธ์
์ ์ปฌ๋ผ๋ช
์ Comm์ผ๋ก ๋์ค๊ฒ ์ถ๋ ฅํ์์ค. (๋จ, ์ต๊ณ ์๊ธ๋ถํฐ ์ถ๋ ฅ๋๊ฒ ํ์์ค)
SELECT e.empno, e.ename, e.job, e.sal, d.dname, NVL((TO_CHAR(e.comm)), 'NoCommission') "Comm"
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND job IN (SELECT job FROM emp e, dept d WHERE e.deptno = d.deptno AND loc='DALLAS')
AND mgr IN (SELECT mgr FROM emp e, dept d WHERE e.deptno = d.deptno AND loc='DALLAS')
ORDER BY sal DESC;