λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Database/Oracle

[SQL-Oracle]JOIN ν•¨μˆ˜

by sukii 2023. 11. 30.
λ°˜μ‘ν˜•

πŸ”˜ TABLE JOIN : 두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”μ— μ €μž₯된 행을 μ„œλ‘œ κ²°ν•©ν•˜μ—¬ μ›ν•˜λŠ” μ»¬λŸΌκ°’μ„ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯

1) EMP ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œλ²ˆν˜Έ κ²€μƒ‰

SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP;



2) DEPT ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  λΆ€μ„œμ˜ λΆ€μ„œλ²ˆν˜Έ,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
SELECT DEPTNO,DNAME,LOC FROM DEPT;

SELECT DEPTNO,DNAME,LOC FROM DEPT;



--μœ„μ—μ„œ 두 ν…Œμ΄λΈ”μ— μžˆλŠ” 정보듀을 κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ SELECTλ₯Ό 두 번 μΌλŠ”λ°, 이λ₯Ό ν•œ λ²ˆμ— λ‚˜μ—΄ν•˜κ³  FROM 뒀에 두 ν…Œμ΄λΈ” 이름을 λͺ¨λ‘ 써봀닀.

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”에 μ €μž₯된 ν–‰μ„ κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ λ‘ κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”에 ν–‰μ„ κ²°ν•©ν•˜κΈ° μœ„ν•œ μ‘°κ±΄μ„ μ œκ³΅ν•˜μ—¬ κ²€μƒ‰ μ²˜λ¦¬
--μΉ΄λ‹€μ‹œμ•ˆ ν”„λ‘œλ•νŠΈ(CATSIAN PRODUCT) : 두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”μ˜ 행을 결합쑰건 없이 κ²€μƒ‰ν•œ 경우 λ°œμƒλ˜λŠ” 결과둜 ν…Œμ΄λΈ”μ˜ λͺ¨λ“  행을 κ΅μ°¨ κ²°ν•©ν•˜μ—¬ 검색 κ²°κ³Ό 제곡

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT;

 

μ΄λ ‡κ²Œ 검색할 경우, μ•„λž˜μ™€ 같이 전체사원듀(14λͺ…)이 λΆ€μ„œλ³„λ‘œ κ΅¬λΆ„λ˜μ–΄ μ—¬λŸ¬λ²ˆ κ²€μƒ‰λœλ‹€. 

ν•˜μ§€λ§Œ μš°λ¦¬κ°€ μ›ν•˜λŠ”κ±΄ 이게 μ•„λ‹ˆλΌ 각 사원듀과 κ·Έ 사원듀이 μ†ν•΄μžˆλŠ” λΆ€μ„œλ§Œ κ²€μƒ‰ν•˜κ³  μ‹Άλ‹€.

이 λ•Œ, EQUI JOIN 을 μ‚¬μš©ν•΄λ³΄μ•˜λ‹€. 



πŸ”˜ 동등결합(EQUI JOIN) : 두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”μ˜ 행을 κ²°ν•©ν•˜κΈ° μœ„ν•œ 쑰건에 = μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 쑰건이 μ°Έ(TRUE)인 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜λ©° 결합쑰건이 λ§žμ§€ μ•ŠλŠ” ν…Œμ΄λΈ”μ˜ 행은 κ²°ν•©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 미검색 처리

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•© 
--결합쑰건은 WHERE의 μ‘°κ±΄μ‹μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ μ‚¬μš©
--행을 κ²°ν•©ν•˜κΈ° μœ„ν•œ ν…Œμ΄λΈ”μ— 같은 μ΄λ¦„μ˜ 컬럼이 μ‘΄μž¬ν•˜λŠ” 경우 [ν…Œμ΄λΈ”λͺ….컬럼λͺ…] ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ μ‚¬μš©

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;

 

EQUI JOIN μ„ μΌλ”λ‹ˆ EMP Tableκ³Ό DEPT Table에 μžˆλŠ” λΆ€μ„œλ²ˆν˜Έλ₯Ό λ§€μΉ­λ˜μ–΄

