JOIN
-두개 이상의 테이블을 하나 이상의 조건을 걸어 합치는거.
테이블의 관계
1) 1:다
1-부모테이블 다-자식테이블
primary key = 테이블의 레코드를 식별할 수 있는 칼럼(기준)
부모-->자식 넘어감
// '다'를 기준으로 하면 쉬움
2) 다:다
-중간테이블을 하나 새로 생성해 중복제거 최소화 (즉 테이블 3개)
(1) EQUI JOIN - 값을 일치시켜 두개의 테이블을 연걸하는 기본 조인방법
ex)
select e.ename , d.dname
from emp e , dept p
where e.deptno=d.deptno;
(2) NON-EQUI JOIN - 값을 비교(연산자)하면서 두개의 테이블을 연결하는 조인방법
ex)
select e.ename, e.job, e.sal , s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal ;
(3) SELF JOIN - 한개의 테이블을 한개이상의 테이블처럼 사용하는 조인
ex)
SELECT e.ename, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno;
(4) OUTER JOIN - 조인할때 만족값이없으면 행이 사라지니까 안사라지게
null 값을 넣어줘서 행을 살림
// 없는쪽에 null사용 ---> (+)
outer테이블 -> 두테이블 중 null 없어도 조건을 만족하는 테이블
ex)
select e.ename, m.ename
from emp e, emp m
where e.mgr = m.empno(+)
// 이 예제기준으로 emp e가 아웃터테이블임.
full outer join= 둘다 outer테이블
---null없이도 조건만족
ANSI 조인
-조인하는건데 국제적 표준 조인 방법이다. 문법이 다름
왜쓰냐? 일하다 오라클안돼서 다른 DBMS를 사용하게되면 오라클 조인으로 만든조인문법 다른 DBMS가 못읽을수도 있으니까 그럼 싹 다 바꿔야되니까 빡치니까
처음에 짤때부터 국제표준인 ANSI로 짜면 그런 만에하나의 경우에 대비할 수 있당^^
ANSI 내부조인
[SY]
ex) 기존조인
select e.employee_id , d.department_name
from employees e, departments d
where e.department_id = d.department_id
ex2) ANSI조인
select e.employee_id , d.department_name
from employees e INNER JOIN departments d
ON e.department_id = d.department_id
기존은 where 절에서만 조인을 조졌는데 ansi조인은 from 절에서 innerjoin 조지고
on 이라는 새로운명령어를 쓴다. where 절은 원래대로 조건만 쓴다.
ex3) ANSI조인
select e.employee_id , d.department_name, department_id
from employees e INNER JOIN departments d
USING ( department_id ) ;
조인하는 두 테이블의 칼럼명이 같을경우 using 을 사용하여 쉽게 쓸 수 있다.
단, using 쓸려면 select절에도 해당 칼럼이름앞에 e나d를 붙히면 오류난다.
ANSI 외부조인
[SY]
from table A [ LEFT/ RIGHT / FULL ] OUTER JOIN TABLE B
아웃터조인이다. 기존은 데이터가 없는쪽에 (+)를 붙혔다면 ANSI조인은
아웃터테이블(데이터 가지고 있는 테이블)의 위치를 같이 적어준다( 왼쪽,오른쪽)
둘다 아웃터조인인 풀아웃터조인은 기존 조인방법으로는 사용못하지만 여기서는 FULL을
이용해서 사용가능 하다.
'SQL_ORACLE' 카테고리의 다른 글
[mybatis] mysql rownum 사용법 (0) | 2021.11.24 |
---|---|
date타입 출력이 이상하게 나올 때 (0) | 2021.11.08 |
[Oracle] 오라클 데이터타입(DataType) 총정리 (0) | 2021.07.09 |
CHAR, VARCHAR, VARCHAR2 차이점 (0) | 2021.06.05 |
[ORACLE] 오라클에서 NUMBER의 범위 (0) | 2021.06.05 |