MySQL 接続クエリを本当に学びましたか?

MySQL 接続クエリを本当に学びましたか?

1. 内部結合クエリの概要

内部結合は、アプリケーションで非常に一般的な結合操作であり、通常はデフォルトの結合タイプです。内部結合は結合述語に基づいており、2 つのテーブル (A と B など) の列を組み合わせて新しい結果テーブルを生成します。内部結合クエリは、テーブル A の各行をテーブル B の各行と比較し、結合述語を満たす組み合わせを見つけます。結合述語が満たされると、A と B の一致する行が列ごとに (並べて) 結合され、結果セット内の 1 つの行になります。

内部結合クエリ操作では、結合条件に一致するデータ行がリストされ、比較演算子を使用して結合された列の列値を比較します。内部結合には、クロス結合、等価結合、自然結合の 3 種類があります。

2. クロス結合(直積)

クロス結合は、「カルテシアン結合」または「積」とも呼ばれ、すべてのタイプの内部結合の基礎となります。

テーブルが行レコードのコレクションと見なされる場合、クロス結合は 2 つのコレクションの直積を返し、結果セットで返されるデータ行の数は、クエリ条件を満たす最初のテーブルのデータ行の数に、クエリ条件を満たす 2 番目のテーブルのデータ行の数を掛けたものに等しくなります。これは実際には、内部結合条件が「常に真」であるか、結合条件が存在しないのと同じです。 A と B が 2 つのセットである場合、それらの交差結合は A x B と表されます。

ルート テーブルと車両テーブルのクロス結合 (デカルト積) を定義します。

例:

ルートテーブルと車両テーブルの直積を実装する

選択カウント(*)
送信元行 
CROSS JOIN車両

3. 内部結合構文と例

文法:

SELECTフィールドリスト
テーブル1から[内部]テーブル2に結合 
  ON テーブル1.列1=テーブル2.列2
[WHERE条件]

例1:

内部結合を使用して、車両モデルに「DD」が含まれる車両情報とドライバー情報を取得します。車両情報はすべての列が必要で、ドライバー情報は名前とIDカードのみを含める必要があります。

v.*、d.name、d.licenseNo を選択
車両からv ドライバーdに加わる
  オン v.driverID=d.driverID
WHERE モデル LIKE '%DD%'

例2:

内部結合を使用して、35 歳以上のドライバーの情報と、ドライバーが運転する車両情報を取得します。車両情報はすべての列に必要であり、ドライバー情報には名前、生年月日、電話番号のみが含まれます。

v.*、d.name、d.licenseNo、d.phone を選択
車両vから内部結合ドライバーd
  オン v.driverID=d.driverID
WHERE CEIL(DATEDIFF(NOW(),誕生日)/365)>35

4. 自然なつながり

自然結合は、接続される 2 つのテーブルの接続基準列が同じフィールド (フィールドが同じで、フィールド属性が同じ) である必要がある特殊な内部結合です。自然結合では、2 つのテーブルにある同じ名前の列がすべて比較され、重複する列は結果セットから削除されます。2 つのテーブルにある同じ名前の列は、結果セットに 1 回だけ表示されます。通常の内部結合では重複する列は削除されません。 (saL Server などの一部のデータベースでは、自然な接続がサポートされていません。)

自然結合の構文は次のとおりです。

SELECTフィールドリスト
テーブル1からテーブル2への自然結合
[WHERE条件]

例:

自然結合を使用して、車両モデルに「DD」が含まれる車両情報とドライバー情報を取得します。車両情報はすべての列である必要があり、ドライバー情報は名前とIDカードのみを含める必要があります。

v.*、d.name、d.licenseNo を選択
車両からv自然結合ドライバーd
WHERE モデル LIKE '%DD%'

5. 複数テーブル結合クエリ

クエリ対象の情報が複数のテーブルから取得される場合、2 つのテーブルを接続することで、複数テーブル結合クエリを確立できます。

3 つのテーブルを結合するクエリの構文は次のとおりです。

SELECTフィールドリスト 
テーブル1からテーブル2に結合 
  ON テーブル1.列1=テーブル2.列2_1
テーブル3を結合
  ON テーブル2.列2_2=テーブル3.列3
[WHERE条件]

例:

(1)table2はtable1とtable3に接続されています。

(2)3つ以上のテーブルを結合する方法は、3つのテーブルを結合する方法と同じであり、2つのテーブルを接続することによって実現される。

例1:

すべての非エアコン車両のナンバープレート番号、モデル、運転手名、ルートのルート、出発駅、終着駅の情報を取得します。

