GiantStepDEV
article thumbnail

JOIN

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” SQL ๊ธฐ๋Šฅ
  • ํ…Œ์ด๋ธ”์˜ ์‹๋ณ„ ๊ฐ’์ธ Primary Key์™€ ํ…Œ์ด๋ธ” ๊ฐ„ ๊ณตํ†ต ๊ฐ’์ธ Foreign Key ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ

INNTER JOIN : ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒ

LEFT JOIN : ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ

RIGHT JOIN : ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์™ผ์ชฝ ๋ฐ์ดํ„ฐ์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ


โœ… 1๋Œ€N, N๋Œ€1, 1๋Œ€1 ๋“ฑ ์–ด๋А ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋А๋ƒ์— ๋”ฐ๋ผ ๋ถ€๋ฅด๋Š” ๋ง์ด ๋‹ค๋ฆ„.

      ์˜ˆ) EMP ํ…Œ์ด๋ธ”์˜ DEPTNO ์™€ DEPT ํ…Œ์ด๋ธ”์˜ DEPTNO๋Š” EMP ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ํ•  ๋•Œ์—๋Š” 1๋Œ€N

โœ… Primary Key๋Š” ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ’. ์ฆ‰, ๊ณ ์œ ํ•œ ๊ฐ’์ด ์žˆ๋Š” ์ปฌ๋Ÿผ (์˜ˆ. EMP ํ…Œ์ด๋ธ” - EMPNO)

     => NOT NULL, UNIQUE

โœ… Foreign Key๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ๋  ๋•Œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ (์˜ˆ. EMP ํ…Œ์ด๋ธ” - DEPTNO / DEPTํ…Œ์ด๋ธ” - DEPTNO)

     => Primary Key๋Š” ๋™์‹œ์— ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ Foreign Key๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.

โœ… ์ถ”ํ›„ ์ž๋ฐ”์™€ ์—ฐ๊ฒฐํ•  ๋•Œ.. DEPT ํ…Œ์ด๋ธ”์„ ํด๋ž˜์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด DEPTNO๋Š” ์ธ์Šคํ„ด์Šค ํ•„๋“œ(ArrayList ํƒ€์ž…)..

      DEPTNO๋ฅผ ํ†ตํ•ด EMP ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ˜•ํƒœ๋กœ ์„ค๊ณ„ํ•˜๊ฒŒ ๋จ. (JAVA ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์˜ˆ์ œ ์ฐธ์กฐ!!)

 

์œ ์˜์‚ฌํ•ญ

โฌ‡๏ธ EMP ํ…Œ์ด๋ธ”๊ณผ DEPT ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ณ , ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ..

SELECT *
	FROM EMP, DEPT;

 

์ดํ•˜ ์ƒ๋žต..๋” ๋งŽ์Œ

๐Ÿธ EMP์™€ DEPT ํ…Œ์ด๋ธ”์ด ์–ด๋–ป๊ฒŒ ์กฐ์ธ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, CROSS JOIN(์นดํ…Œ์‹œ์•ˆ ๊ณฑ)์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด EMP ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์™€ DEPT ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ๊ฒฐํ•ฉ๋จ.

๐Ÿถ ???? ๊ฐœ๊ตด.

๐Ÿธ DEPT์˜ DEPTNO ์ปฌ๋Ÿผ์€ 4๊ฐœ. EMP ์ปฌ๋Ÿผ์€ ์ด 12๊ฐœ(=12๋ช…).

      DEPT์˜ DEPTNO๊ฐ€ EMP ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉ๋˜์–ด 12 * 4 (์นดํ…Œ์‹œ์•ˆ ๊ณฑ) ๊ฐœ์˜ ํ–‰์ด ์ถœ๋ ฅ๋จ.

 

๐Ÿ“Œ ํ•„์ž๋Š” ์ด ๋ถ€๋ถ„์ด ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ€์„œ Java์˜ ์ด์ค‘ for๋ฌธ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ดํ•ดํ–ˆ์Œ.

 

๋”ฐ๋ผ์„œ, ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ์—ด ์ด๋ฆ„์„ ๋น„๊ตํ•˜๋Š” ์กฐ๊ฑด์‹์œผ๋กœ ์กฐ์ธํ•ด์•ผ ํ•œ๋‹ค.

โš ๏ธ ์˜ค๋ผํด ๋ฌธ๋ฒ•

SELECT *
	FROM EMP, DEPT
	WHERE EMP.DEPTNO = DEPT.DEPTNO
	ORDER BY EMPNO;

โš ๏ธ ANSI ๋ฌธ๋ฒ• (๋ฏธ๊ตญ ํ‘œ์ค€ ๋ฌธ๋ฒ•)

