mysql-joinsの具体的な使用方法

mysql-joinsの具体的な使用方法

JOIN という言葉は、データベースに接したことがある人なら誰でも聞いたことがあるでしょう。多くの人はさまざまな JOIN をよく知っていますが、それを十分に理解している人は多くありません。
Table_A と Table_B という 2 つのテーブルがあるとします。これら 2 つの表のデータは次のとおりです。

テーブルA | テーブルB
 PK 値 | PK 値
---- ---------- | ---- ----------
 1 フォックス | 1 トロット
 警官 2 人 | 車 2 台
 3 タクシー | 3 キャブ
 6 ワシントン | 6 モニュメント
 7 デル | 7 PC
 5 アリゾナ | 8 マイクロソフト
 4 リンカーン | 9 アップル
 10 ルーセント | 11 スコッチ

結合構文:

結合テーブル:
 table_reference JOIN table_factor [join_condition] //内部結合 | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition //外部結合 | table_reference LEFT SEMI JOIN table_reference join_condition //左セミ結合 | table_reference CROSS JOIN table_reference [join_condition] (Hive 0.10 以降)


テーブル参照:
 table_factor //テーブル | join_table //結合ステートメント table_factor:
 tbl_name [エイリアス] //テーブル名 [エイリアス]
 | table_subquery alias //サブクエリ [alias]
 | ( table_references ) // スペースを含む table_reference


結合条件:
 ON 式 //on で始まる条件文

1. 内部結合: (内部結合)

ここに画像の説明を挿入

これは最も単純で理解しやすい接続であり、最も一般的な接続でもあります。このクエリは、右側のテーブル (テーブル B) に一致するレコードがある左側のテーブル (テーブル A) のすべてのレコードを返します。この接続は次のように記述されます。

SELECT <選択リスト> 
Table_A から A
内部結合テーブル_B B
Aキーオン = Bキー
-- 内部結合
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
  B.Value は B_Value として、B.PK は B_PK として
Table_A から A
内部結合テーブル_B B
A.PK = B.PK の場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
 1 フォックストロット 1
 2 パトカー2
 3 タクシー 3
 6 ワシントン記念塔 6
 7 デル PC 7

(5 行が影響を受けます)

2. 左結合: (左結合)

ここに画像の説明を挿入

このクエリは、右側のテーブル (テーブル B) のレコードと一致するかどうかに関係なく、左側のテーブル (テーブル A) のすべてのレコードを返します。また、正しいテーブルから一致するレコードも返します。この接続は次のように記述されます。

SELECT <選択リスト>
Table_A から A
LEFT JOIN テーブル_B B
Aキーオン = Bキー
-- 左 JOIN
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
LEFT JOIN テーブル_B B
A.PK = B.PK の場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
 1 フォックストロット 1
 2 パトカー2
 3 タクシー 3
 4 リンカーン NULL NULL
 5 アリゾナ NULL NULL
 6 ワシントン記念塔 6
 7 デル PC 7
 10 ルーセント ヌル ヌル

(8 行が影響を受けています)

3. 左除外結合: (左結合は内部結合の結果を除外します)

このクエリは、右側のテーブル (テーブル B) のどのレコードとも一致しない左側のテーブル (テーブル A) のすべてのレコードを返します。この接続は次のように記述されます。

ここに画像の説明を挿入

SELECT <選択リスト> 
Table_A から A
LEFT JOIN テーブル_B B
Aキーオン = Bキー
B.KeyがNULLの場合
-- JOIN を除く左
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
LEFT JOIN テーブル_B B
A.PK = B.PK の場合
B.PKがNULLの場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
 4 リンカーン NULL NULL
 5 アリゾナ NULL NULL
 10 ルーセント ヌル ヌル
(3 行が影響を受けます)

4. 右結合: (右結合)

ここに画像の説明を挿入

このクエリは、右側のテーブル (テーブル B) のすべてのレコードを返します (そのレコードのいずれかが左側のテーブル (テーブル A) のレコードと一致するかどうかは関係ありません)。また、左側のテーブルから一致するレコードも返します。この接続は次のように記述されます。

SELECT <選択リスト>
Table_A から A
右結合テーブル_B B
Aキーオン = Bキー
--右結合
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
右結合テーブル_B B
A.PK = B.PK の場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
 1 フォックストロット 1
 2 パトカー2
 3 タクシー 3
 6 ワシントン記念塔 6
 7 デル PC 7
NULL NULL マイクロソフト 8
ヌルヌルアップル9
ヌルヌルスコッチ11

(8 行が影響を受けています)

5. 右除外結合: (右結合は内部結合の結果を除外します)

ここに画像の説明を挿入

このクエリは、左側のテーブル (テーブル A) のどのレコードとも一致しない右側のテーブル (テーブル B) のすべてのレコードを返します。この接続は次のように記述されます。

SELECT <選択リスト>
Table_A から A
右結合テーブル_B B
Aキーオン = Bキー
A.KeyがNULLの場合
-- JOINを除く右
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
右結合テーブル_B B
A.PK = B.PK の場合
A.PK が NULL の場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
NULL NULL マイクロソフト 8
ヌルヌルアップル9
ヌルヌルスコッチ11

