MySQL ジョイントテーブルクエリの簡単な例

MySQL ジョイントテーブルクエリの簡単な例

MySql は結合テーブルクエリを使用しますが、初心者には理解しにくい場合があります。以下の記事では、MySQL ジョイント テーブル クエリの関連内容を詳しく紹介し、参考と学習のために共有します。一緒に詳しい紹介を見てみましょう。

リレーショナル データベースでは、テーブル間にさまざまな参照や関連付けが存在することは避けられません。これらの関連付けは、主キーと外部キーを組み合わせることによって形成されます。したがって、データを取得する場合、ほとんどの場合、単一のテーブルではニーズを満たすことができず、追加のデータにはクエリに他のテーブルを追加する必要があります。これが、JOIN キーワードによって完了する操作です。

  • MySQL では、JOIN、CROSS JOIN、INNER JOIN は同じ構文と機能を持ち、互換性があります。ただし、SQL 標準では、INNER JOIN は ON ステートメントと一緒に使用する必要があります。

複数のテーブルをクエリする場合は、JOIN キーワードを省略し、複数のテーブルをカンマで区切ることができます。この場合、デフォルトで INNER JOIN として扱われます。例えば、

テーブル1を選択します。*、 
  表2.* 
テーブル1から、 
  テーブル2;

は以下と同等です:

テーブル1を選択します。*、 
  表2.* 
テーブル1から 
  テーブル2の内部結合;
  • ただし、コンマによって暗黙的に指定されるこの形式の結合テーブルは、キーワード (INNER JOIN、CROSS JOIN、LEFT JOIN) によって直接指定される形式よりも優先順位が低くなります。したがって、t1、t2 JOIN t3は、((t1、t2) JOIN t3)ではなく(t1、(t2 JOIN t3))として解析されます。

コンマ形式を他の結合テーブル キーワードと組み合わせると、ON 条件などを通じて結合テーブル条件が指定されたときにエラーが報告されることに注意してください

  • ON で指定する結合テーブル条件の構文は WHERE の構文と同じです。後者で許容されるすべての式は ON でも使用できます。これら 2 つの機能は似ているようです。ON は通常、結合条件、つまりテーブルを結合する方法を指定するために使用され、WHERE は結果をフィルタリングするために使用されます。
  • LEFT JOIN では、右側のテーブルが ON または USING で指定された条件を満たしていない場合、結果には NULL として表示されます。
left_tblを選択します。*
 left_tbl から right_tbl を左結合し、 left_tbl.id = right_tbl.id にします。
 right_tbl.id が NULL の場合;

この方法を使用すると、条件を満たさない右側のテーブル内のレコードを簡単に除外できます。

  • 結合テーブルをクエリする場合、他の式での参照を容易にするために、参加する各テーブルの別名を指定できます。方法は 2 つあります。1 つは AS キーワード tbl_name AS alias_name を使用する方法で、もう 1 つはテーブル名の後にエイリアス tbl_name alias_name を直接続ける方法です。
t1.名前、t2.給与を選択します
 従業員 AS t1 から info AS t2 に内部結合し、 t1.name = t2.name にします。

t1.名前、t2.給与を選択します
 従業員 t1 から、情報 t2 を t1.name = t2.name に内部結合します。
  • クエリ ステートメント内のサブクエリには、他の式で参照できるようにエイリアスが必要です。
SELECT * FROM (SELECT 1, 2, 3) AS t1;
  • USING(join_column_list) ステートメントは、両方のテーブルに含まれる列を指定します。ここで指定された列のみがクエリ中に比較されます。
a LEFT JOIN b USING (c1, c2, c3)
  • NATURAL [LEFT] JOIN は、テーブル内のすべての列を指定する USING を使用した INNER JOIN および LEFT JOIN と同等です。
  • RIGHT JOIN は LEFT JOIN に似ていますが、最終結果は右側のテーブルに基づいており、左側のテーブルと一致しないデータは結果に NULL として表示される点が異なります。異なるデータベース間の移行を容易にするために、常に LEFT JOIN を使用することをお勧めします。

JOIN の例をいくつか示します。

テーブル1、テーブル2から*を選択します。

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;

SELECT * FROM table1 LEFT JOIN table2 USING (id);

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
 table3 を table2.id = table3.id で左結合します。
  • NATURAL JOIN の結果には重複する列は含まれません。 USING と似ているため、USING では複雑な列はありません。

次の例を考えてみましょう。

テーブル t1 (i INT、j INT) を作成します。
テーブル t2 (k INT, j INT) を作成します。
t1 VALUES(1, 1) に挿入します。
t2 VALUES(1, 1) に挿入します。
t1 から * を選択し、 t2 を自然結合します。
SELECT * FROM t1 JOIN t2 USING (j);

