-
[About _ MySQL _ join]About_Datascience/SQL 2023. 2. 1. 18:49
JOIN은 여러 개의 테이블을 특정 컬럼을 기준으로 결합해서 데이터를 출력하는 방법이다.
Pandas 의 merge 와 같은 기능을 한다고 생각하면 좋을 것 같다.
JOIN에는 종류에 따라 inner join , left join , right join , outer join이 있다.
여기서 outer join이라는 명령어는 MySQL에 따로 없고 UNION이라는 명령어를 이용하여 구현할 수 있다.
벤다이어 그램을 생각해보면
inner join 은 말 그대로 교집합 부분이고 , left join 은 교집합을 포함한 벤다이어그램의 왼쪽 부분 ,
right join은 그 반대인 교집합 포함 오른쪽 벤다이어그램 부분 , outer join은 합집합 개념으로 생각하면 된다.
즉 , 모두 출력을 하는 것이다.
이렇게 join을 할 때 , 빈 값은 null 값으로 출력된다.
<기본적인 사용법>
SELECT 출력하고자 하는 column1 , column2 ... FROM 결합할 table이름1 (LEFT,RIGHT) JOIN 결합할 table이름2 ON (겹치는, 묶어줄) 컬럼1 = (겹치는, 묶어줄) 컬럼2
설명을 위해 임의로 두 개의 테이블(user , addr)을 만들었다 .
user 테이블 addr 테이블 1. INNER JOIN
SELECT user.ui , user.name, addr.an FROM user INNER JOIN addr # INNER 생략 가능! ON user.ui = addr.ui; # ui 가 겹치는 컬럼이기 때문에 ui를 기준으로 join
inner join 결과 2. LEFT JOIN / RIGHT JOIN
# left join SELECT user.ui , user.name, addr.an FROM user LEFT JOIN addr ON user.ui = addr.ui;
left join 결과 # right join SELECT addr.ui , user.name, addr.an # user.ui 에 4,5번이 없다. 따라서 addr.ui를 가져와야함. FROM user RIGHT JOIN addr ON user.ui = addr.ui;
right join 결과 3. OUTER JOIN (UNION)
OUTER JOIN 은 SELECT 문을 실행한 결과를 합쳐서 출력하는 방법으로 구현한다.
여기서 UNION 의 중복제거 특성을 이용하면 OUTER JOIN 을 구현할 수 있게 된다.
#outer join 구현 SELECT user.ui , user.name, addr.an FROM user LEFT JOIN addr ON user.ui = addr.ui UNION SELECT addr.ui , user.name, addr.an FROM user RIGHT JOIN addr ON user.ui = addr.ui;
outer join 결과 예시 (sakila dataset)
#sakila dataset # payment_id , staff_id(로 JOIN) , staff_fullname(CONCAT 이용), amount , payment_date(DATE_FORMAT 이용) SELECT payment.payment_id , payment.staff_id, CONCAT(staff.first_name ,' ', staff.last_name) AS staff_fullname, payment.amount, DATE_FORMAT(payment.payment_date ,'%Y-%m') AS 'year_month' FROM payment JOIN staff ON payment.staff_id = staff.staff_id;
예시 결과 'About_Datascience > SQL' 카테고리의 다른 글
[About _ MySQL _ INDEX] (0) 2023.02.03 [About _ MySQL _ Sub Query] (0) 2023.02.02 [About_MySQL _ group by 와 having] (0) 2023.02.01 [About_MySQL _ 함수 , 조건절] (0) 2023.01.31 [About_MySQL 기본문법(2)_DML의 CRUD] (0) 2023.01.31