質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

13289閲覧

SQLの内部結合か外部結合の決める基準は何でしょうか?

k499778

総合スコア599

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/11/14 09:22

現在webアプリの設計をしています。

データ取得のためにSQLも考えています。

そこで質問です。結論から言うと、

結合する場合、外部結合と内部結合の判断基準はどこになるでしょうか?

というのも、複数テーブルから取得しているSQLを見るとLEFT OUTER JOINしているものが多いのです。

なぜでしょうか?
内部結合の方が洗練されたデータが取れてきそうな気がします。
パフォーマンスが上がるのでしょうか?
とにかくわからなかったら外部結合のような考え方があるのでしょうか?

もしわかる方がいれば教えていただきたいです。
判断基準または外部結合にしがちな理由についてです。お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

結合する場合、外部結合と内部結合の判断基準はどこになるでしょうか?

データベースを使用するアプリの設計で、取得のためのSQLを考えられているという事なので、
データベースの設計をしていないなら、あなたには決められません。
※データから判断すると、誤った判断になりかねません。

ER図などの設計資料を入手して、それに従って下さい。

投稿2018/11/14 09:33

編集2018/11/15 00:29
sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/14 10:14

回答ありがとうございます。 ER図に従うとはどういうことでしょうか?ER図はあります。
sazi

2018/11/14 11:12 編集

ER図にはテーブル同士の関係性を示すリレーションが張られているはずです。 一般的には、その線の形状で内部結合なのか外部結合なのかが判断できます。
sazi

2018/11/14 11:21 編集

学習だとか設計の話なら別ですけど、ER図があるのに、どちらの結合方法になるかの質問になるという事は、そのままSQLを組み立てるとバグを生む可能性があります。 見下して言っている訳ではなく、素直にそうした方が良いと思っての回答です。 ER図などに記載が無いなら、尚のこと確認された方が良いです。
guest

0

ベストアンサー

複数テーブルから取得しているSQLを見るとLEFT OUTER JOINしているものが多いのです。

単に「そうしないと片方がNULLで必要なデータが消える」という可能性も大いにあります。

投稿2018/11/14 10:15

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/14 10:16

回答ありがとうございます。 単純にこの回答が今の状況にマッチしている気がします。
maisumakun

2018/11/14 10:18

SQLもテーブル構造もなしでは、何も議論はできません。LEFT JOINもINNER JOINもそれぞれ意味が違う構文ですので、正しく使われているのか、INNER JOINでいいのにLEFT JOINになっているのかは、「実際のSQL文と、欲しいデータ」を言ってくれないと、一般論しか言えません。
guest

0

商品IDをキーとする商品マスターと月間売上データのテーブルで考えてみましょう。

その月の売上げがないデータを表示しなければINNER JOIN, 売上げがないデータも表示したい場合はOUTER JOINになります。

投稿2018/11/14 09:27

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/14 09:37

回答ありがとうござます。 シンプルならそうだと判断できるのですが、複数のテーブル、例えば5つほどのテーブルを結合する場合、外部結合が多い気がするのです。 またそれぞれのテーブルから値を取得していたりするので、売り上げがないデータも表示したいといったシンプルな判断がしづらいです。表示項目が多いので。 そういった時はどのように判断すればいいでしょうか?またどういった判断基準で外部結合で結合している可能性が高いでしょうか?
Orlofsky

2018/11/14 10:21

JOINが10個だろうと20個だろうと基本的な考え方は回答の例と同じです。仕様や実際のテーブル定義やデータの内容を見ないとなぜ内部結合か外部結合かで記述されているかはわかりません。チームの先輩に確認されては?確認できる先輩がいない職場ならMySQLをきちんと勉強するなり、数か月でも良いから熟練者を雇って調べてもらっては? k499778さんの今の能力でシステムをいじると破綻する可能性が高いです。わたしはOracleのパフォーマンス・チューニングで呼ばれる機会が多いですが、時々破綻していることを認めない管理者がいて、高い人件費をもらっているのにチューニングさせてもらえないことがあります。
guest

0

結合して、

余計なデータが含まれるなら、内部結合
必要なデータが取れないなら、外部結合

この判断は、どのようなデータが格納されるか理解しないとダメで
ER図を読んだり、設計者に確認すれば良いです。

投稿2018/11/15 00:12

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

foreignキーを利用するようなデータが保証されているマスターテーブルはinner joinでやるべき
そうでない場合は結合によりnullが発生する可能性があるのでouter join
ただしouter joinは効率が悪いので、どうしても必要な場合以外あまり使わない

投稿2018/11/14 10:13

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/14 10:15

回答ありがとうございます。 OUTER JOINの方が効率が悪いのですね。それはパフォーマンスが悪くなるということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問