Join 심화

highway92·2021년 9월 15일
0

SQL

목록 보기
7/11

1. JOIN (교집합)

두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것이다.

연산자에 따라 Join 방식을 분류하면
EQUI JOIN 과 NON EQUI JOIN 으로 구분 할 수 있다.

EQUI JOIN

두 개의 테이블 간에 서로 정확하게 일치하는 경우를 활용하는 조인이다.

즉 등가연산자 (=) 를 사용한 조인이며
대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 조인이 그런것은 아니다.

NON EQUI JOIN

두 개의 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용하는 조인
즉 등가 연산자 이외의 연산자들을 사용한다.
( > , >= , <= , < , BETWEEN)

2. FROM 절 JOIN 형태

inner join

select * from user a (inner) join class b
on a.class_id = b.id;

on 조건절을 활용하여 column명이 다르더라도 join 조건을 사용 할 수 있다.

select * from 테이블 1 join 테이블 2
using(기준칼럼);

using 조건절 사용시에는 칼럼이나 테이블에 별칭을 붙일 수 없다.

natural join

select * from 테이블 1 natural join 테이블 2;

natural join 사용시 추가로 on 조건절이나, using 조건절 where 조건절은 사용 할 수 없다.

cross join

join 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 조회한다.(브루트 포스...?)

select * from student
(cross) join class;

outer join

두 개의 테이블 간에 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.

빈 곳은 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 쿼리는 모두 같은 결과를 가진다.

self join

동일 테이블 사이의 조인이며

동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 별칭을 필수적으로 붙여야 한다.

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;
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글