データベースマルチテーブル接続クエリの実装方法の詳細説明

データベースマルチテーブル接続クエリの実装方法の詳細説明

データベースマルチテーブル接続クエリの実装方法の詳細説明

結合演算子を使用して複数のテーブルクエリを実装できます。接続はリレーショナル データベース モデルの主な機能であり、他の種類のデータベース管理システムと区別する特徴でもあります。

リレーショナル データベース管理システムでは、テーブルの作成時にデータ間の関係を決定する必要はなく、エンティティのすべての情報が 1 つのテーブルに格納されることがよくあります。データを取得する場合、複数のテーブルに格納されているさまざまなエンティティに関する情報が結合操作を通じて照会されます。結合操作により、ユーザーは大きな柔軟性を得ることができ、いつでも新しいデータ型を追加できます。異なるエンティティに対して新しいテーブルを作成し、後で結合を通じてクエリを実行します。

結合は、SELECT ステートメントの FROM 句または WHERE 句のいずれかで確立できます。結合操作を WHERE 句の検索条件と区別するために、FROM 句で結合を指定すると便利です。したがって、Transact-SQL ではこの方法が推奨されます。

SQL-92 標準で定義されている FROM 句の結合構文は次のとおりです。

join_table から join_type join_table 

[ON (結合条件)] 

join_table は、結合操作に関係するテーブルの名前を示します。結合は同じテーブルまたは複数のテーブルで実行できます。同じテーブルでの結合は、自己結合とも呼ばれます。

join_type は結合タイプを示し、内部結合、外部結合、クロス結合の 3 つのタイプに分けられます。 INNER JOIN は比較演算子を使用してテーブル間の特定のデータ列を比較し、接続条件に一致するこれらのテーブル内のデータ行を一覧表示します。使用される比較方法に応じて、内部結合は、等結合、自然結合、不等結合の 3 つのタイプに分けられます。

外部結合には、左外部結合 (LEFT OUTER JOIN または LEFT JOIN)、右外部結合 (RIGHT OUTER JOIN または RIGHT JOIN)、完全外部結合 (FULL OUTER JOIN または FULL JOIN) の 3 種類があります。内部結合とは異なり、外部結合では結合条件に一致する行がリストされるだけでなく、左側のテーブル (左外部結合)、右側のテーブル (右外部結合)、または両方のテーブル (完全外部結合) 内の検索条件を満たすすべてのデータ行もリストされます。

クロス結合 (CROSS JOIN) には WHERE 句がありません。結合されたテーブルのすべての行の直積を返します。結果セットの行数は、クエリ条件を満たす最初のテーブルの行数と、クエリ条件を満たす 2 番目のテーブルの行数を掛け合わせた数に等しくなります。

結合操作の ON (join_condition) 句は、結合されたテーブル内の列と比較演算子、論理演算子などで構成される結合条件を示します。
どのような接続であっても、text、ntext、image データ型の列に直接接続することはできませんが、これら 3 つの列を間接的に接続することはできます。

(I) 内部結合

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

1. 等価結合: 結合条件で等号 (=) 演算子を使用して、結合された列の列値を比較します。クエリ結果には、重複する列を含む、結合されたテーブル内のすべての列がリストされます。

2. 不等結合:結合条件で等価演算子以外の比較演算子を使用して、結合する列の列値を比較します。これらの演算子には、>、>=、<=、<、!>、!<、<> が含まれます。

3. 自然接続: 接続条件では等号 (=) 演算子を使用して接続された列の列値を比較しますが、選択リストを使用してクエリ結果セットに含まれる列を示し、接続されたテーブル内の重複する列を削除します。

たとえば、次の例では、等価結合を使用して、authors テーブルとpublishers テーブルに同じ都市の著者と出版社をリストします。

選択* 

著者から内部結合出版社からp 

ON a.city=p.city 

もう 1 つの例として、自然結合を使用して、選択リストの authors テーブルとpublishers テーブルから重複する列 (city と state) を削除します。

a.*、p.pub_id、p.pub_name、p.countryを選択します。 

著者から内部結合出版社からp 

ON a.city=p.city

(ii)外部接続

内部結合の場合、クエリ条件 (WHERE 検索条件または HAVING 条件) と接続条件を満たす行のみがクエリ結果セットに返されます。外部結合を使用すると、返されるクエリ結果セットには、結合条件を満たす行だけでなく、左側のテーブル (左外部結合)、右側のテーブル (右外部結合)、または 2 つのエッジ テーブル (完全外部結合) のすべてのデータ行も含まれます。

外部結合は、左外部結合、右外部結合、または完全外部結合のいずれかになります。

