JOIN은 두 개 이상의 테이블을 특정조건으로 연결해서 한 테이블 처럼 사용할 수 있게해주는 문법요소 입니다.
-- 사용법
FROM 테이블1(주 테이블)
{CROSS | INNER | {LEFT | RIGHT} OUTER} JOIN 테이블2
[ON 연결조건]
-- 사용예시
SELECT * FROM tbl_member AS MB
INNER JOIN tbl_orderinfo AS OI ON OI.memberId = MB.memberId;
# 생략예시
SELECT *
FROM 테이블1, 테이블2
ON 연결조건;
💡 어떤 테이블을 FROM 절에 쓰고, JOIN 절에 써야할까?
FROM 절에는 조회하는 주 목적이 되는 테이블을 작성해주야합니다.
- 예시1
" 2023년 총 매출 금액이 30,000원 이상인 회원 리스트를 뽑아주세요"SELECT MB.memberId , MB.name , SUM(OI.orderAmount) FROM tbl_member AS MB INNER JOIN tbl_orderinfo AS OI ON OI.memberId = MB.memberId WHERE YEAR(OI.orderDate) = 2023 GROUP BY YEAR(OI.orderDate), memberId HAVING SUM(OI.orderAmount) >= 30000;
- 예시2
"개발부서인 사원 정보를 뽑아주세요"SELECT * FROM employees AS EM INNER JOIN dept_emp AS DE ON DE.emp_no = EM.emp_no INNER JOIN departments AS DP ON DP.dept_no = DE.dept_no WHERE DP.dept_no = 'd005';
CROSS JOIN은 상호 조인
이라고도 부르며, JOIN으로 연결한 각 테이블의 데이터를 전부 나열하는 방식입니다.
따라서, (테이블1의 행 개수) * (테이블2의 행 개수)
만큼의 행이 결과로 나오게 됩니다.
-- 사용법
FROM 테이블1(주 테이블)
CROSS JOIN 테이블2
[ON 연결 조건];
-- 사용예시
SELECT *
FROM employees AS EM
CROSS JOIN salaries AS SL
LIMIT 100;
INNER JOIN은 내부 조인
이리고도 부르며, 연결할 각 테이블에서 특정조건으로 연결된 데이터만 갖고오는 JOIN 방식입니다.
즉 각 테이블의 교집합 데이터만 갖고온다고 볼 수 있습니다.
-- 사용법
FROM 테이블1(주 테이블)
INNER JOIN 테이블2
ON 연결 조건; # ON절을 필수적으로 명시합시다.
-- 사용예시
SELECT *
FROM tbl_member AS MB
INNER JOIN tbl_orderInfo AS OI
ON OI.memberId = MB.memberId # 각 테이블의 memberId 컬럼이 서로 일치하는 기준으로 연결조건을 명시함.
OUTER JOIN은 외부 조인
이라고도 부르며, LEFT OUTER JOIN
과 RIGHT OUTER JOIN
으로 나뉩니다.
LEFT / RIGHT의 키워드를 기준으로 기준 테이블을 정하고 해당 기준 테이블의 데이터 기준으로 데이터를 가져옵니다.
즉 LEFT 기준일 시 왼쪽 테이블 기준으로 데이터를 가져오기 때문에 왼쪽 테이블에는 데이터가 있고, 우측 테이블에는 없는 데이터도 가져옵니다.
마찬가지로 RIGHT 기준일 경우 우측 테이블에는 있고, 좌측 테이블에는 없는 데이터도 가져옵니다.
=> ON 연결조건절에 해당하지 않는 데이터라도 기준 테이블에 있는 데이터면 가져옵니다. (없는 컬럼은 null
로 표시)
-- 사용법
# LEFT JOIN
FROM 테이블1
LEFT OUTER JOIN 테이블2
ON 연결 조건;
# RIGHT JOIN
FROM 테이블1
RIGHT OUTER JOIN 테이블2
ON 연결조건;
# 사용 예시는 아래 내용 참고
💡 어떤게 LEFT테이블이고, RIGHT 테이블일까?
일단 기본적으로 해당 JOIN절 기준으로 좌측에 있는 테이블을 LEFT 테이블 / JOIN절에 작성한 테이블을 RIGHT 테이블 이라고 합니다.다중 JOIN으로 여러 테이블을 연결했을 경우 ON절에 작성한 테이블 기준으로 LEFT 테이블을 결정합니다.
-- 기본 OUTER JOIN 사용예시 SELECT * FROM 테이블A AS A LEFT OUTER JOIN 테이블B AS B ON B.컬럼1 = A.컬럼1; # LEFT OUTER JOIN이기 때문에 A 테이블 기준으로 데이터 가져옴. SELECT * FROM 테이블A AS A RIGTH OUTER JOIN 테이블B AS B ON B.컬럼1 # RIGHT OUTER JOIN이기 때문에 B 테이블 기준으로 데이터 가져옴. -- 다중 조인에서 OUTER JOIN 사용예시 SELECT * FROM 테이블A AS A RIGHT OUTER JOIN 테이블B AS B ON B.컬럼1 = A.컬럼1 # LEFT : 테이블A / RIGHT : 테이블B LEFT OUTER JOIN 테이블C AS C ON C.컬럼1 = A.컬럼1 # LEFT : 테이블A / RIGHT : 테이블C LEFT OUTER JOIN 테이블D AS D ON D.컬럼2 = C.컬럼2 # LEFT : 테이블C / RIGHT : 테이블D RIGHT OUTER JOIN 테이블E AS E ON E.컬럼1 = A.컬럼1 # LEFT : 테이블A / RIGHT : 테이블E ;
자체 조인
이라고도 하며 INEER JOIN 또는 OUTER JOIN을 이용해 자기 자신 테이블을 JOIN하는 것을 말합니다.
주로 자신 테이블 안에서 특정 조건으로 데이터를 뽑는다던가 특정 연산을 하고싶다던가 하는 작업을 하고자할 때 사용합니다.
-- 사용법
# INNER JOIN 사용
FROM 테이블1
INNER JOIN 테이블1
ON 연결 조건;
# OUTER JOIN 사용
FROM 테이블1
LEFT OUTER JOIN 테이블1
ON 연결 조건;
-- 사용예시
SELECT T1.*
FROM titles AS T1
INNER JOIN titles AS T2 # 자기자신을 JOIN함
ON T1.emp_no = T2.emp_no AND T1.title <> T2.title;
다중 조인
이라고도 하며 3개 이상의 테이블을 JOIN할 경우를 말합니다.
-- 사용법
FROM 테이블1
INNER JOIN 테이블2 ON 연결조건
INNER JOIN 테이블3 ON 연결조건
OUTER JOIN 테이블4 ON 연결조건
...
;
-- 사용예시
SELECT
EM.emp_no, EM.first_name, EM.last_name, EM.gender
, DP.dept_no, DP.dept_name
, TT.title, TT.from_date
FROM employees AS EM
INNER JOIN dept_emp AS DE ON DE.emp_no = EM.emp_no
INNER JOIN departments AS DP ON DP.dept_no = DE.dept_no
LEFT OUTER JOIN titles AS TT ON TT.emp_no = EM.emp_no
LIMIT 100
;
MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음
위 책을 공부하며 작성하고 있습니다!