๊ฐœ์ธ๊ณต๋ถ€/SQL

10. Oracle ์ค‘๊ฐ„์—ฐ์Šต๋ฌธ์ œ

LEE_BOMB 2021. 9. 23. 21:16

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;