사원 이름과 κ·Έ 사원이 μ†ν•΄μžˆλŠ” λΆ€μ„œμ˜ 이름&μœ„μΉ˜κ°€ κ²€μƒ‰λ˜μ—ˆλ‹€. 

κ·Έλž˜μ„œ 총 14ν–‰μœΌλ‘œ κΉ”λ”ν•˜κ²Œ 검색됨.

ν•˜μ§€λ§Œ κ°•μ‚¬λ‹˜μ΄ 이 방법은 속도가 였래 κ±Έλ¦¬λ―€λ‘œ μΆ”μ²œν•˜μ§„ μ•ŠλŠ”λ‹€κ³  ν•˜μ‹¬.

μ•„λž˜μ—μ„œ λ°°μš°λŠ” JOINν•¨μˆ˜λ₯Ό μ‚¬μš© ν•˜λΌκ³  ν•˜μ…¨λ‹€. 

 

πŸ”Άμ°Έκ³  πŸ”Ά

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œλ²ˆν˜Έ,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’μ΄ 같은 ν–‰λ§Œ κ²°ν•©
SELECT EMPNO,ENAME,SAL,EMP.DEPTNO,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;
SELECT EMPNO,ENAME,SAL,DEPT.DEPTNO,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;

--κ²€μƒ‰λŒ€μƒμ— 같은 컬럼λͺ…이 μ‘΄μž¬ν•  경우 첫번째λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 컬럼λͺ…은 μžλ™μœΌλ‘œ λ³€κ²½λ˜μ–΄ 검색
SELECT EMPNO,ENAME,SAL,EMP.DEPTNO,DEPT.DEPTNO,DNAME,LOC
	FROM EMP,DEPT
    WHERE EMP.DEPTNO=DEPT.DEPTNO;

--κ²€μƒ‰λŒ€μƒμ— 같은 컬럼λͺ…이 μ‘΄μž¬ν•  경우 컬럼 별칭을 μ‚¬μš©ν•˜μ—¬ κ²€μƒ‰ν•˜λŠ” 것을 ꢌμž₯
SELECT EMPNO,ENAME,SAL,EMP.DEPTNO EMP_DEPTNO,DEPT.DEPTNO DEPT_DEPTNO,DNAME,LOC
	FROM EMP,DEPT
    WHERE EMP.DEPTNO=DEPT.DEPTNO;



πŸ”Άμ°Έκ³  πŸ”Ά

TABLE ALIAS : ν…Œμ΄λΈ”λͺ… λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλŠ” 별칭을 μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ - ν…Œμ΄λΈ”μ˜ 이름을 μΌμ‹œμ μœΌλ‘œ λ³€κ²½ μ²˜λ¦¬ν•˜μ—¬ μ‚¬μš©
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ… λ³„μΉ­,ν…Œμ΄λΈ”λͺ… λ³„μΉ­,...
--ν…Œμ΄λΈ”μ˜ ν–‰μ„ κ²°ν•©ν•  λ•Œ ν…Œμ΄λΈ”μ˜ μ΄λ¦„을 κ°„νŽΈν•˜μ—¬ ν‘œν˜„ν•˜κ±°λ‚˜ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”을 λ‹€μˆ˜μ˜ ν…Œμ΄λΈ”λ‘œ ν‘œν˜„ν•˜κΈ° μœ„ν•œ μ‚¬μš©

SELECT EMPNO,ENAME,SAL,E.DEPTNO EMP_DEPTNO,D.DEPTNO DEPT_DEPTNO,DNAME,LOC
	FROM EMP E,DEPT D
    WHERE E.DEPTNO=D.DEPTNO;
    
--ν…Œμ΄λΈ”μ— 별칭을 μ„€μ •ν•œ ν›„ 별칭 λŒ€μ‹  μ‹€μ œ ν…Œμ΄λΈ”λͺ…을 μ‚¬μš©ν•˜λ©΄ μ—λŸ¬ λ°œμƒ
SELECT EMPNO,ENAME,SAL,EMP.DEPTNO EMP_DEPTNO,DEPT.DEPTNO DEPT_DEPTNO,DNAME,LOC
	FROM EMP E,DEPT D
    WHERE E.DEPTNO=D.DEPTNO;




