Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JSSUG(Japan SQL Server User Group):第4回 SQL Server 2017勉強会

JSSUG(Japan SQL Server User Group):第4回 SQL Server 2017勉強会

JSSUG(Japan SQL Server User Group):第4回 SQL Server 2017勉強会の資料

D5878edb4659faa4a4fda89258d5f31c?s=128

masaru1006

March 20, 2018
Tweet

More Decks by masaru1006

Other Decks in Technology

Transcript

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

    Group) 2018/03/17 JSSUG(Japan SQL Server User Group) 1
  2. 本日の発表の流れ 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
  3. SQLの結合の種類について 2018/03/17 JSSUG(Japan SQL Server User Group) 3

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

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

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

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

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

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

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

    Server User Group) 11
  12. CROSS APPLY、OUTER APPLY(1)  クエリの外部テーブル式によって返される行毎にテーブル値関数を呼び出すことが出来る。  テーブル値関数は右入力として機能し、外部テーブル式は左入力として機能する。  左入力からの行ごとに右入力が評価され、生成された行の組み合わせが最終的な出力に使用される。 

    APPLY操作によって生成される列のリストは、左入力の列のセットでとなる。その後には、右入力によって返さ れた列のリストが続く。  APPLY には、CROSS APPLYとOUTER APPLYという2 つの形式が有る。  CROSS APPLYでは、外部テーブルの行のうち、テーブル値関数から結果セットを生成する行のみが返され る。  OUTER APPLYでは、結果セットを生成する行と生成しない行の両方が返される。そのとき、テーブル値関 数によって生成される列には NULL 値が設定される。  ※参考URL:<https://technet.microsoft.com/ja- jp/library/ms175156(v=sql.105).aspx> 2018/03/17 JSSUG(Japan SQL Server User Group) 12
  13. CROSS APPLY、OUTER APPLY(2)  簡単に言うと。  左側に指定したテーブルの各行に対して、関数(ファンクション)を呼び出す事が出来 る。  左側に指定したテーブルの各行に対して、サブクエリを指定する事が出来る。

     OUTER APPLYは、右側の戻り値がNULLになる場合も、左側の値が取得される。 (LEFT OUTER JOINの様な感じ。) 2018/03/17 JSSUG(Japan SQL Server User Group) 13
  14. CROSS APPLY、OUTER APPLY(3)  使いどころ。  左側の1行に対して、右側の関数は複数行を返しても良い。  CASE式を使う場合に、SQLをシンプルに記載可能。 

    動作は分かったが、使いどころは、イマイチ、ピンと来ず。  何か、ご意見有りましたら、頂きたく…(^^;) 2018/03/17 JSSUG(Japan SQL Server User Group) 14
  15. 終わりに 2018/03/17 JSSUG(Japan SQL Server User Group) 15

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

    Group) 16
  17. 参考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