SELECT *
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	ORDER BY EMPNO;

๐Ÿธ EMP ํ…Œ์ด๋ธ”์˜ ๋ถ€์„œ ๋ฒˆํ˜ธ์™€ DEPT ํ…Œ์ด๋ธ”์˜ ๋ถ€์„œ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ์„ ํƒ๋œ๋‹ค.

     ์ดํ›„ ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๊ณ , EMPNO ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜!

     ์ด ๋•Œ, โญํ…Œ์ด๋ธ”์— ๋ณ„์นญ์„ ์„ค์ •ํ•ด์•ผํ•ด. ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค.

ํ…Œ์ด๋ธ” ๋ณ„์นญ ์„ค์ •

  • ์–‘์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ์กด์žฌํ•˜๋Š” ์—ด์— ๋Œ€ํ•ด์„œ๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์•ผ ํ•จ.
    (Java์˜ this ๊ฐ™์€??)
  • ๊ทผ๋ฐ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ๊ธธ๋ฉด(์˜ˆ.DEPARTMENTNUM) ํƒ€์ดํ•‘์ด ๊ธธ์–ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋‹ˆ ์ค„์ž„๋ง(๋ณ„์นญ) ์ง€์ •
SELECT EMPNO, ENAME, E.DEPTNO, DNAME, JOB
	FROM EMP E, DEPT D -- ์˜ค๋ผํด ์กฐ์ธ ๋ฐฉ์‹
	WHERE E.DEPTNO = D.DEPTNO AND E.JOB = 'MANAGER';

๋“ฑ๊ฐ€ ์กฐ์ธ (INNER JOIN)

  • ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•œ ํ›„์— ์ถœ๋ ฅ ํ–‰์„ ๊ฐ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์—ด๊ณผ ์ผ์น˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ ์ •ํ•˜๋Š” ๋ฐฉ์‹
  • ANSI ์กฐ์ธ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ
    โš ๏ธ ์˜ค๋ผํด 9๊นŒ์ง€๋Š” ์˜ค๋ผํด ์กฐ์ธ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜, ์˜ค๋ผํด 10๋ถ€ํ„ฐ๋Š” ANSI ์กฐ์ธ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง.
SELECT EMPNO, ENAME, E.DEPTNO, DNAME, JOB
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	WHERE E.JOB = 'MANAGER';

๐Ÿธ๊ธฐ๋ณธ ์˜ˆ์ œ

๐Ÿธ EMP์™€ DEPT ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ณ , ๊ธ‰์—ฌ๊ฐ€ 3000 ์ด์ƒ์ธ ์‚ฌ์› ์ •๋ณด ์ถœ๋ ฅ

(์‚ฌ์›๋ฒˆํ˜ธ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ์ž…์‚ฌ์ผ, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„)

 

(1) ์˜ค๋ผํด ๋ฌธ๋ฒ•

SELECT EMPNO, ENAME, SAL, HIREDATE, E.DEPTNO, DNAME
	FROM EMP E, DEPT D
	WHERE E.DEPTNO = D.DEPTNO AND SAL >= 3000;

(2) ANSI ๋ฌธ๋ฒ•

SELECT EMPNO, ENAME, SAL, HIREDATE, E.DEPTNO, DNAME
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	WHERE E.SAL >= 3000;

๐Ÿธ EMP ํ…Œ์ด๋ธ” ๋ณ„์นญ์„ E๋กœ, DEPT ํ…Œ์ด๋ธ” ๋ณ„์นญ์€ D๋กœ ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋“ฑ๊ฐ€ ์กฐ์ธ์„ ํ–ˆ์„ ๋•Œ,

๊ธ‰์—ฌ๊ฐ€ 2500 ์ด์ƒ 3500 ์ดํ•˜์ธ ์‚ฌ์›์˜ ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ์ž‘์„ฑ

 

(1) ์˜ค๋ผํด ๋ฌธ๋ฒ•

SELECT EMPNO, ENAME, SAL, E.DEPTNO
	FROM EMP E, DEPT D
	WHERE E.DEPTNO = D.DEPTNO
	AND SAL BETWEEN 2500 AND 3500;

(2) ANSI ๋ฌธ๋ฒ•

SELECT EMPNO, ENAME, SAL, E.DEPTNO
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	WHERE SAL BETWEEN 2500 AND 3500;

๋น„๋“ฑ๊ฐ€ ์กฐ์ธ

  • ๋™์ผ ์—ด์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋‚˜..์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ.