πŸ”˜ 비동등결합(NON-EQUI JOIN) : 두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”μ˜ 행을 κ²°ν•©ν•˜κΈ° μœ„ν•œ 쑰건에 = μ—°μ‚°μžμ™Έμ— λ‹€λ₯Έ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 쑰건이 μ°Έ(TRUE)인 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜λ©° 결합쑰건이 λ§žμ§€ μ•ŠλŠ” ν…Œμ΄λΈ”μ˜ 행은 κ²°ν•©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 미검색 처리

--EMP ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬ 검색
SELECT EMPNO,ENAME,SAL FROM EMP;

--SALGRADE ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  κΈ‰μ—¬λ“±κΈ‰μ˜ λ“±κΈ‰λ²ˆν˜Έ,μ΅œμ†ŒκΈ‰μ—¬,μ΅œλŒ€κΈ‰μ—¬ 검색
SELECT GRADE,LOSAL,HISAL FROM SALGRADE;

--EMP ν…Œμ΄λΈ”κ³Ό SALGRADE ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λ“±κΈ‰λ²ˆν˜Έ 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ SAL μ»¬λŸΌκ°’μ΄ SALGRADE ν…Œμ΄λΈ”μ˜ LOSAL μ»¬λŸΌκ°’λΆ€ν„° HISAL μ»¬λŸΌκ°’ λ²”μœ„μ— ν¬ν•¨λ˜λŠ” ν–‰λ§Œ κ²°ν•©
SELECT EMPNO,ENAME,SAL,GRADE FROM EMP,SALGRADE WHERE SAL>=LOSAL AND SAL<=HISAL;
SELECT EMPNO,ENAME,SAL,GRADE FROM EMP,SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL;

 



πŸ”˜ μ™ΈλΆ€κ²°ν•©(OUTER JOIN) : 두 κ°œμ΄μƒμ˜ ν…Œμ΄λΈ”μ—μ„œ 결합쑰건에 λ§žλŠ” 행을 κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜κ³  결합쑰건이 λ§žμ§€ μ•Šμ€ 행은 NULLκ³Ό κ²°ν•©ν•˜μ—¬ 검색
--κ²°ν•© μ‘°κ±΄μ‹μ˜ ν…Œμ΄λΈ”μ— (+) 기호λ₯Ό μ‚¬μš©ν•˜λ©΄ 결합쑰건이 λ§žμ§€ μ•Šμ€ 행을 NULLκ³Ό κ²°ν•©ν•˜μ—¬ 검색

--EMP ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›μ˜ λΆ€μ„œλ²ˆν˜Έλ₯Ό μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” μœ μΌν•œ ν•˜λ‚˜μ˜ κ°’λ§Œ 검색
SELECT DISTINCT DEPTNO FROM EMP;--검색결과 : 10,20,30

--DEPT ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  λΆ€μ„œμ˜ λΆ€μ„œλ²ˆν˜Έ,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
SELECT DEPTNO,DNAME,LOC FROM DEPT;--검색결과 : 10,20,30,40

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’μ΄ 같은 ν–‰λ§Œ κ²°ν•©
--40번 λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” 사원은 μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 40번 λΆ€μ„œμ— λŒ€ν•œ λΆ€μ„œμ΄λ¦„κ³Ό λΆ€μ„œμœ„μΉ˜ 미검색
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;

--사원이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λΆ€μ„œμ •λ³΄λ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ κ²°ν•© μ‘°κ±΄μ‹μ—μ„œ EMP ν…Œμ΄λΈ”μ— (+) 기호λ₯Ό λΆ™μ—¬ μ™ΈλΆ€κ²°ν•©μœΌλ‘œ 검색
--40번 λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” 사원이 μ—†λŠ” 경우 EMP ν…Œμ΄λΈ”μ— 결합될 행이 μ—†μœΌλ―€λ‘œ μ‚¬μ›μ •λ³΄μ˜ μ»¬λŸΌκ°’ λŒ€μ‹  NULLκ³Ό κ²°ν•©λ˜μ–΄ 검색
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;

 



