【MySQL】JOINは何もの?
JOINは何もの⁇
社内のSQL勉強会が再開しました。
以前の勉強会で、基本的なSQLを書くことが出来ましたが、
実際、業務にクエリは、少し難しいところがあります。
なので、
今、とこで困っていますか?と言うと、
JOINが分からないです。という返事がきました。
それで、
今回は、JOINについて説明します。
JOINは…
JOINは、両方のテーブルを結合すること。
各テーブルは、各自に合ったデータを保存していますが、
別のテーブルからデータをインポートするにはJOINする必要があります。
product
product_no | name | 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
先ほど説明した通り、両方のテーブルの積集合を実行するが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
product_no | name | 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
product_no | name | 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なので勉強する方が良いと思います。
Author And Source
この問題について(【MySQL】JOINは何もの?), 我々は、より多くの情報をここで見つけました https://qiita.com/ozlee/items/a7797b178ed3dcb03ff1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .