Mysql での結合操作

Mysql での結合操作

結合の種類

1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコードを結合するレコード セットを形成します。

2. 外部結合: 外部左結合と外部右結合に分かれます。

ケースの背景

テーブル java (name varchar(255)) を作成します。
Javaの値に('java1')、('java2')、('blue')を挿入します。 
テーブルmysqlを作成します(name varchar(255));
mysqlに値('mysql1')、('mysql2')、('blue')を挿入します。

内部結合

java.name=mysql.name の場合、java、mysql から * を選択します。
SELECT * FROM java JOIN mysql ON java.name=mysql.name;
SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name;
SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name;
SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name;

これら4つの文はすべて内部結合であり、返される結果は

+------+------+
| 名前 | 名前 |
+------+------+
| 青 | 青 |
+------+------+
  • table_reference エントリ内の各コンマは、内部結合として扱われます。
  • デフォルトのJOINはINNER JOINです
  • CROSS JOINは構文的にはINNER JOINと同等です。
  • STRAIGHT_JOIN は JOIN と同じです。 1 つの例外を除いて、左の表は右の表よりも先に読み取られます。 STRAIGH_JOIN は、結合オプティマイザーがテーブルを間違った順序で配置する状況で使用できます。

内部結合の構文は次のとおりです。

結合テーブル:
 テーブル参照 [INNER | CROSS] JOIN テーブル要素 [結合条件]
 | テーブル参照 STRAIGHT_JOIN テーブル係数
 | table_reference STRAIGHT_JOIN table_factor ON 条件

外部結合

左結合

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

消す

+-------+------+
| 名前 | 名前 |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| 青 | 青 |
+-------+------+

したがって、上記の結果から、Java テーブルの java1 および java2 レコードの名前は MySQL テーブル内に対応する名前がないため空ですが、java のすべての列にはまだ java1 および java2 レコードがあり、mysql テーブルのすべての列は NULL であることがわかります。残りの青いレコードは、Java テーブルと MySQL テーブル間の内部結合の結果です。

LEFT JOIN の ON または USING 部分に右側のテーブルに一致するレコードがない場合、すべての列が NULL に設定された行が右側のテーブルに使用されます。この方法を使用すると、別のテーブルに対応する部分がないテーブル内のレコードを見つけることができます。

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL;

この SQL は、Java にはいるが MySQL にはいない人を検索します。明らかに、人「java1」と「java2」は要件を満たしています。

右結合

SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;

返される結果は

+------+--------+
| 名前 | 名前 |
+------+--------+
| NULL | mysql1 |
| NULL | mysql2 |
| 青 | 青 |
+------+--------+

右結合では左結合と同様の結果になりますが、今回は mysql テーブルにすべての結果セットが保持される点が異なります。

外部結合構文

join_table:| テーブル参照 LEFT [OUTER] JOIN テーブル参照 結合条件
 | テーブル参照 NATURAL [LEFT [OUTER]] JOIN テーブル係数
 | テーブル参照 RIGHT [OUTER] JOIN テーブル参照 結合条件
 | テーブル参照 NATURAL [RIGHT [OUTER]] JOIN テーブル係数

USING(column_list) 句

両方のテーブルに存在する必要がある一連の列に名前を付けるために使用されます。

SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name);

結果

+-------+------+
| 名前 | 名前 |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| 青 | 青 |
+-------+------+

結合の操作順序

SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c);
--SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) と同等

括弧が結合順序に与える影響

t1.id、t2.id、t3.id を t1、t2 から選択し、 t3 を LEFT JOIN し (t3.id=t1.id)、where t1.id=t2.id とします。
-- 実際の実行は次のようになります: SELECT t1.id, t2.id, t3.id FROM t1, ( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id;
-- 次のように記述する必要があります: SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;

ここでは括弧が非常に重要なので、今後このようなクエリを書くときは、括弧をいくつか追加することを忘れないでください。少なくとも、これで多くのエラーを回避できます。

上記は編集者が紹介したMysqlの結合操作です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL 結合テーブルクエリの基本操作 左結合のよくある落とし穴
  • MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要
  • MySQL 8.0.18 安定版がリリースされました! 予想通りハッシュ結合が実装されました
  • MySQLの自己接続と結合の詳細な理解
  • MySQL での Join の使用に関する詳細な説明
  • MySQL 内部結合の使用例 (必読)
  • 7つのMySQL JOINタイプのまとめ

<<:  Vueのキャッシュ方法の例の詳細な説明

>>:  Ubuntu 18.04 Server に静的 IP を設定する方法

推薦する

単語のグループ化シーケンスと複数フィールドのグループ化のための MySQL グループ方法

ここで商品テーブルを作成しました。その中のデータを見てみましょう。 mysql> 商品から *...

CSS 擬似要素::マーカーの詳細な説明

この記事では、CSS ::markerの興味深い疑似要素を紹介します。これを使用すると、テキスト番号...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

MySQL の concat 関数についての簡単な説明。MySQL でフィールドの前または後に文字列を追加する方法

MySQL で concat 関数を使用する方法: CONCAT(文字列1、文字列2、…)戻り値は、...

まだ*を選択しますか?

アプリケーションが牛のように遅い理由は数多くあります。ネットワーク、システム アーキテクチャ、または...

Dockerイメージが消える問題を解決する

1. 50と93では鏡像が消える [root@h50 /]# df -h ファイルシステムの使用済み...

MySQLクエリの冗長インデックスと未使用のインデックス操作

MySQL 5.7 以降のバージョンでは、冗長インデックス、重複インデックス、およびインデックスを使...

HTMLの基本構造を包括的に理解する

HTML入門ハイパーテキスト マークアップ言語: ハイパーテキスト マークアップ言語ハイパーテキスト...

MySQLのグループカウントと範囲集計を実装する2つの方法

1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...

Vueはプルダウンとスクロールでデータを読み込む例を実装しています

目次ステップ1: インストールステップ2: 引用ステップ3: 使用Webプロジェクトでは、データを読...

ミニプログラムカスタムタブバーコンポーネントのカプセル化

この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコード...

Windows 64 ビットに MySQL を再インストールするチュートリアル (Zip バージョン、解凍バージョンの MySQL インストール)

MySQLをアンインストールする1. コントロールパネルで、MySQLのすべてのコンポーネントをア...

JavaScript を使用した Web 計算機の作成

この記事は主にJavaScriptを使用してWeb計算機を実現する効果を記録し、参考として掲載してい...

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...

Windows Server 2016 AD サーバーをセットアップする手順 (画像とテキスト)

導入: AD は Active Directory の略称で、中国語では Active Direct...