πŸ”˜ μžκΈ°κ²°ν•©(SELF JOIN) : ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ— μ„œλ‘œ λ‹€λ₯Έ 별칭을 λΆ€μ—¬ν•˜μ—¬ 2개 μ΄μƒμ˜ ν…Œμ΄λΈ”λ‘œ κ΅¬λΆ„ν•˜μ—¬ 행을 κ²°ν•©ν•΄ 검색
--κ²°ν•©λ˜λŠ” 두 ν…Œμ΄λΈ”μ˜ 컬럼λͺ…이 λ™μΌν•˜λ―€λ‘œ ν…Œμ΄λΈ”μ˜ 별칭을 μ‚¬μš©ν•˜μ—¬ λͺ…ν™•ν•˜κ²Œ ν…Œμ΄λΈ”μ„ κ΅¬λΆ„ν•˜μ—¬ 컬럼λͺ… μ„€μ •

--EMP ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κ΄€λ¦¬μžλ²ˆν˜Έ(κ΄€λ¦¬μžμ˜ μ‚¬μ›λ²ˆν˜Έ) 검색
SELECT EMPNO,ENAME,MGR FROM EMP;

--EMP ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κ΄€λ¦¬μžλ²ˆν˜Έ(κ΄€λ¦¬μžμ˜ μ‚¬μ›λ²ˆν˜Έ),κ΄€λ¦¬μžμ΄λ¦„(κ΄€λ¦¬μžμ˜ 사원이름) 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”(WORKER)의 MGR μ»¬λŸΌκ°’κ³Ό EMP ν…Œμ΄λΈ”(MANAGER)의 EMPNO μ»¬λŸΌκ°’μ΄ 같은 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ 검색
--EMP ν…Œμ΄λΈ”(WORKER)의 MGR μ»¬λŸΌκ°’μ΄ NULL인 사원은 결합쑰건이 λ§žμ§€ μ•Šμ•„ 미검색
SELECT WORKER.EMPNO,WORKER.ENAME WORKER_ENAME,WORKER.MGR,MANAGER.ENAME MANAGER_ENAME 
    FROM EMP WORKER, EMP MANAGER WHERE WORKER.MGR=MANAGER.EMPNO;

--EMP ν…Œμ΄λΈ”(WORKER)의 MGR μ»¬λŸΌκ°’μ΄ NULL인 사원도 κ²€μƒ‰λ˜λ„λ‘ μ™ΈλΆ€κ²°ν•© μ‚¬μš©
SELECT WORKER.EMPNO,WORKER.ENAME WORKER_ENAME,WORKER.MGR,MANAGER.ENAME MANAGER_ENAME 
    FROM EMP WORKER, EMP MANAGER WHERE WORKER.MGR=MANAGER.EMPNO(+);

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ SALES λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’μ΄ 같은 ν–‰λ§Œ κ²°ν•©
SELECT EMPNO,ENAME,SAL,DNAME,LOC
	FROM EMP,DEPT
    WHERE EMP.DEPTNO=DEPT.DEPTNO AND DNAME='SALES';

 



--μœ„μ—μ„œ 배운 것과 같이 결합쑰건과 행쑰건을 WHEREμ—μ„œ 같이 μ‚¬μš©ν•˜λ―€λ‘œ μœ μ§€λ³΄μˆ˜μ˜ λΆˆνŽΈν•¨ 쑴재
--1999년에 λ§Œλ“€μ–΄μ§„ ν‘œμ€€ SQL(ANSI-SQL)μ—μ„œλŠ” ν…Œμ΄λΈ”μ˜ 행을 κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯ 제곡 

=>즉, 이 λ•Œ JOINμ΄λΌλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ£Όμ—ˆλ‹€.