๐Ÿธ ์˜ˆ๋ฅผ ๋“ค์–ด..์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ ๋“ฑ๊ธ‰์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SAL๊ณผ SALGRADE๊ฐ€ ์ผ์น˜ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ (์•„๋ž˜ ํ…Œ์ด๋ธ” ์ฐธ์กฐ)

      SAL์€ LOSAL / HISAL ์‚ฌ์ด์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.

      ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” BETWEEN A AND B ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ. 

SELECT * FROM EMP;

SELECT * FROM SALGRADE;


SELECT ENAME, SAL, GRADE
	FROM EMP E JOIN SALGRADE S
	ON SAL BETWEEN LOSAL AND HISAL;

์ž์ฒด ์กฐ์ธ

  • ๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

๐Ÿธ EMP ํ…Œ์ด๋ธ”์—์„œ MGR์ด ์žˆ๋Š” ์‚ฌ๋žŒ ์ค‘ ๊ฐ ์‚ฌ์›์˜ MGR ์ด๋ฆ„์„ ์กฐํšŒ ํ›„ ์ถœ

SELECT E1.EMPNO, E1.ENAME, E1.MGR,
	E2.EMPNO AS MGR_EMPNO,
	E2.ENAME AS MGR_ENAME
	FROM EMP E1 JOIN EMP E2
	ON E1.MGR = E2.EMPNO;

์™ธ๋ถ€ ์กฐ์ธ (OUTER JOIN)

  • ๋‚ด๋ถ€ ์กฐ์ธ(INNER JOIN, ๋“ฑ๊ฐ€ ์กฐ์ธ)์˜ ๊ฒฝ์šฐ, ํ•œ์ชฝ์˜ ์ปฌ๋Ÿผ์— ๊ฐ’์ด ์—†๋‹ค๋ฉด ์กฐํšŒ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์™ธ๋ถ€ ์กฐ์ธ์€ ๊ณตํ†ต๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ๋„ ํ‘œ์‹œ ํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์˜ค๋ผํด ๋ฌธ๋ฒ• : (+) ๊ธฐํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋ถ€์กฑํ•œ ํ…Œ์ด๋ธ”์— NULL ๊ฐ’์„ ๊ฐ–๋Š” ํ–‰์ด ์ƒ์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ถฉ๋ถ„ํ•œ ํ…Œ์ด๋ธ”์˜ ํ–‰๋“ค์ด NULLํ–‰์— ์กฐ์ธ

SELECT ENAME, E.DEPTNO, DNAME
	FROM EMP E, DEPT D
	WHERE E.DEPTNO(+) = D.DEPTNO
	ORDER BY E.DEPTNO;

โš ๏ธ ANSI ๋ฌธ๋ฒ• (LEFT OUTER, RIGHT OUTER)

OPERATIONS์— ๊ฐ’์ด ์—†๋Š”๋ฐ๋„ ์กฐํšŒ๋จ ํ™•์ธ.(RIGHT OUTER. !!์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒ!!)

SELECT ENAME, E.DEPTNO, DNAME
	FROM EMP E RIGHT OUTER JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	ORDER BY E.DEPTNO;

NATURAL JOIN

  • ๋™๋“ฑ ์กฐ์ธ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ WHERE ์กฐ๊ฑด์ ˆ ์—†์ด ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹
  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๋™์ผํ•œ ์ด๋ฆ„(์ปฌ๋Ÿผ ๋˜๋Š” ์—ด)์„ ๊ฐ–๋Š” ์ปฌ๋Ÿผ์€ ๋ชจ๋‘ ์กฐ์ธ ๋จ
SELECT EMPNO, ENAME, DNAME
	FROM EMP NATURAL JOIN DEPT;
์ผ๋ฐ˜์ ์ธ ๋™๋“ฑ์กฐ์ธ์ธ ๊ฒฝ์šฐ๋Š” DEPTNO๊ฐ€ ์–ด๋”” ์†Œ์†์ธ์ง€ ๋ชจํ˜ธํ•˜์—ฌ ์œ„ ์ฟผ๋ฆฌ๋ฌธ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

JOING ~ USING

  • ๊ธฐ์กด์˜ ๋“ฑ๊ฐ€ ์กฐ์ธ์„ ๋Œ€์‹ ํ•˜๋Š” ์กฐ์ธ ๋ฐฉ์‹
  • FROM table1 JOIN table2 USING(๊ธฐ์ค€์—ด)
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC
	FROM EMP JOIN DEPT USING(DEPTNO)
	WHERE SAL >= 3000
	ORDER BY DEPTNO, EMPNO;

JOIN ~ ON

  • ๊ฐ€์žฅ ๋ฒ”์šฉ์„ฑ ์žˆ๋Š” JOIN ~ ON ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ์ธ ๋ฐฉ์‹
  • FROM table1 JOIN table2 ON (์กฐ์ธ ์กฐ๊ฑด์‹)
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, E.DEPTNO, DNAME, LOC
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	WHERE SAL <= 3000
	ORDER BY E.DEPTNO, EMPNO;