(3 行が影響を受けます)

6. 外部結合: (外部結合)

ここに画像の説明を挿入

この結合は、完全外部結合または完全結合とも呼ばれます。このクエリは、両方のテーブルのすべてのレコードを返し、右側のテーブル (テーブル B) のレコードと一致する左側のテーブル (テーブル A) のレコードを結合します。この接続は次のように記述されます。

SELECT <選択リスト>
Table_A から A
完全外部結合 Table_B B
Aキーオン = Bキー
-- 外部結合
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
完全外部結合 Table_B B
A.PK = B.PK の場合

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
 1 フォックストロット 1
 2 パトカー2
 3 タクシー 3
 6 ワシントン記念塔 6
 7 デル PC 7
NULL NULL マイクロソフト 8
ヌルヌルアップル9
ヌルヌルスコッチ11
 5 アリゾナ NULL NULL
 4 リンカーン NULL NULL
 10 ルーセント ヌル ヌル

(11 行が影響を受けています)

7. 外部結合除外: (外部結合は内部結合の結果を除外します)

ここに画像の説明を挿入

このクエリは、左側のテーブル (テーブル A) のすべてのレコードと、右側のテーブル (テーブル B) の一致しないすべてのレコードを返します。このタイプの結合はまだ使用する必要はありませんが、他のタイプの結合は頻繁に使用します。この接続は次のように記述されます。

SELECT <選択リスト>
Table_A から A
完全外部結合 Table_B B
Aキーオン = Bキー
A.Key が NULL であるか、B.Key が NULL である場合
-- 外部除外結合
A.PKをA_PKとして選択し、A.ValueをA_Valueとして選択します。
B.Value は B_Value として、B.PK は B_PK として
Table_A から A
完全外部結合 Table_B B
A.PK = B.PK の場合
A.PK が NULL の場合
または B.PK が NULL です

A_PK A_値 B_値 B_PK
---- ---------- ---------- ----
NULL NULL マイクロソフト 8
ヌルヌルアップル9
ヌルヌルスコッチ11
 5 アリゾナ NULL NULL
 4 リンカーン NULL NULL
 10 ルーセント ヌル ヌル

(6 行が影響を受けます)

外部結合では、最初に内部結合レコードが返され、次に右結合レコードが返され、最後に左結合レコードが返されることに注意してください (少なくとも、私の Microsoft SQL Server ではそのように行われます。もちろん、ORDER BY ステートメントを使用する必要はありません)。詳細については、Wikipedia の記事をご覧ください (ただし、エントリはグラフィカルではありません)。必要に応じて印刷できるチートシートも作成しました。下の画像を右クリックして「対象をファイルに保存」を選択すると、フルサイズの画像がダウンロードされます。

ここに画像の説明を挿入

mysql-joins の具体的な使用法についてはこれで終わりです。mysql-joins のより適切な使用法については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 7つのMySQL JOINタイプのまとめ
  • MYSQL データベースの基礎 - 結合操作の原理
  • MySQL 結合バッファの原理
  • MySQL 結合クエリ構文と例
  • MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要
  • MySQLの7つのJOINの具体的な使い方

<<:  CSSとHTMLを組み合わせる4つの方法

>>:  Dockerとイメージの操作方法

推薦する

Confluence と jira-software を Docker にデプロイする方法

バージョン: セントロス==7.2 jdk==1.8 合流==6.15.4 jira-ソフトウェア=...

Vue で debouce の手ぶれ補正機能を使用する方法

目次1. 手ぶれ補正機能2. Vueでdebouceの手ぶれ補正機能を使用する1. 手ぶれ補正機能2...

サーバーのDockerコンテナへのvscodeリモート接続を設定する方法

目次画像をプルするイメージを実行する(コンテナを生成する)コンテナを起動するコンテナに入るすべてのミ...

MySQL トランザクション制御フローと ACID 特性

目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...

CSS ですべての子要素を選択し、スタイルを追加する方法

方法:実際のプロジェクトを例に挙げてみましょう。 .lk-ツールバー{ .el-入力{ 幅: 169...

Reactはconetxtを通じてマルチコンポーネント値転送関数を実装します

この関数の効果はvue的provide/injectに似ています。 contextを通じて反応できる...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

MySQL構成SSL証明書ログインの実装

目次序文1. MySQLはSSL構成を有効にする1.1 SSLが有効になっているかどうかを確認する1...

MySQLインスタンスが起動できない問題の分析と解決

目次序文シナリオ分析要約する序文数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムか...

MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

参考: MySQL 文字セットの概要utf8mb4 は MySQL 8.0 のデフォルトの文字セット...

JavaScriptの擬似配列と配列の使い方と違い

擬似配列と配列JavaScript では、5 つのプリミティブ データ型を除き、関数を含め、その他す...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

HTMLがHikvisionカメラのリアルタイム監視機能を実現

最近、同社は CCFA 関連のいくつかの作業を行う予定で、その 1 つはカメラのリアルタイム監視を再...

Linux で rsync を使用する方法

目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...

HTMLのセマンティクスといくつかの簡単な最適化についての簡単な説明

1. セマンティゼーションとは何ですか? Bing辞書の説明セマンティクス化とは、適切な HTML ...