【MySQL】JOIN은 무엇인가?

4550 단어 MySQLSQL조인redash

JOIN은 무엇인가⁇



사내 SQL 연구회가 재개되었습니다.
이전의 공부회에서, 기본적인 SQL을 쓸 수 있었습니다만,
사실, 업무에 쿼리는 조금 어려운 곳이 있습니다.

그러므로
지금 사촌으로 어려움을 겪고 있습니까? 라고 말하면,
JOIN을 모르겠습니다. 라는 대답이 왔습니다.

그러므로
이번에는 JOIN에 대해 설명합니다.

JOIN은...



JOIN은 두 테이블을 결합합니다.
각 테이블은 자신에게 맞는 데이터를 저장하지만,
다른 테이블에서 데이터를 가져오려면 JOIN해야 합니다.

제품


product_no
이름
price


1
A
1000

2
B
5000

3
C
3000


stock


product_no
count
peceiving date


1
10
2019-10-14

2
50
2019-10-16

3
20
2019-10-17


Result


product_no
count
price
product_no
count
peceiving date


1
A
1000
1
10
2019-10-14

2
B
5000
1
10
2019-10-14

3
C
3000
1
10
2019-10-14

1
A
1000
2
50
2019-10-16

2
B
5000
2
50
2019-10-16

3
C
3000
2
50
2019-10-16

1
A
1000
3
20
2019-10-17

2
B
5000
3
20
2019-10-17

3
C
3000
3
20
2019-10-17


예를 들어,
위와 같이 두 개의 테이블이 있습니다.
이들을 JOIN하고 결합합니다.

하지만 문제가 있습니다.
A와 B의 데이터수가 각각 3개였으므로,
JOIN을 할 때 두 테이블을 결합하여 9 개의 데이터가 나왔습니다.

이런 식으로 JOIN은 두 개의 다른 테이블을 결합 할 수 있지만,
연산량이 비약적으로 증가해 버립니다.
따라서 DB를 설계할 때 JOIN을 피하기 위해 테이블의 수를 가능한 한 줄이는 것이 좋습니다.

JOIN의 종류





JOIN은 여러 종류가 있습니다.
그래서, A테이블만, B테이블만 데이터를 보고 싶은 경우는, 원래 JOIN할 필요가 없기 때문에,
자주 사용하는 JOIN을 설명합니다.
물론 RIGHT JOIN은 LEFT의 반대이므로 생략합니다.

1. Cross JOIN





앞에서 설명한 것처럼 두 테이블의 곱 집합을 실행하지만 크로스 조인입니다.
모든 케이스를 모두 표현해 주는 방법입니다.
SELECT * FROM table1 JOIN table2, ...

2. Inner JOIN





Inner JOIN은 참조 테이블과 Join 테이블의 중복 값을 나타냅니다.
결과 값은 A 테이블과 B 테이블이 모두 가지고 있는 데이터만 검색합니다.
SELECT * 
FROM product
INNER JOIN stock
ON product.product_no = stock.product_no;
SELECT A.price, B.count
FROM product AS A
INNER JOIN stock AS B 
ON A.product_no = B.product_no;

제품


product_no
이름
price


1
A
1000

2
B
5000

3
C
3000


stock


product_no
count
peceiving date


1
10
2019-10-14

2
50
2019-10-16

3
20
2019-10-17


Result


price
count


1000
10

5000
50

3000
20


3. LEFT OUTER JOIN





기준 테이블 값 + 테이블과 참조 테이블의 중복 값을 나타냅니다.
왼쪽 테이블을 기반으로 JOIN을합니다.
그런 다음 결과 값은 A 테이블의 모든 데이터와 A 테이블과 B 테이블의 중복 값을 갖습니다.
SELECT * 
FROM product
LEFT OUTER JOIN JOIN stock
ON product.product_no = stock.product_no;
SELECT *
FROM product AS A
LEFT OUTER JOIN stock AS B 
ON A.product_no = B.product_no;

제품


product_no
이름
price


1
A
1000

2
B
5000

3
C
3000

4
D
2000년


stock


product_no
count
peceiving date


1
10
2019-10-14

2
50
2019-10-16

3
20
2019-10-17


Result


product_no
count
price
product_no
count
peceiving date


1
A
1000
1
10
2019-10-14

2
B
5000
1
10
2019-10-14

3
C
3000
1
10
2019-10-14

4
D
2000년



조금 어려울 수 있지만,
실제로 자주 사용하는 SQL이므로 공부하는 것이 좋다고 생각합니다.

좋은 웹페이지 즐겨찾기