SELECT E.empno, E.ENAME, E.SAL, E.DEPTNO, D.DEPTNO, D.DNAME,
FROM EMP E, DEPT D -- FROM에서 table을 약어로 치환
WHERE E.DEPTNO = D.DEPTNO -- Equi JOIN 개념
ORDER BY E.EMPNO;
서로 다른 두 개의 표에서 정보를 뽑을 때 where절이 없으면 출력이 이상하게 된다.
서로 다른 두 표이지만 데이터가 동일하면 Equi JOIN(등가조인)을 where로 표현해서 사용
*비등가조인: equal기호 없이 사용하는 조인. 근데 실무적으로 잘 안씀
SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL -- E.DEPTNO를 또 SELECT 안해도 된다!
FROM EMP E, DEPT D
where E.DEPTNO = D.DEPTNO and SAL > 2000 -- 이 조인 구문이 이미 DEPTNO를 완성한다!
order by E.DEPTNO, E.EMPNO; -- 문제에 따라 오름차순을 정렬해서 똑같이 출력!
SELECT D.DEPTNO, D.DNAME, TRUNC(AVG(E.SAL)) as AVG_SAL, -- TRUNC없으면 지저분하게 SAL출력됨
MAX(E.SAL) as MAX_SAL, MIN(E.SAL) as MIN_SAL, COUNT(*) as CNT
FROM EMP E, DEPT D
where D.DEPTNO = E.DEPTNO
group by d.deptno, D.DNAME; -- 이 부분 없으면 출력오류 생김
*자체 조인(Inner join): 하나 테이블을 여러 테이블처럼 사용 ex) FROM EMP E1, EMP E2 where E1.MGR = E2.EMPNO;
근데 데이터 형식은 같으나 다른 한쪽 표에는 또 다른 추가 범위에 대한 데이터가 있다면?
-> OUTER JOIN (외부 조인)
단 ORACLE에는 FULL JOIN 개념이 없다. 무조건 한 쪽 기준을 맞춰야 한다.
[조인 개념 차이]
SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.JOB, E.SAL
FROM DEPT D, EMP E
where D.DEPTNO = E.DEPTNO(+) -- DEPTNO기준으로 OPERATIONS DNAME 살림
ORDER BY D.DEPTNO, E.ENAME; -- 결과에 맞게 정렬
* developer 프로그램은 null 표시 나오지만 prompt에서는 공백으로 나온다.
==== JOIN 총 정리 ===
== EQUI JOIN(동등 조인)
SELECT E.*, D.*
FROM EMP E, DEPT D
WEHRE E.DEPTNO = D.DEPTNO
SELECT E.*, D.*
FROM EMP E INNER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
SELECT E.*, D.*
FROM EMP E JOIN DEPT D ON USING (DEPTNO) => X
===LEFT OUTER JOIN
SELECT E.*, D.*
FROM EMP E, DEPT D
WEHRE E.DEPTNO = D.DEPTNO(+)
SELECT E.*, D.*
FROM EMP E LEFT OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
===RIGHT OUTER JOIN
SELECT E.*, D.*
FROM EMP E, DEPT D
WEHRE E.DEPTNO(+) = D.DEPTNO
SELECT E.*, D.*
FROM EMP E RIGHT OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
===RIGHT OUTER JOIN
SELECT E.*, D.*
FROM EMP E, DEPT D
WEHRE E.DEPTNO(+) = D.DEPTNO
===FULL OUTER JOIN
ORACLE X
SELECT E.*, D.*
FROM EMP E FULL OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
===NATURAL JOIN (거의 안씀)
SELECT E.*, D.*
FROM EMP E, DEPT D
SELECT E.*, D.*
FROM E NATURAL JOIN D
'Programming > Oracle SQL' 카테고리의 다른 글
DML and DCL (Data Manipulation, Control Language) (0) | 2023.08.25 |
---|---|
Subquery (0) | 2023.08.25 |
다중행 함수, GROUP BY, HAVING (0) | 2023.08.24 |
Oracle Functions (1) | 2023.08.23 |
기본 이론, 명령어 (table 관리), constraint, SELECT (0) | 2023.08.23 |