FROM 句で外部結合を指定する場合、次のキーワード セットのいずれかで指定できます: LEFT JOIN または LEFT OUTER JOIN、RIGHT JOIN または RIGHT OUTER JOIN、FULL JOIN または FULL OUTER JOIN。

(1)左外部結合:左外部結合の結果セットには、結合列が一致する行だけでなく、LEFT OUTER句で指定された左側のテーブルのすべての行が含まれます。左側の表の行が右側の表に一致する行を持たない場合、右側の表のすべての選択リスト列には、関連付けられた結果セット行の NULL 値が設定されます。

(2)右外部結合:右外部結合は左外部結合の逆結合です。右側のテーブルのすべての行を返します。右側のテーブルの行が左側のテーブルに一致する行を持たない場合、左側のテーブルには null 値が返されます。

(3)完全外部結合:完全外部結合は、左側のテーブルと右側のテーブルの両方からすべての行を返します。行が他のテーブルに一致する行を持たない場合、他のテーブルの選択リストの列には NULL 値が含まれます。テーブル間に一致する行がある場合、結果セットの行全体には基本テーブルのデータ値が含まれます。

内部結合では、両方のテーブルの少なくとも 1 つの行が結合条件を満たす場合にのみ行が返されます。内部結合では、他のテーブルのどの行とも一致しない行が除外されます。外部結合は、FROM 句で指定されたテーブルまたはビューの少なくとも 1 つから、WHERE または HAVING 検索条件のいずれかを満たすすべての行を返します。左外部結合によって参照される左側のテーブルのすべての行と、右外部結合によって参照される右側のテーブルのすべての行が取得されます。完全外部結合の両方のテーブルのすべての行が返されます。

以下に示すように、左外部結合を使用してフォーラムのコンテンツと作成者情報を接続します。

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b 

ON a.ユーザー名=b.ユーザー名 

次の例では、完全外部結合を使用して、city テーブル内のすべての著者と、user テーブル内のすべての著者およびその都市を結合します。

a.*、b.*を選択します。 

FULL OUTER JOIN として city からユーザー b へ 

ON a.ユーザー名=b.ユーザー名

(III)クロスコネクション

WHERE 句のないクロス結合では、結合される 2 つのテーブルのすべての行の直積が返されます。結果セットで返される行数は、クエリ条件を満たす最初のテーブルの行数と、クエリ条件を満たす 2 番目のテーブルの行数を掛け合わせた数に等しくなります。

たとえば、titles テーブルには 6 つの書籍カテゴリがあり、publishers テーブルには 8 つの出版社があります。次のクロス結合によって取得されるレコードの数は、6 * 8 = 48 行になります。

SELECTタイプ、pub_name 

タイトルからCROSS JOIN出版社 

ORDER BY タイプ


ご質問がございましたら、メッセージを残すか、コミュニティで議論してください。この記事がお役に立てば幸いです。ご協力ありがとうございます!

以下もご興味があるかもしれません:
  • asp.net で実装された MVC クロスデータベース マルチテーブル ジョイント動的条件クエリ関数の例
  • 異なるデータベース サーバー上の SQL Server マルチ テーブル クエリ テーブル

<<:  React Fiber構造の作成手順

>>:  英語の単語の出現頻度を数えるtrコマンドの魔法

推薦する

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

MySQL 5.7 zip アーカイブ バージョンのインストール チュートリアル

この記事では、MySQL 5.7 zipアーカイブ版のインストールチュートリアルを参考までに紹介しま...

MySQL マスター/スレーブ データベース同期構成と一般的なエラー

アクセス回数が増えると、時間のかかるデータベース読み取り操作では、データベースへの負荷を軽減するため...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

ウェブデザインにおける装飾要素の応用の概要

<br />序文: このチュートリアルを読む前に、序文を注意深く読んでください。そうしな...

Vueはアップロードコンポーネントを実装します

目次1. はじめに2. アイデアファイルをアップロードする2つの方法3. ライフサイクル4. コード...

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

ServerManager の起動時にデータベースに接続できないエラーを解決する方法

Servermanager 起動時の接続データベース エラーmgrstart.batを実行しますエラ...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

Docker 可視化グラフィックツール portainer の詳細な説明

目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...

CSSの固定位置属性の詳細な説明

モバイル アプリを開発する場合、Web サイトが特定の高さまでスクロールしたときにコンテンツの一部を...

Nginx ロケーション ディレクティブ URI マッチング ルールの詳細な概要

1. はじめにロケーション命令は、http モジュールのコア構成です。事前に定義された URL マッ...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...

シェルスクリプトを使用したMySQLデータベースの自動バックアップ

シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...