SQLShack (日本語)

この記事では、SQLについて学習します。複数の結合の概念を示し、イラストで説明されている非常に単純な例で学習を強化します。リレーショナルデータベースでは、データはテーブルに格納されます。間違いなく、そしてほとんどの場合、いくつかのテーブルからのデータを組み合わせて形成された結果セットが必要です。結合を使用すると、2つ以上のテーブルのデータを結合できるため、テーブルのデータを結合して、複数のテーブルからデータを簡単に取得できます。 SQLServerにはいくつの異なるタイプの結合が存在するかを自問するかもしれません。答えは、SQLServerに存在する結合には主に4つのタイプがあるということです。まず、Venn図の図を使用して簡単に説明します。

  • 内部結合は、両方のテーブルで一致する行を返します

  • 左結合は、左側のテーブルからすべての行を返します

  • 右結合は、右テーブルからすべての行を返します

  • 完全結合は両方のテーブルから行全体を返します

知識が不足している場合SQL ServerのSQL結合の概念については、SQL結合タイプの概要とチュートリアルの記事を参照してください。

SQL結合タイプについてのこの短い説明の後で、複数の結合について説明します。

SQL複数結合とは何ですか?

複数結合は次のように説明できます。複数結合は、同じまたは異なる結合タイプを含むクエリであり、複数回使用されます。したがって、リレーショナルデータベースの問題を克服するために、データの複数のテーブルを組み合わせることができます。

シナリオ例

Green-Tree社は、新年の新しいキャンペーンを開始し、オンライン顧客にさまざまなオファーを行いました。キャンペーンの結果、一部のオファーを販売に変換することに成功しました。次の例では、Green-Tree会社の新年キャンペーンデータの詳細を明らかにします。

会社は、これらのキャンペーンデータの詳細を次の表に保存します。次に、次のクエリを使用してこれらのテーブルを作成し、ダミーデータを入力します。

SQL複数結合の仕組み

ビジネス上の問題:この新年に関心を持った顧客キャンペーン?

この質問に答えるには、一部の顧客が電子メールオファーを受信せず、一部のオファーをセールに変換できなかったため、すべてのテーブルで一致する行を見つける必要があります。次のベン図は、必要な一致した行を見つけるのに役立ちます。つまり、このクエリの結果は、クエリ内のすべてのテーブルの交差する行になります。灰色の領域は、ベン図の次の行を指定します。

SQL複数結合アプローチは、オンライン顧客への参加に役立ちます。 、注文、および販売テーブル。ベン図に示されているように、すべてのテーブルの行を一致させる必要があります。このため、すべてのテーブルを内部結合句で結合します。次のクエリは、私たちが望む結果セットを返し、質問に答えます:

1
2
3
4
5
6
7
8

顧客名、顧客都市、顧客メール、売上合計を選択
FROM onlinecustomers AS oc
INNER JOIN
注文ASo
ON oc.customerid = o.customerid
内部結合
sales AS s
ON o.orderId = s.orderId

最初に、クエリを分析します。 onlinecustomersテーブルとordersテーブルの間にある内部結合句は、これら2つのテーブル間で一致した行を派生させました。 salesテーブルを結合する2番目の内部結合句は、前の結果セットから一致した行を導出しました。次の色付きのテーブルの図は、クエリで一致する結合テーブルのデータを理解するのに役立ちます。黄色の行は、オンライン顧客と注文の間で一致したデータを示します。一方、salesテーブルには青色の行のみが存在するため、クエリ結果は青色の行になります。

クエリの結果は次のようになります。

SQL複数結合でのさまざまな結合タイプの使用法

ビジネス上の問題:どのオファーを販売に変換できませんでしたか?

1つのクエリでさまざまなタイプの結合を使用して、さまざまなリレーショナルデータベースの問題を克服できます。この例では、onlinecustomersテーブルに一致するordersテーブルのすべての行が必要です。一方、これらの行はsalesテーブルには存在しません。次のベン図は、必要な一致した行を見つけるのに役立ちます。灰色の領域は、クエリの出力となる行を示しています。

最初のステップでは、結合する必要があります。内部結合はonlinecustomersテーブルとordersテーブルの間で一致したすべての行を返すため、内部結合句を介してonlinecustomersおよびordersテーブル。 2番目のステップでは、左側の結合を介して注文テーブルを販売テーブルに結合し、販売テーブルによって格納されている行を削除する必要があるため、null値をフィルタリングします。

1
2
3
4
5
6
7
8
9

SELECT customerName、customercity、customermail、ordertotal、salestotal
FROM onlinecustomers AS c
INNER JOIN
orders AS o
ON c.customerid = o.customerid
LEFT JOIN
sales AS s
ON o.orderId = s.orderId
WHERE s.salesId IS NULL

クエリの結果は次のようになります:

クイズ

Q uestion:以下のベン図に従って適切なクエリを生成してください。

回答:完全結合により、結合されたテーブルからすべての行を返します。回答されるクエリは次のようになります。

1
2
3
4
5
6
7
8

SELECT customerName、customercity、customermail、ordertotal、salestotal
FROM onlinecustomers AS c
FULL JOIN
注文ASo
ON c.customerid = o.customerid
FULL JOIN
sales AS s
ON o.orderId = s.orderId

結論

この記事では、SQLの複数結合アプローチに焦点を当て、詳細な例を使用して学習しました。複数の結合により、3つ以上のテーブルを組み合わせることができるため、リレーショナルデータベースシステムのさまざまな問題を克服できます。さらに、1つのクエリでさまざまな結合タイプを使用する方法を確認しました。

  • 作成者
  • 最近の投稿
EsatErkecはソフトウェア開発者として8年以上前にキャリアを開始したSQLServerの専門家。彼はSQLServerのマイクロソフト認定ソリューションエキスパートです。
彼のキャリアのほとんどは、SQLServerデータベースの管理と開発に重点を置いています。彼の現在の関心は、データベース管理とビジネスインテリジェンスです。彼はLinkedInで見つけることができます。
EsatErkecによる投稿をすべて表示

Esat Erkecによる最新の投稿(すべて表示)
  • SQLプログラミング入門-2021年2月3日
  • 実行の読み取り方法すべての詳細を含む計画-2021年1月28日
  • SQL SELECTTOPステートメントの概要と例-2021年1月25日

Leave a Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です