두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것이다.
연산자에 따라 Join 방식을 분류하면
EQUI JOIN 과 NON EQUI JOIN 으로 구분 할 수 있다.
두 개의 테이블 간에 서로 정확하게 일치하는 경우를 활용하는 조인이다.
즉 등가연산자 (=) 를 사용한 조인이며
대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 조인이 그런것은 아니다.
두 개의 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용하는 조인
즉 등가 연산자 이외의 연산자들을 사용한다.
( > , >= , <= , < , BETWEEN)
select * from user a (inner) join class b
on a.class_id = b.id;
on 조건절을 활용하여 column명이 다르더라도 join 조건을 사용 할 수 있다.
select * from 테이블 1 join 테이블 2
using(기준칼럼);
using 조건절 사용시에는 칼럼이나 테이블에 별칭을 붙일 수 없다.
select * from 테이블 1 natural join 테이블 2;
natural join 사용시 추가로 on 조건절이나, using 조건절 where 조건절은 사용 할 수 없다.
join 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 조회한다.(브루트 포스...?)
select * from student
(cross) join class;
두 개의 테이블 간에 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.
빈 곳은 NULL 값으로 출력하며
WHERE 조건절에서 한쪽에만 있는 데이터를 포함시킬 테이블 쪽으로 (+)를 위치 시킨다.
하지만 헷갈리니까 그냥 left, right를 쓰도록 하자..
select * from user,class
where user.class_id (+)= class.class_id;
select * from user left outer join class
on user.class_id = class.class_id;
select * from class right outer join user
on user.class_id = class.class_id;
위의 3 쿼리는 모두 같은 결과를 가진다.
동일 테이블 사이의 조인이며
동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 별칭을 필수적으로 붙여야 한다.
select * from EMPLOYEE;
select a.employee_id,a.name,a.salary,b.name,b.salary
from EMPLOYEE as a, EMPLOYEE as b
where a.manager_id = b.employee_id
and a.salary > b.salary
order by employee_id ASC;