πŸ”˜ CROSS JOIN : κ²°ν•© ν…Œμ΄λΈ”μ˜ λͺ¨λ“  행을 ꡐ차 κ²°ν•©ν•˜μ—¬ 검색 - 결합쑰건 μƒλž΅
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ…1 CROSS JOIN ν…Œμ΄λΈ”λͺ…2

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP CROSS JOIN DEPT;

 

πŸ”˜ NATURAL JOIN : κ²°ν•© ν…Œμ΄λΈ”μ— 같은 μ΄λ¦„μ˜ 컬럼이 ν•˜λ‚˜λ§Œ μžˆλŠ” 경우 같은 μ΄λ¦„μ˜ 컬럼의 μ €μž₯된 값이 같은 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ 검색 - 결합쑰건 μƒλž΅
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ…1 NATURAL JOIN ν…Œμ΄λΈ”λͺ…2

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’μ΄ 같은 ν–‰λ§Œ κ²°ν•©
--NATURAL JOIN κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’μ„ μ‚¬μš©ν•΄ μžλ™μœΌλ‘œ κ²°ν•©λ˜λ―€λ‘œ 결합쑰건 μƒλž΅
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP NATURAL JOIN DEPT;

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œλ²ˆν˜Έ,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ 검색
--NATURAL JOIN κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ κ²°ν•© ν…Œμ΄λΈ”μ— 같은 μ΄λ¦„μ˜ μ»¬λŸΌμ„ 검색할 λ•Œ ν…Œμ΄λΈ”μ„ λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜μ§€ μ•Šμ•„λ„ 검색 κ°€λŠ₯
SELECT EMPNO,ENAME,SAL,DEPTNO,DNAME,LOC FROM EMP NATURAL JOIN DEPT;


πŸ”˜ JOIN USING : κ²°ν•© ν…Œμ΄λΈ”μ— 같은 μ΄λ¦„μ˜ 컬럼이 2개 이상 μžˆλŠ” 경우, 같은 μ΄λ¦„μ˜ 컬럼 쀑 ν•˜λ‚˜λ₯Ό μ§€μ •ν•˜μ—¬ μ§€μ •λœ μ»¬λŸΌμ— μ €μž₯된 값이 같은 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ 검색 - 결합쑰건 μƒλž΅
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ…1 JOIN ν…Œμ΄λΈ”λͺ…2 USING(컬럼λͺ…)

SELECT EMPNO,ENAME,SAL,DEPTNO,DNAME,LOC FROM EMP JOIN DEPT USING(DEPTNO);

 

μ•„λž˜ INNER JOIN λ˜λŠ” OUTER JOIN을 많이 μ“΄λ‹€.
πŸ”˜ INNER JOIN : 결합쑰건을 μ œκ³΅λ°›μ•„ 결합쑰건이 μ°Έ(TRUE)인 ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ 검색 - INNER ν‚€μ›Œλ“œ μƒλž΅ κ°€λŠ₯
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ…1 INNER JOIN ν…Œμ΄λΈ”λͺ…2 ON κ²°ν•©μ‘°κ±΄μ‹

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•©

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;



--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œλ²ˆν˜Έ,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•©
--κ²°ν•© ν…Œμ΄λΈ”에 κ°™μ€ μ΄λ¦„μ˜ μ»¬λŸΌμ΄ μžˆλŠ” κ²½μš° λ°˜λ“œμ‹œ ν…Œμ΄λΈ”을 λͺ…μ‹œν•˜μ—¬ μ»¬λŸΌμ„ ν‘œν˜„ν•˜μ—¬ μ‚¬μš©

SELECT EMPNO,ENAME,SAL,EMP.DEPTNO,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
SELECT EMPNO,ENAME,SAL,DEPT.DEPTNO,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;



--EMP ν…Œμ΄λΈ”κ³Ό SALGRADE ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λ“±κΈ‰λ²ˆν˜Έ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ SAL μ»¬λŸΌκ°’이 SALGRADE ν…Œμ΄λΈ”μ˜ LOSAL μ»¬λŸΌκ°’λΆ€ν„° HISAL μ»¬λŸΌκ°’ λ²”μœ„μ— ν¬ν•¨λ˜λŠ” ν–‰λ§Œ κ²°ν•©

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