์—ฐ์Šต ๋ฌธ์ œ

๐Ÿธ ๊ธ‰์—ฌ(SAL)๊ฐ€ 2000 ์ดˆ๊ณผ์ธ ์‚ฌ์›๋“ค์˜ ๋ถ€์„œ ์ •๋ณด, ์‚ฌ์› ์ •๋ณด๋ฅผ ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„, ์‚ฌ์›์ด๋ฆ„, ๊ธ‰์—ฌ ํ‘œ์‹œ

 - ์˜ค๋ผํด ๋ฌธ๋ฒ•๊ณผ ANSI ๋ฌธ๋ฒ•์œผ๋กœ ํ‘œ์‹œ(NATURAL JOIN, JOIN ~ ON, JOIN ~ USING)

  • ์˜ค๋ผํด ๋ฌธ๋ฒ•
SELECT E.DEPTNO, DNAME, ENAME, SAL
	FROM EMP E, DEPT D
	WHERE E.DEPTNO = D.DEPTNO
	AND SAL > 2000;
  • NATURAL JOIN
SELECT DEPTNO, DNAME, ENAME, SAL
	FROM EMP NATURAL JOIN DEPT
	WHERE SAL > 2000;
  • JOIN ~ ON
SELECT E.DEPTNO, DNAME, ENAME, SAL
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	WHERE SAL > 2000;
  • JOIN  ~ USING 
SELECT DEPTNO, DNAME, ENAME, SAL
	FROM EMP JOIN DEPT USING(DEPTNO)
	WHERE SAL > 2000;

๐Ÿธ ๊ฐ ๋ถ€์„œ๋ณ„ ๋ถ€์„œ๋ฒˆํ˜ธ, ํ‰๊ท  ๊ธ‰์—ฌ, ์ตœ๋Œ€ ๊ธ‰์—ฌ, ์ตœ์†Œ ๊ธ‰์—ฌ, ์‚ฌ์› ์ˆ˜ ์ถœ๋ ฅ

 - ์˜ค๋ผํด ๋ฌธ๋ฒ•๊ณผ ANSI ๋ฌธ๋ฒ•์œผ๋กœ ํ‘œ์‹œ(NATURAL JOIN, JOIN ~ ON, JOIN ~ USING)

  • ์˜ค๋ผํด ๋ฌธ๋ฒ•
SELECT E.DEPTNO, TRUNC(AVG(SAL)), MAX(SAL), MIN(SAL), COUNT(*)
	FROM EMP E, DEPT D
	WHERE E.DEPTNO = D.DEPTNO
	GROUP BY E.DEPTNO;
  • NATURAL JOIN
SELECT DEPTNO, TRUNC(AVG(SAL)), MAX(SAL), MIN(SAL), COUNT(*)
	FROM EMP NATURAL JOIN DEPT
	GROUP BY DEPTNO;
  • JOIN ~ ON
SELECT E.DEPTNO, TRUNC(AVG(SAL)), MAX(SAL), MIN(SAL), COUNT(*)
	FROM EMP E JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	GROUP BY E.DEPTNO;
  • JOIN ~ USING
SELECT DEPTNO, TRUNC(AVG(SAL)), MAX(SAL), MIN(SAL), COUNT(*)
	FROM EMP JOIN DEPT USING(DEPTNO)
	GROUP BY DEPTNO;

๐Ÿธ ๋ชจ๋“  ๋ถ€์„œ ์ •๋ณด์™€ ์‚ฌ์› ์ •๋ณด๋ฅผ ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ ์ด๋ฆ„, ์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„, ์ง์ฑ…, ๊ธˆ์—ฌ๋ฅผ ์‚ฌ์› ์ด๋ฆ„์ˆœ์œผ๋กœ ์ถœ๋ ฅ

- ์˜ค๋ผํด ๋ฌธ๋ฒ•๊ณผ ANSI ๋ฌธ๋ฒ•

  • ์˜ค๋ผํด ๋ฌธ๋ฒ•
SELECT E.DEPTNO, DNAME, EMPNO, ENAME, JOB, SAL
	FROM EMP E, DEPT D
	WHERE E.DEPTNO(+) = D.DEPTNO
	ORDER BY ENAME;
  • ANSI ๋ฌธ๋ฒ•
SELECT E.DEPTNO, DNAME, EMPNO, ENAME, JOB, SAL
	FROM EMP E RIGHT JOIN DEPT D
	ON E.DEPTNO = D.DEPTNO
	ORDER BY ENAME;
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!