🐶 JOIN
기준을 가지고 있는 데이터를 합치는 것
언제사용되는가?
보통 한 테이블 내에서 내가 원하는 정보가 모두 있으면 좋지만, 여러 테이블에 흩어져 있는 경우가 있다. 이렇게 혼재된 데이터를 가져올 때 사용한다.
여러가지 JOIN이 존재하는데, 그 중 우리는 INNER/ LEFT/ RIGHT/ OUTER JOIN을 다룰 것이다.
🐶 INNER JOIN
※ Inner join을 수행하기 위해서는 결합하고자 하는 테이블이 동일한 컬럼을 가져야 한다.
문제1. (테이블 2개인 경우) student 내에 학과 컬럼을 이용해서 profressor 테이블에 있는 연구소 정보를 얻는다. 이 두 개 정보를 조합해 가져오기 위해서는 join을 활용해보자.
student 테이블에도 학과가있고, professor테이블에도 학과가 있음.
▲ student정보의 이름, 학과, 지도교수를 추출하고 professor테이블에서 연구실 정보를 얻어온다. 그리고 student 테이블에 학과와 professor테이블에 학과가 서로 겹치는 정보이니 이를 기준으로 병합을 하도록 하였다.
join이라고 하면 보통은 inner join을 지칭함.
문제2. (테이블 3개인 경우) student테이블의 지도교수와 professor테이블의 이름이 겹친다. 그리고 student 테이블의 학번과 scholarship 테이블의 학번이 겹친다. 이 세 개의 공통 컬럼을 이용하여 병합하여보자.
student테이블의 지도교수 컬럼과 professor테이블의 이름을 병합하여 엮었고, scholarship테이블의 학번과 student테이블의 학번을 병합하여 테이블을 엮었다. 그렇게 원하는 데이터를 불러옴.
이처럼 join은 하나의 테이블 뿐만 아니라 두 개 이상의 테이블도 엮을 수 있다.
※ join을 명시하지 않고도 join을 사용한 듯한 효과를 만들어낼 수 있다.
아래는 SELECT, FROM, WHERE만 했는데 JOIN을 한것과 같은 효과가 난다.
문제3. 김대엽 학생이 공결처리를 하고 싶다. 학과 연락을 해야하는데, 어떻게 해야할까???
▷ major 테이블과 student테이블을 join하여서 원하는 찾아낼 수 있다.
logic) 김대엽학생의 학과를 파악한다. -> major테이블과 student테이블에 학과 컬럼은 공통으로 존재한다. -> 학과컬럼을 이용하여 join을 한다. -> and조건을 추가로 걸어서 학생이름 '김대엽' 찾기
student 테이블 내에서 가져올 컬럼이니, 'student.학번' 이런 식으로 붙이지 않아도 된다. 만약, 다른 테이블에서 가져올 경우라면 붙여야겠지만...
이런 식으로 join없이도 sql구문을 새로 짤 수 있다.
🐶 Outer Join
inner join은 양 테이블에 하나의 컬럼이라도 공통된 데이터가 존재해야 가능했지만, OuterJoin은 조건을 만족하지 않는 데이터 또한 포함한 결과를 출력할 수 있다.
즉, 한 쪽 테이블에만 데이가 존재해도 된다??? 무슨 말인지 모르겠지만, 일단...
Outer Join은 여러 타입이 존재하는데, LEFT/ RIGHT/ FULL OUTER JOIN이 있다.
1. LEFT OUTER JOIN
LEFT JOIN, 왼쪽에 있는 정보를 출력한다.
왼쪽에 있는 테이블을 기준으로 OUTER JOIN을 수행할 수 있다.
2. RIGHT OUTER JOIN
RIGHT JOIN, 오른쪽에 있는 정보를 출력한다.
3. FULL OUTER JOIN
4. SELF JOIN
자기자신과 병합...?
5. CROSS JOIN
상호 병합
'SQL' 카테고리의 다른 글
MySQL 환경만들기 (0) | 2023.08.22 |
---|---|
[🎉완강🎉]UNION, GROUP BY, HAVING (0) | 2023.08.17 |
조건문 (0) | 2023.08.16 |
WebSQL 내장함수(문자열/ 숫자 함수) (0) | 2023.08.16 |
CRUD (0) | 2023.08.16 |