SELECT d.name、v.plateNo、v.model、l.lineNo、l.from_station、l.end_station
車両からv ドライバーdに加わる
  オン v.driverID=d.driverID
JOIN 行 l
  オン v.lineID=l.lineID
WHERE type = 'エアコンなし車'

例2:

バス会社2のすべての運転手情報を取得します。運転者の名前、身分証明書、性別、電話番号を出力する必要があります。

d.name、d.licenseNo、d.gender、d.phone を選択してください
車両からv ドライバーdに加わる 
  ON v.ドライバーID 
JOIN 行 l
  オン v.lineID=l.lineID
WHERE company = 'バス会社2'

6. シンプルな複数テーブル結合クエリ

FROM 句で結合するすべてのテーブルを直接リストし、WHERE 句で結合条件を指定すると、これは単純なマルチテーブルクエリとなり、内部結合と同じ機能を持ちます。

2 つのテーブルを結合するためのクエリ構文は次のとおりです。

SELECTフィールドリスト
テーブル1、テーブル2から
ここで、table1.column1=table2.column2
[およびその他の条件]

3 つのテーブル結合を使用するクエリ構文の形式は次のとおりです。

SELECTフィールドリスト 
テーブル1、テーブル2、テーブル3から
ここで、table1.column1=table2.column2_1 
  かつ、table2.column2_2=table3.column3
[およびその他の条件]

例:

すべての非エアコン車両のナンバープレート番号、モデル、運転手名、ルートのルート、出発駅、終着駅の情報を取得します。

SELECT d.name、v.plateNo、v.model、l.lineNo、l.from_station、l.end_station
車両v、ドライバーd、ラインlから
ここで、v.driverID=d.driverID
  かつ、v.lineID=l.lineID
AND type='エアコン付き車'

要約する

これで、MySQL 接続クエリに関するこの記事は終了です。MySQL 接続クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL での基本的な複数テーブル結合クエリのチュートリアル
  • MySQL のグループクエリと結合クエリステートメントの詳細な説明
  • mysql 結合クエリ (左結合、右結合、内部結合)
  • MySQL クエリの最適化: 結合クエリのソート制限の概要 (結合、順序、制限ステートメント)
  • MySQL の複数の左結合クエリの使用状況の分析
  • MySQL クエリの最適化: 結合クエリのソートに関する簡単な説明
  • MySql の基本クエリ、結合クエリ、サブクエリ、正規表現クエリの詳細な説明
  • MySQL ノート: 接続クエリの詳細な説明
  • Mysql 自己結合クエリ例の詳細な説明
  • MySQL マルチテーブル結合クエリ例の説明

<<:  IE のテキストモード! DOCTYPE の役割の紹介

>>:  Linux ソースコードからのソケット (TCP) バインドの詳細な説明

推薦する

Iframe 適応高さコードに関する 3 つの議論

B/S システム インターフェースを構築する場合、メイン ページ index.html 内に他のペー...

フロートをクリアするための CSS メソッドの概要

フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...

Better-scrollはメニューとコンテンツをリンクする効果を実現します

1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...

Linuxプロセス通信におけるFIFOの実装

FIFO通信(先入れ先出し)関連のないプロセス間の通信を可能にする FIFO 名前付きパイプ。パイプ...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガ...

JavaScript のマイクロタスクとマクロタスクの説明

序文: js はシングルスレッド言語なので、非同期にすることは不可能です。しかし、js のホスト環境...

Windows が MySQL サービスを開始できず、エラー 1067 を報告する場合の解決策

突然、MySQLにログインすると、アクセスが拒否されたか、データベースに接続できないと表示されました...

ウェブデザインにおけるグリッドシステム

グリッドシステムの形成1692年、新しく即位したフランス国王ルイ14世は、フランスの印刷技術のレベル...

vue3.0 プロジェクトを素早く構築するための手順を完了する

目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...

Zabbixで指定時間内の変化値を設定する方法の詳細な説明

背景説明: 既存の負荷分散装置には、付加価値状態にある指標があります (増加するだけで減少しないため...

Linux で Ceph 分散ソフトウェアをインストールして使用する方法に関するチュートリアル

目次序文1. 基本環境1. サービス配信2. ネットワーク構成(全ノード) 3. SSHパスワードフ...

MYSQL は、指定されたユーザーのランキングとクエリを実装します。ランキング関数 (並列ランキング関数) のサンプルコード

序文この記事は主に、MYSQL でランキングを実現し、指定ユーザーランキング関数 (並列ランキング関...

複数の Docker コンテナが同じポート番号を持たない場合の解決策

背景Dockerでは、同じイメージを使用して4つのコンテナを作成します。ネットワークはブリッジモード...

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...