⭐ RDBMS는 중복을 최소화하는 형태의 데이터베이스
컬럼을 확장하는 방법(데이터를 연결)
분산된 다른 테이블의 컬럼을 가져온다.
ANSI - SQL (American National Standards Institute)
ANSI - NATURAL JOIN
조인하고자 하는 테이블간 컬럼명이 동일할경우 해당 칼럼으로 행을 연결
컬럼 이름뿐 아니라 데이터 타입도 동일해야함
SELECT [colummn]
FROM [table1] NATURAL JOIN [table2]
SELECT *
FROM emp NATURAL JOIN dept;
SELECT emp.empno, emp.ename, deptno, dept.dname -- 조인조건으로 사용된 컬럼은 테이블 한정자를 붙이면 에러
FROM emp NATURAL JOIN dept;

ANSI - JOIN with USING
조인 테이블간 동일한 이름의 컬럼이 복수개 인데
이름이 같은 칼럼중 일부로만 조인을 하고 싶을 때 사용
SELECT [colummn]
FROM [table1] JOIN [table2] USING (colummn)
SELECT *
FROM emp JOIN dept USING (deptno);
ANSI - JOIN with ON⭐⭐
NATURAL JOIN, JOIN with USING은 조인테이블의 조인컬럼명이 같아야하는 제약조건이 있음.
설계상 두 테이블 컬럼 이름이 다를경우 개발자가 직접 조인조건을 기술할 수 있도록 제공
SELECT [colummn]
FROM [table1] JOIN [table2] ON (table1.컬럼 = table2.컬럼)
SELECT *
FROM emp JOIN dept ON (emp.deptno = dept.deptno);
ORACLE - SQL⭐⭐
오라클에선 조인조건을 WHERE절에 기술
SELECT [colummn]
FROM [table1], [table2]
WHERE table1.컬럼 = table2.컬럼
SELECT emp.*, emp.deptno, dname
FROM emp, dept
WHERE emp.deptno = dept.deptno;
-- != 로도 연결이 가능함
SELECT emp.*, emp.deptno, dname
FROM emp, dept
WHERE emp.deptno != dept.deptno;

SELF-JOIN
ANSI SELF-JOIN
같은 테이블을 서로다른 alias로 명명해서 사용
SELECT [table.colummn] ...
FROM [table1] [1alias] *JOIN** [table2] [2alias] ON (1alias.colummn = 2alias.colummn)
SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e JOIN emp m ON (e.mgr = m.empno);
--king 은 상사가 없음

ORACLE SELF-JOIN
같은 테이블을 서로다른 alias로 명명해서 사용같은 테이블을 서로다른 alias로 명명해서 사용같은 테이블을 서로다른 alias로 명명해서 사용
SELECT [colummn]
FROM [table] [alias1], [table] [alias2]
WHERE alias1.colm1 = alias2.colm2
SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno AND (e.empno BETWEEN 7369 AND 7698) ;

nonequi join
조인 조건이 = 이 아닌 조인
ex) != 조인
--ANSI
SELECT empno, ename, sal, salgrade.grade
FROM emp JOIN salgrade
ON sal BETWEEN salgrade.losal AND salgrade.hisal;
--ORACLE
SELECT empno, ename, sal, salgrade.grade
FROM emp, salgrade
WHERE sal BETWEEN salgrade.losal AND salgrade.hisal;

-
JOIN 실습
--JOIN 실습 0 SELECT empno, ename, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno; --JOIN 실습 0_1 SELECT empno, ename, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.deptno IN (10, 30); --JOIN 실습 0_2 SELECT empno, ename,sal, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.sal > 2500; --JOIN 실습 0_3 SELECT empno, ename,sal, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.sal > 2500 AND emp.empno > 7600;
'IT > SQL' 카테고리의 다른 글
| [ORACLE]JOIN 의 종류 (OUTER, CROSS) (0) | 2020.07.08 |
|---|---|
| [ORACLE] 쿼리 연습용 테이블 소스 (0) | 2020.07.02 |
| [ORACLE] GROUP BY 함수 (0) | 2020.07.01 |
| [ORACLE]SQL 조건문(Condition) (0) | 2020.07.01 |
| [ORACLE] NULL 관련 함수 (0) | 2020.06.30 |