
Join
Join이란?
- from 절에 재료집합이 두 개 이상 (more than one) 있는 것이다.
어떻게 이해를 하면 될까?
for문 안에 for 문이 들어있다고 생각하면 이해하기 편하다.
begin
for dept in (select * from departments) loop
dbms_output.put_line(dept.department_id);
for emp in (select * from employees) loop
dbms_output.put_line(emp.employee_id);
end loop;
dbms_output.put_line('----------');
end loop;
end;
-> 만약 데이터 건수가 100건인 재료집합 3개를 조인한다면 기본 결과 건수는 몇개일까?
정답은 100*100*100 이다.
Join 을 잘 만드는 2가지 TIP
첫번쨰 반복문 안의 반복문이라고 생각해라...
두번째 저런 반복문안의 반복문이 있는 행의 출력한 만큼 행의 개수가 있는 단일 테이블로 생각한다.
(저런 엄청 많은 행을 복제한 단일테이블이 있다고 생각하면 된다.)
걔네들이 연결된 하나의 큰테이블을 생각한다...
그리고 내가 마음에 드는 게 남을때 까지 where에 계속 ㅅ조건을 붙여주면되는거다.
from 절에는 앞에 데이터가 많은걸 적고 뒤쪽에 데이터가 적은걸 배치한다.(관례상)
*주의할점
조인할때
타고타고 연결된 부분을 잘 생각하면서 조인해야한다.
그래야 실수를 하지 않는다!
1대 다를 테이블을 조인하면 다는 남게 되고 1에서의 건수가 늘어나게 되는거다.
적은 테이블이 넓은 테이블을 기준으로 붙는거다.
Join관련 용어
select *
from emp e, dept d -- Join statement
where e.deptno = d.deptno -- Join predicate
and e.sal >= 300 -- Non-join predicate
and d.deptno = 20 -- Non-join predicate(Single-row predicate)
order by 1;
Join 구문
- Equi Join
- Non-equi Join
- Self Join
- Outer Join
Join 구문 예시
- Equi Join
select *
from emp e, dept d
order by 1;
select *
from emp e, dept d
where e.deptno = d.deptno;

- Non-equi Join
select e.employee_id, e.salary, g.*
from employees e, job_grades g
where e.salary >= g.lowest_sal and e.salary <= g.highest_sal
order by 1;

- Self Join
select *
from emp e1, emp e2
where e2.empno = 1010
and e1.sal > e2.sal;
* from절에 같은 이름의 테이블이 2개이상 나오면 셀프 조인이라고 부른다.
- Outer Join
select *
from emp e, dept d
where e.deptno (+) = d.deptno;
ourter JOin 은 where 조건에 없는 결과를 추가적으로 더 밑에 붙이고 싶을때 사용하는 방법이다.

** 참고
Inner Join은 조인 조건에 맞는 결과만 리턴함. 즉, equi, nonequi 조인은 모두 Inner Join이라 할 수 있음
Outer Join은 Inner Join 결과에 조인 조건에 만족하지 않는 결과도 추가적으로 리턴함
Join 문장 작성 흐름
(1) 필요한 재료 집합을 파악해서 from절에 둠
(2) 필요한 prediate를 계속 where절에 추가함
(3) 리턴될 행이 결정되면 select list를 정리함
Null
AND (F > N > T)
and | T | F | N |
T | T | F | N |
F | F | F | F |
N | N | F | N |
OR (T > N > F)
or | T | F | N |
T | T | T | T |
F | T | F | N |
N | T | N | N |
NOT
not | |
T | F |
F | T |
N | N |
null은 0이 아니다.
null = 0.2(값)은 결과값이 null 이다.
null로 연산을 하면 결과가 null이 나온다.
참고
오라클에서는
ANSI 표준 SQL 사용을 추천한다.
'Oracle' 카테고리의 다른 글
[Oracle]정렬, 데이터 연결_1102 (0) | 2022.11.03 |
---|---|
[Oracle]Join 기본(2)_1101 (0) | 2022.11.01 |
[Oracle]계정 생성,접속/포워드 엔지니어링__개발공부 80일차 (0) | 2022.06.27 |
[Oracle] UPDATE/DELETE __개발공부 35일차 (0) | 2022.04.10 |
[Oracle] WITH/LIKE__개발공부 34일차 (0) | 2022.04.10 |