Slide 1

Slide 1 text

第4回 SQL Server 2017勉強会 -SQLの結合の種類について- 開催日:2018年03月17日 主催:JSSUG(Japan SQL Server User Group) 2018/03/17 JSSUG(Japan SQL Server User Group) 1

Slide 2

Slide 2 text

本日の発表の流れ 1.SQLの結合の種類について 1.1.INNER JOIN(内部結合) 1.2.LEFT OUTER JOIN(左外部結合) 1.3.RIGHT OUTER JOIN(右外部結合) 1.4.FULL OUTER JOINT(完全外部結合) 1.5.CROSS JOIN(クロス結合) 1.6.NATURAL JOIN(自然結合) 1.7.UNION(和結合) 1.8.CROSS APPLY、OUTER APPLY 2018/03/17 JSSUG(Japan SQL Server User Group) 2

Slide 3

Slide 3 text

SQLの結合の種類について 2018/03/17 JSSUG(Japan SQL Server User Group) 3

Slide 4

Slide 4 text

はじめに  デモを交えながら、各結合の方式を見ていきます。 2018/03/17 JSSUG(Japan SQL Server User Group) 4

Slide 5

Slide 5 text

INNER JOIN(内部結合)  指定した条件が、結合する両方のテーブルにマッチするレコードのみを返す。  ベン図で描くと、以下の通り。  SQL Serverでは、USINGは使えない。 2018/03/17 JSSUG(Japan SQL Server User Group) 5 左 テーブル 右 テーブル

Slide 6

Slide 6 text

LEFT OUTER JOIN(左外部結合)  結合の左側のテーブルの全レコードと、指定した条件がマッチする右側のレコードのみを返す。  ベン図で描くと、以下の通り。 2018/03/17 JSSUG(Japan SQL Server User Group) 6 左 テーブル 右 テーブル

Slide 7

Slide 7 text

RIGHT OUTER JOIN(右外部結合)  結合の右側のテーブルの全レコードと、指定した条件がマッチする左側のレコードのみを返す。  ベン図で描くと、以下の通り。 2018/03/17 JSSUG(Japan SQL Server User Group) 7

Slide 8

Slide 8 text

FULL OUTER JOIN (完全外部結合)  指定した条件がマッチするレコードに加えて、マッチしない左右の両方のテーブルのレコードも 返す。  ベン図で描くと、以下の通り。 2018/03/17 JSSUG(Japan SQL Server User Group) 8

Slide 9

Slide 9 text

CROSS JOIN(クロス結合)  左右両方のテーブルの全てのコンビネーションの行を返す。  結果で得られるレコード数は、[左のテーブルのレコード数] x [右のテーブルのレコード数] に なる。 2018/03/17 JSSUG(Japan SQL Server User Group) 9

Slide 10

Slide 10 text

NATURAL JOIN(自然結合)  NATURAL JOIN の前後で指定されたテーブルの同じ名前のカラムの値を比較し、値が一 致する行を出力する。  INNER JOINだけでなく、LEFT OUTER、RIGHT OUTER、FULL OUTERも可能。  SQL Serverでは、NATURAL JOINは使えない。 2018/03/17 JSSUG(Japan SQL Server User Group) 10

Slide 11

Slide 11 text

UNION(和結合)  指定されたテーブルの行を、まとめて表示。  ALLを付けない場合は、重複が排除される。  ALLを付けた場合は、重複が排除されない。 2018/03/17 JSSUG(Japan SQL Server User Group) 11

Slide 12

Slide 12 text

CROSS APPLY、OUTER APPLY(1)  クエリの外部テーブル式によって返される行毎にテーブル値関数を呼び出すことが出来る。  テーブル値関数は右入力として機能し、外部テーブル式は左入力として機能する。  左入力からの行ごとに右入力が評価され、生成された行の組み合わせが最終的な出力に使用される。  APPLY操作によって生成される列のリストは、左入力の列のセットでとなる。その後には、右入力によって返さ れた列のリストが続く。  APPLY には、CROSS APPLYとOUTER APPLYという2 つの形式が有る。  CROSS APPLYでは、外部テーブルの行のうち、テーブル値関数から結果セットを生成する行のみが返され る。  OUTER APPLYでは、結果セットを生成する行と生成しない行の両方が返される。そのとき、テーブル値関 数によって生成される列には NULL 値が設定される。  ※参考URL: 2018/03/17 JSSUG(Japan SQL Server User Group) 12

Slide 13

Slide 13 text

CROSS APPLY、OUTER APPLY(2)  簡単に言うと。  左側に指定したテーブルの各行に対して、関数(ファンクション)を呼び出す事が出来 る。  左側に指定したテーブルの各行に対して、サブクエリを指定する事が出来る。  OUTER APPLYは、右側の戻り値がNULLになる場合も、左側の値が取得される。 (LEFT OUTER JOINの様な感じ。) 2018/03/17 JSSUG(Japan SQL Server User Group) 13

Slide 14

Slide 14 text

CROSS APPLY、OUTER APPLY(3)  使いどころ。  左側の1行に対して、右側の関数は複数行を返しても良い。  CASE式を使う場合に、SQLをシンプルに記載可能。  動作は分かったが、使いどころは、イマイチ、ピンと来ず。  何か、ご意見有りましたら、頂きたく…(^^;) 2018/03/17 JSSUG(Japan SQL Server User Group) 14

Slide 15

Slide 15 text

終わりに 2018/03/17 JSSUG(Japan SQL Server User Group) 15

Slide 16

Slide 16 text

終わりに  皆さん、ご清聴、ありがとうございました。  検証すると、色々と疑問が解けて有意義です! 2018/03/17 JSSUG(Japan SQL Server User Group) 16

Slide 17

Slide 17 text

参考URL  http://asai-atsushi.blog.so-net.ne.jp/2016-04-25  http://engineersideline.com/sqlリファレンス/テーブルの結合/cross-join-自然結 合-指定結合-union-join/  http://sql55.com/t-sql/t-sql-join-1.php  https://qiita.com/chocolamint/items/4bdbcf80977fac9c301b  http://asai-atsushi.blog.so-net.ne.jp/2016-03-21  http://dcx.sap.com/1201/ja/dbusage/apply-joins-joinsasp.html 2018/03/17 JSSUG(Japan SQL Server User Group) 17