2개의 ν…Œμ΄λΈ” 쑰인
--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ SALES λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•©
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO WHERE DNAME='SALES';

SELECT EMPNO,ENAME,SAL,DNAME,LOC
	FROM EMP
    JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
    WHERE DNAME='SALES';


3개의 ν…Œμ΄λΈ” 쑰인
--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”, SALGRADE ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜,λ“±κΈ‰λ²ˆν˜Έ κ²€μƒ‰
--결합쑰건-1 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•©
--결합쑰건-2 : EMP ν…Œμ΄λΈ”μ˜ SAL μ»¬λŸΌκ°’이 SALGRADE ν…Œμ΄λΈ”μ˜ LOSAL μ»¬λŸΌκ°’λΆ€ν„° HISAL μ»¬λŸΌκ°’ λ²”μœ„μ— ν¬ν•¨λ˜λŠ” ν–‰λ§Œ κ²°ν•©

SELECT EMPNO,ENAME,SAL,DNAME,LOC,GRADE
	FROM EMP
    JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO 
    JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL;



πŸ”˜ OUTER JOIN : 결합쑰건이 λ§žλŠ” ν–‰λ§Œ κ²°ν•©ν•˜μ—¬ κ²€μƒ‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 결합쑰건이 λ§žμ§€ μ•ŠλŠ” 행을 NULLκ³Ό κ²°ν•©ν•˜μ—¬ 검색 - OUTER ν‚€μ›Œλ“œλŠ” μƒλž΅ κ°€λŠ₯
--ν˜•μ‹) SELECT κ²€μƒ‰λŒ€μƒ,... FROM ν…Œμ΄λΈ”λͺ…1 {LEFT|RIGHT|FULL} OUTER JOIN ν…Œμ΄λΈ”λͺ…2 ON κ²°ν•©μ‘°κ±΄
--LEFT OUTER JOIN : JOIN ν‚€μ›Œλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ μ™Όμͺ½μ— μœ„μΉ˜ν•œ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  ν–‰μ„ κ²€μƒ‰ μ²˜λ¦¬
--RIGHT OUTER JOIN : JOIN ν‚€μ›Œλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ μ˜€λ₯Έμͺ½μ— μœ„μΉ˜ν•œ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  ν–‰μ„ κ²€μƒ‰ μ²˜λ¦¬
--FULL OUTER JOIN : JOIN ν‚€μ›Œλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ μ™Όμͺ½κ³Ό μ˜€λ₯Έμͺ½μ— μœ„μΉ˜ν•œ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  ν–‰μ„ κ²€μƒ‰ μ²˜λ¦¬

--EMP ν…Œμ΄λΈ”κ³Ό DEPT ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원이름,κΈ‰μ—¬,λΆ€μ„œμ΄λ¦„,λΆ€μ„œμœ„μΉ˜ κ²€μƒ‰
--결합쑰건 : EMP ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’κ³Ό DEPT ν…Œμ΄λΈ”μ˜ DEPTNO μ»¬λŸΌκ°’이 κ°™μ€ ν–‰λ§Œ κ²°ν•©
--40번 λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” μ‚¬μ›μ΄ μ—†μœΌλ―€λ‘œ 40번 λΆ€μ„œμ •보 λ―Έκ²€μƒ‰

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;



--OUTER JOIN κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ κ²€μƒ‰ - 40번 λΆ€μ„œμ— κ·Όλ¬΄ν•˜λŠ” μ‚¬μ›μ΄ μ—†μ–΄λ„ μ‚¬μ›μ •보 λŒ€μ‹  NULLκ³Ό κ²°ν•©ν•˜μ—¬ κ²€μƒ‰

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP LEFT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;--μ‹€ν–‰μ˜€λ₯˜
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP RIGHT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP FULL JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
λ°˜μ‘ν˜•