クエリ結果:

+------+------+------+
| j | 私 | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
+------+------+------+
| j | 私 | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+

同じ名前の列は結果に 1 回だけ表示され、すべて同じ値を持つレコードになります。

2 つのテーブルに新しいレコードを挿入して、それらの j を異なるものにし、テストします。

mysql> t1 に値 (2, 2) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> t2 に値 (2, 3) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> t1 から * を選択し、t2 を自然結合します。
+------+------+------+
| j | 私 | k |
+------+------+------+
| 2 | 2 | 1 |
+------+------+------+
セット内の 1 行 (0.00 秒)
  • USING と ON を条件として使用する場合、他の制約の結合条件は同じであり、相互に変換できます。しかし、SELECT * が結果を返すときには、まだ違いがあります。前者は USING で指定された列のみの結合結果を返しますが、後者はテーブル内のすべての列を対象とします。
a LEFT JOIN b USING (c1, c2, c3)
a LEFT JOIN b は a.c1 = b.c1 かつ a.c2 = b.c2 かつ a.c3 = b.c3 で結合されます

USING の場合の戻り値:

合体(a.c1, b.c1)、合体(a.c2, b.c2)、合体(a.c3, b.c3)

ON は次を返します:

a.c1、a.c2、a.c3、b.c1、b.c2、b.c3

ON ステートメントでは、その操作テーブル (オペランド) 内のテーブルのみを参照できます。

テーブル t1 (i1 INT) を作成します。
テーブル t2 (i2 INT) を作成します。
テーブル t3 (i3 INT) を作成します。

上記のテーブルの場合、次のクエリはエラーを報告します。

mysql> SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3;
エラー 1054 (42S22): 'on 句' に不明な列 'i3' があります

次のクエリは機能します:

mysql> SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3);
空のセット (0.00 秒)

なぜなら、現在 t3 は ON ステートメントの動作範囲内にあるからです。

関連リソース

  • MySQL 8.0 リファレンスマニュアル - 13.2.10.2 JOIN 構文
  • MySQL 8.0 リファレンスマニュアル - 13.2.10.3 UNION 構文

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL 派生テーブル(Derived Table)の簡単な使用例分析
  • MySQL ネストクエリと結合テーブルクエリの最適化方法
  • MySQL でのジョイントテーブルの更新と削除の構文の紹介
  • MySQL 結合テーブルクエリの基本操作 左結合のよくある落とし穴
  • MySQL 派生テーブル ジョイントテーブル クエリ 実際のプロセス

<<:  Linux nslookup コマンドの使用方法の詳細な説明

>>:  アイデアコンパイラvueインデントエラー問題シナリオの分析

推薦する

Nginx の realip モジュールの使い方の基礎学習

序文nginx モジュールには、公式とサードパーティの 2 種類があります。nginx のインストー...

Firefox または IE でスパン幅が決定されない場合の解決策

コードをコピーコードは次のとおりです。 <html xmlns="http://ww...

CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

文法 背景: linear-gradient(direction,color-stop1,color...

202 無料の高品質 XHTML テンプレート (2)

前回の記事「202 個の無料高品質 XHTML テンプレート (1)」に続き、123WORDPRES...

JavaScript進捗管理の詳しい説明

目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...

MySql の知識ポイント: トランザクション、インデックス、ロックの原則、使用状況の分析

この記事では、トランザクション、インデックス、ロックなどの MySQL の知識ポイントの原理と使用法...

C# は MySQL コマンドラインのバックアップとリカバリを実装します

MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...

MySQLで最大接続数を達成する方法

目次データベース接続数が急増した理由は何ですか? 1. はじめに2. 知識ポイント3. 練習するIV...

Dockerリンクはコンテナの相互接続を実現します

目次1.1. IP経由のコンテナ間のネットワークアクセス1.2. コンテナ名またはコンテナIDによる...

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

Linux Samba サーバーの超詳細なインストールと構成 (問題解決付き)

目次Samba サーバーの紹介Samba サーバー コンポーネントSamba サーバー関連の設定ファ...

Dockerの一般的なコマンドとヒントのまとめ

インストールスクリプトUbuntu / CentOS Debian のインストールに問題があるようで...

React dva実装コード

目次ドヴァdvaの使用DVAの実装非同期をサポートルーターの実装成し遂げる:ドヴァdva は、red...

Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信

関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...

HTMLドキュメントタイプの詳細な説明

私のは: <!DOCTYPE html>ブログガーデン: <!DOCTYPE HT...