複数のSQLテーブルの結果を組み合わせるにはどうすればよいですか(ヒント:3つの方法があります)
リレーショナルデータベースでは、クエリに表示する情報が複数のテーブル。これにより、「複数のテーブルの結果をどのように組み合わせるのですか?」という疑問が生じます。
このレッスンのすべての例は、Microsoft SQL Server ManagementStudioとAdventureWorks2012データベースに基づいています。これらを無料で使い始めることができます。ガイドを使用するツールSQLServerの使用開始
複数のクエリの結果を組み合わせる方法は何ですか?
SQLは、そうでない場合、あまり有用な言語ではありません。複数のクエリの結果を組み合わせる簡単な方法はありません。幸い、複数のテーブルのデータを組み合わせるには、主に3つの方法があります。ここでは、これらについて簡単に説明し、より詳細な記事へのリンクを示します。
データを結合する3つの主な方法
リレーショナルデータベーステーブルのデータは、行と列に編成されています。データを結合する方法を調査するとき、最終結果は次のようになることに注意してください。 2つ以上のテーブルから行のセットを取得することにより、おそらく別の関連テーブルから、または行から、結果にさらに列を追加します。 s。
ほとんどの人が学習したデータの結合を学ぶ場合:
- 結合–結合を使用して、1つ以上のクエリの列を1つの結果に結合できます。
- UNION –ユニオンおよびその他の集合演算子を使用して1つ以上のクエリの行を1つの結果に結合します。
- サブクエリ–ネストされたクエリと呼ばれることもあり、これらを使用してで個別の検索を実行できます。データベースは、結果が別のクエリで使用できることを示しました。
結合
結合は、データベースを元に戻す接着剤と考えるのが好きです。リレーショナルデータベースは通常、データの保守とパフォーマンスの向上を容易にするために正規化されていますが、最終的には情報が多くのテーブルに分割されます。結合を使用して、その情報をより人間が読める形式に再結合できます。データは、各テーブルの列を照合することで再結合されます。
すべての場合において、結合には2つの主要な要素(2つのテーブルと結合条件)が必要です。テーブルは、行と列をプルするために使用するものであり、結合条件は、テーブル間で列を一致させる方法です。
結合の例
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
結合には主に2つのタイプがあります。内部結合と外部結合。
内部結合は、結合条件が両方のテーブルで一致する場合にのみ、結果の行を返します。内部結合は主に、あるテーブルの主キーを別のテーブルの外部キーと照合するために使用されます。
2番目のタイプの結合は、外部結合です。外部結合は常に、LeftまたはRightテーブルと呼ばれるメインテーブルの少なくとも1つの行と、一致しない列の対応する列のnull値を返します。外部結合は、一致しないデータを見つけるのに役立ちます。
結合は、いずれかのテーブルを組み合わせた場合よりも多くの行を返す可能性があることに注意してください。結合は、一致の組み合わせを返します。 1つは5行、もう1つは10行の2つのテーブルを結合すると、結合条件に応じて、結果に0〜50行が含まれる可能性があります。
ユニオン
UNIONは2つ以上のクエリの行を1つの結果に結合するために使用されます。ユニオンは集合演算子と呼ばれます。
ユニオンが機能するために発生しなければならない特別な条件がいくつかあります。まず、各クエリには同じ数の列が必要です。次に、これらの列のデータ型には互換性がなければなりません。一般的に、各クエリは同じ数とタイプの列を返す必要があります。
結合の実際的な例は、2つのテーブルに部品番号が含まれていて、カタログの結合リストを作成する場合です。最終結果を結合クエリの一意のリストにするか、UNION ALLを使用する場合は、各テーブルからすべての行を返すかを選択できます。
例UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Unionに加えて、他にもいくつかの便利な集合演算子があります。
- INTERSECT –これを使用して、2つのテーブル間で共通の行のみを返すことができます。
- 例外–これを使用して、あるテーブルには存在するが別のテーブルには見つからない行を返すことができます。
SQLの詳細を学習すると、結合を使用してIntersectとExceptに相当するステートメントを記述できますが、Unionに相当するものはありません。
サブクエリ
サブクエリはネストされたクエリと呼ばれることもあります。これらは、他のクエリ内で定義されたクエリです。サブクエリは混乱を招く可能性があります。これの多くは、SQL selectステートメントの多くの場所で、いくつかの目的で使用できるという事実に起因すると思います!
たとえば、サブクエリが表示される可能性のある領域を次に示します。
- SELECT句–値を返すために使用されます。たとえば、売上テーブルにクエリを実行している場合、サブクエリ内からすべての売上の合計を返すことで、総売上を含めることができます。
- WHERE句–比較のwhere句でサブクエリを使用できます。 売上を全体の平均と比較するための比較を設定できます。 全体の平均はサブクエリから返されます。 INなどのメンバーシップ演算子でサブクエリを使用することもできます。 in句をハードコーディングする代わりに、サブクエリを使用してより動的にすることができます。
- HAVING句–サブクエリからの単一の値がHAVING句の比較に含まれます。
サブクエリの例
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
select句や、equals、greater、lessなどの比較演算子で使用する場合 、サブクエリは1行のみを返すことができます。 INなどのメンバーシップ演算子と組み合わせて使用する場合、クエリが1つ以上の行を返すことは問題ありません。