JOIN
두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는것.
사용자가 필요한 집합 결과를 도출 해준다.
교집합 (특정 컬럼 기준)
두 테이블의 값 중 모두 포함된 값만 표시한다.
SELECT
*
FROM
tb_member_level AS l
INNER JOIN
tb_member AS m
ON
l.level_num = m.m_level;
ON : 선택한 테이블 내에서 조건을 걸어 검색하는 것 이다.
논리연산자 AND로 조건을 추가할 수있다.
AND조건과 WHERE의 차이를 알아야 한다.
한쪽 집합 모두 출력 (특정 컬럼 기준)
SELECT
*
FROM
tb_member_level AS l
LEFT JOIN
tb_member AS m
ON
l.level_num = m.m_level;
NULL값을 조회 하고 싶은 경우 IS NULL 을 사용한다.
반대로 NULL값이 아닌 값을 조회 하고 싶은 경우 IS NOT NULL을 사용한다.
IS NOT NULL을 입력한 경우 INNER JOIN과 같은 결과를 얻을 수 있다.
SELECT
*
FROM TABLE A
LEFT JOIN TABLEB
ON A.KEY = B.KEY
WHERE B.KEY IS NULL;
SELECT
*
FROM
tb_member_level AS l
LEFT JOIN
tb_member AS m
on
l.level_num = m.m_level
WHERE
m_id IS not null;
동일 집합끼리 특정 컬럼 기준으로 집합 출력
(잘 사용안하지만 계층구도를 만들 때 사용한다.)
SELECT
m1.m_id AS member1
,m2.m_id AS member2
,m1.m_addr AS address
FROM
tb_member AS m1
JOIN
tb_member AS m2
ON
m1.m_id <> m2.m_id
AND
m1.m_addr = m2.m_addr
ORDER BY m1.m_id;
두 집합의 곱집합 출력
SELECT
*
FROM
tb_member_level AS l
CROSS JOIN
tb_member AS m
ORDER BY l.level_num, m.m_id;
특정 집합의 같은 이름을 가진 컬럼 간의 조인집합을 출력
(같은 컬럼이여야 한다. 이너조인과 같이 표현된다.)
SELECT
*
FROM
tb_member_level
NATURAL JOIN
tb_member_backup;
SELECT
*
FROM
tb_member_level AS l
INNER JOIN
tb_member_backup AS mb
ON
l.level_num = mb.level_num;