JOIN 조인 + 예시

Objective_chicorita·2022년 8월 30일
3

SQL

목록 보기
3/5
post-thumbnail

JOIN 조인

두 개의 테이블을 서로 묶어서 하나의 결과를 만드는 것

공통된 부분만 골라 결합(교집합) → INNER JOIN
공통된 부분 + 공통되지 않는 부분(합집합) → FULL OUTER JOIN
왼쪽 테이블 값만 유지(차집합: (AB)(AB)(A-B)\bigcup (A \bigcap B)) → LEFT OUTER JOIN
오른쪽 테이블 값만 유지(차집합 : (BA)(A(B-A) \bigcup(A\bigcap B)B)) → RIGHT OUTER JOIN

1. INNER JOIN(내부 조인)

DateCountryIDUnits
1/1/2020140
1/2/2020125
1/3/2020330
1/4/2020235
IDCountry
3panama
4spain
DateCountryIDUnitsCountry
1/3/2020330spain
SELECT Sales.*, countries.country
FROM Sales
(INNER) JOIN contries
ON Sales.countryID = countries.ID;
👩🏻‍💻 INNER JOIN 문법 1)

SELECT 조회할 컬럼
FROM 테이블1, 테이블2
[WHERE 조건문]

2)

SELECT 조회할 컬럼
FROM 테이블1
(INNER) JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼
[WHERE 추가조건]

2. NATURAL JOIN

  • 동일한 타입과 같은 이름을 가진 컬럼이 있으면 실행함.
  • 두 테이블이 갖는 공통 컬럼에 대해서 Inner Join은 별개의 컬럼으로 나타내지만, Natural Join은 하나의 컬럼으로 나타낸다.
  • 잘 사용하지않음. 자연조인 뒤에 ON, USING, WHERE을 쓸 수 없다.
  • join ~ on 칼럼.a = 칼럼.b : 이름이 같은 칼럼이 없고 b의 칼럼이 다를 경우 on 조건식을 통해서 두 칼럼이 같은 것을 명시해줘야함.
  • join ~ using (): 이름이 같은 칼럼이 너무 많을때
    FROM memb m, stnt s
    WHERE m.mno = s.mno;

--natural join
SELECT m.mno, name, s.mno, work, bank
FROM memb m CROSS JOIN stnt s

```sql
--실행결과
MariaDB [studydb]> select m.mno, name, s.mno, work, bank
    -> FROM memb m, stnt s
    -> WHERE m.mno = s.mno;
+-----+------+-----+------+--------------+
| mno | name | mno | work | bank         |
+-----+------+-----+------+--------------+
| 100 | s100 | 100 | N    | 비트은행     |
| 101 | s101 | 101 | Y    | 비트은행     |
| 102 | s102 | 102 | N    | 캠프은행     |
| 103 | s103 | 103 | Y    | 우리은행     |
| 104 | s104 | 104 | N    | 국민은행     |
+-----+------+-----+------+--------------+
5 rows in set (0.006 sec)

3. FULL OUTER JOIN

• 공통된 부분만 골라 결합하는 Inner Join 과 다르게 공통되지 않은 행도 유지한다.

idnamedept_namesalary
1JamesPhysics95000
2JohnComp.Sci65000
3MarkMath75000
4TomPhysic90000
idcourseSemesterYear
3CS-101Fall2019
4PHY-312Spring2020
5CS-203Spring2019
6CS-421Fall2020
idnamedept_namesalaryidcourseSemesterYear
1JamesPhysics95000nullnullnullnull
2JohnComp.Sci65000nullnullnullnull
3MarkMath750003CS-101Fall2019
4TomPhysic900004PHY-312Spring2020
nullnullnullnull5CS-203Spring2019
nullnullnullnull6CS-421Fall2020
SELECT *
FROM instructor
FULL OUTER JOIN teaches
ON instructor.id = teaches.id;
👩🏻‍💻 전체 외부 조인 기본문법 )

SELECT 조회할 컬럼
FROM 테이블1
FULL OUTER JOIN 테이블2
ON 조건문
[WHERE 추가조건문]

4. LEFT OUTER JOIN

• 왼쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.

idnamedept_namesalary
1JamesPhysics95000
2JohnComp.Sci65000
3MarkMath75000
4TomPhysic90000
idcourseSemesterYear
3CS-101Fall2019
4PHY-312Spring2020
5CS-203Spring2019
6CS-421Fall2020
idnamedept_namesaleryidcourseSemesterYear
1JamesPhysics95000nullnullnullnull
2JohnComp.Sci65000nullnullnullnull
3MarkMath750003CS-101Fall2019
4TomPhysic900004PHY-312Spring2020
SELECT *
FROM instructor
LEFT OUTER JOIN teaches
ON instructor.id = teaches.id;
👩🏻‍💻

SELECT 조회할 컬럼
FROM 기준테이블1
LEFT OUTER JOIN 테이블2
ON 조건문
[WHERE 추가조건문

5. RIGHT OUTER JOIN

• 오른쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.

idnamedept_namesalary
1JamesPhysics95000
2JohnComp.Sci65000
3MarkMath75000
4TomPhysic90000
idcourseSemesterYear
3CS-101Fall2019
4PHY-312Spring2020
5CS-203Spring2019
6CS-421Fall2020
idnamedept_namesaleryidcourseSemesterYear
3MarkMath750003CS-101Fall2019
4TomPhysic900004PHY-312Spring2020
nullnullnullnull5CS-203Spring2019
nullnullnullnull6CS-421Fall2020
SELECT *
FROM instructor
RIGHT OUTER JOIN teaches
ON instructor.id = teaches.id;
👩🏻‍💻

SELECT 조회할 컬럼
FROM 테이블1
RIGHT OUTER JOIN 기준테이블2
ON 조건문
[WHERE 추가조건문]

6. CROSS JOIN 상호조인

  • 곱집합 : 두 테이블 데이터의 모든 조합
ID제품
1책상
2장식장
3의자
ID색상
1빨강
2파랑
3하얀
ID제품ID색상
1책상1빨강
2책상2파랑
3책상3하얀
4장식장1빨강
5장식장2파랑
6장식장3하얀
7의자1빨강
8의자2파랑
9의자3하얀
👩🏻‍💻 1.

SELECT 조회할컬럼
FROM 테이블1, 테이블2

SELECT 조회할컬럼
FROM 테이블1
JOIN 테이블2

SELECT 조회할컬럼
FROM 테이블1
CROSS JOIN 테이블2

profile
객체지향 치코리타와 함께하는 dev_travel

2개의 댓글

comment-user-thumbnail
2022년 9월 2일

퍼가요~♡

답글 달기
comment-user-thumbnail
2022년 9월 2일

주워가요옹 ㅋㅋ 주섬주섬

답글 달기