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

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

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

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

リレーショナル データベース管理システムでは、テーブルの作成時にデータ間の関係を決定する必要はなく、エンティティのすべての情報が 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コマンドの魔法

推薦する

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...

メモリの原則に関する詳細な説明: JS では変数はヒープに保存されるのか、スタックに保存されるのか?

目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...

IE アドレスバーのアイコン表示問題を解決する 3 つの手順

<br />この Web ページ制作スキル チュートリアルは、Web サイトのアイコンを...

VMware での Ubuntu 16.04 イメージの完全インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...

Linux の非常に詳細な gcc アップグレード プロセス

目次序文1. 現在のgccバージョン2. gccをインストールする3.gmpのインストール4.MPF...

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

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

CSS スタイル分類入門(基礎知識)

CSSスタイルの分類1. 内部スタイル ---- インラインスタイルスタイルタグの使用 <ス...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

JavaScript での AOP プログラミングの基本実装

AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...

デカルト積原理を使用してMySQLで複数のテーブルをクエリする方法を簡単に説明します。

MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...

ウェブページを最適化してメモリとCPUの使用率を削減

一部の Web ページは大きく見えなくても開くのに非常に時間がかかる場合があります。一方、他の We...

MySQL が group by をサポートしない場合の解決策の概要

MySQL 5.7.x の最新バージョンをダウンロードしてインストールしました。デフォルトでは、on...

Vue3.0 ルーティング自動インポート方法の例

1. 前提条件インポートには require.context メソッドを使用します。vite で作成...

最新バージョンMySQL5.7.19 解凍版インストールガイド

MySQL バージョン: MySQL Community Edition (GPL) ------ ...

モバイル Web アプリ上の画像が鮮明ではなく、非常にぼやけているのはなぜですか?

なぜ?最も簡単に言えば、ピクセルは均等ではないということです。携帯電話に表示される写真はとても繊細に...