t sql 振り返り

49
T-SQL 振振振振 SQL Saturday #181 TOKYO 2012 SQLWorld お お

Upload: oda-shinsuke

Post on 27-Nov-2014

1.890 views

Category:

Technology


3 download

DESCRIPTION

2012/12/01 SQL Saturday #181 TOKYO

TRANSCRIPT

Page 1: T sql 振り返り

T-SQL 振り返り

SQL Saturday #181 TOKYO 2012SQLWorld お だ

Page 2: T sql 振り返り

自己紹介

織田 信亮 ( おだ しんすけ )大阪で開発者していますSQLWorld の代表です

http://d.hatena.ne.jp/odashinsuke/Twitter:@shinsukeoda

Page 3: T sql 振り返り

SQLWorld とは

http://sqlworld.org/Twitter:@SQLWorld_JP次のような情報を発信しているコミュニティです

MS の RDBMS である「 SQL Server 」もちろん他の DB の話しも!正規化 / モデリングSQL/NoSQL

Page 4: T sql 振り返り

World と名乗っていますが、

    Worldwide

では無いです!

Page 5: T sql 振り返り

 関西限定!大阪で勉強会を開催しています

Page 6: T sql 振り返り

このセッションの対象者

SQL は知ってる / 書ける開発者の方

SQL Server の使用経験が…使ったことない!昔のなら使ったことある新しいのなら使ったことある

Page 7: T sql 振り返り

T-SQL のお話しの前に…

Page 8: T sql 振り返り

開発者の方がよく使う Edition の紹介

Developer Edition開発用 (※ 運用では使っちゃダメ! )Enterprise Edition と同等の機能有償 (Amazon で \5,000 位 )無償だと Evaluation Edition ( 評価版 ) がある

Express Edition機能制限版http://msdn.microsoft.com/ja-jp/library/cc645993.aspx

無償

Page 9: T sql 振り返り

インストール

Page 10: T sql 振り返り

インストール

Express with Tools をダウンロードhttp://www.microsoft.com/ja-jp/download/details.aspx?id=29062

JPN\x86\SQLEXPRWT_x86_JPN.exe

ダブルクリックで実行特に設定を変えずに、次へ次へで OK !

設定を変える必要があるケースFILESTREAM を使いたい場合SQL Server への接続に Windows のユーザー認証を使いたくない場合

Page 11: T sql 振り返り

使ってみる

Page 12: T sql 振り返り

SQL Server Management Studio

SSMS は、構成・管理・開発に使用出来る 統合開発環境

何でも出来ますGUI での操作クエリの入力補完 ( インテリセンス ) も効くSQL のテンプレートも豊富Access ライクなクエリの作成も可能

Page 13: T sql 振り返り

使ってみる

SQL Server に接続するDatabase の作成Table の作成クエリの実行 (INSERT/SELECT)

Page 14: T sql 振り返り
Page 15: T sql 振り返り
Page 16: T sql 振り返り
Page 17: T sql 振り返り
Page 18: T sql 振り返り

T-SQL の進化

Page 19: T sql 振り返り

各バージョンで使える機能

SQL Server 2005SQL Server 2008SQL Server 2008R2SQL Server 2012

Page 21: T sql 振り返り

データ型

追加XMLvarchar(max) nvarchar(max)varbinary(max)

削除予定text => varchar(max)ntext => nvarchar(max)image => varbinary(max)

Page 22: T sql 振り返り

SQL CLR

T-SQL ではなく、 CLR(C# や VB.NET) で ストアドや関数、トリガーなどを実装出来る仕組みSQL Server のプロセス内で実行されるので高速C# や VB.NET で実装出来るので、開発効率が良い / 機能が豊富

Page 23: T sql 振り返り

T-SQL (1)

OUTPUT 句INSERT/UPDATE/DELETE で影響を受ける行の情報を返す

WITH (CTE)共通テーブル式再帰クエリ

.WRITE 句varchar/nvarchar/varbinary(max) の部分更新

Page 24: T sql 振り返り

OUTPUT

追加 / 更新 / 削除された行の情報を取得INSERT/UPDATE/DELETE/MERGE(2008 以降 )

新しく追加 / 更新された後のデータINSERTED. カラム名

更新 / 削除される前のデータDELETED. カラム名

Page 25: T sql 振り返り

WITH (CTE)

CTE = Common Table Query一時的な結果セットに名前を付けたもの

WITH を使ってクエリに名前を付ける同じクエリ内で複数回参照可能UNION ALL で自己参照 ( 再帰 CTE)

Page 26: T sql 振り返り

T-SQL (2)

FORSELECT の結果を XML 形式に変換

TOP式も書けるようになった!

PIVOT/UNPIVOT行列変換 / 列行変換

APPLYJOIN の感覚で使って、行毎にテーブル値関数を呼び出す

Page 27: T sql 振り返り

TOP

2000 でもあったが構文が変わった!TOP <integer> => TOP (<expression>)

式が書けるようになったので、変数やサブクエリなんかも書けるようになった旧構文は SELECT でのみ互換性のために残してある

Page 28: T sql 振り返り

T-SQL (3)

OVER 句ウィンドウ関数 ( 順位付け、集計 ) で使用

TRY…CATCHT-SQL でも

Page 29: T sql 振り返り

OVER

ウィンドウ 関数 が使えるように!順位付け関数

RANK, ROW_NUMBER, …

集計関数 に partition by が使えるように

SUM, MAX, MIN, COUNT, …

Page 30: T sql 振り返り

クエリ通知

ADO.NET とセットで利用SELECT / EXECUTE に対して設定可能対象のデータが変更されると、結果が SQL Server から PUSH される

Page 31: T sql 振り返り

SQL Server 2008 で使える機能

http://technet.microsoft.com/ja-jp/library/bb500435(SQL.100).aspx

データ / データ型T-SQLデータの変更監視

Page 32: T sql 振り返り

データ / データ型

FILESTREAM非構造化データをファイルシステムに保存

スパース列NULL が多い列の最適化

日付 / 時刻型Spatial 型hierarchyid階層構造を表す

Page 33: T sql 振り返り

日付 / 時刻 データ型

date日付だけ

time時刻だけ

datetime2datetime より扱える範囲 /精度が良い

datetimeoffsetタイムゾーン持ちの日付時刻 データ型

Page 34: T sql 振り返り

Spatial データ型

空間型 座標を表すデータ型gemmetry平面空間データ型 平面座標系のデータ

Geography地理空間データ型 球体地球座標系のデータ

Page 35: T sql 振り返り

T-SQL (1)

DECLARE 時の代入変数宣言時に代入可能declare @hoge int = 5

複合演算子+=, -=, *=. /=, %=, ^=, |=

INSERT の VALUES 複数対応“,” 区切りで複数書けるinsert into <table> (~) values (~), (~),..

Page 36: T sql 振り返り

T-SQL (2)

MERGEGROUPING の強化

GROUP BY での指定方法が強化テーブル値パラメータ

ストアドやファンクションに 一時テーブルを使わずにパラメータを渡せる

Page 37: T sql 振り返り

MERGE

更新対象テーブルと元となるテーブルの結合結果に対して、更新処理を行う。

MATHCED結合結果でデータが存在していた

DELETE or UPDATE(主に UPDATE)

NOT MATCHED (BY TARGET)更新対象にデータがなかった

INSERT

NOT MATCHED BY SOURCE元となるテーブルにデータがなかった

DELETE or UPDATE(主に DELETE)

Page 38: T sql 振り返り

GROUPING の強化

GROUPING SETSカラムの組み合わせを自由に指定複数列を単一のセットと見なせる

ROLLUP説明しづらいので例をGROUP BY ROLLUP (year, month, day)

year, month, day | year, month | year | () の 4パターン

CUBE組み合わせ ( 表 )

Page 39: T sql 振り返り

データの変更監視

変更データキャプチャ (CDC)Express/Standard Edition では使えない変更されたデータも保持

変更の追跡 (Change Tracking)Express Edition でも使える!変更された事だけを保持 データは保持しないので、任意のタイミングのスナップショットと比較

Page 40: T sql 振り返り

SQL Server 2008 R2 で使える機能

http://technet.microsoft.com/ja-jp/library/bb510411(SQL.105).aspx

データ層アプリケーション (DAC)Unicode 圧縮

nchar(n)/nvarchar(n) の Unicode データが圧縮

Express の DB サイズが 10GB に増量

Page 41: T sql 振り返り

2012 の新機能

Page 42: T sql 振り返り

T-SQL に絞って紹介

ORDER BY での OFFSET FETCHページング処理も楽々

THROW ステートメントTRY-CATCH で

OVER 句の強化分析関数も使用可能に!

Page 43: T sql 振り返り

OFFSET FECTH

結果セットから一部のデータだけをフェッチするオプション

ORDER BY は必須TOP と同時使用は NGOFFSET:開始位置FETCH:取得件数

Page 44: T sql 振り返り

OVER

分析関数も使えるようになったLAGLEADFIRST_VALUELAST_VALUECUME_DISTPERCENTILE_CONTPERCENTILE_DISCPERCENT_RANK

Page 45: T sql 振り返り

T-SQL に絞って紹介

RESULT SETS オプションストアド呼び出し時に、結果セットの型を指定 (異なる場合は実行時エラー )名前と型を変更可能

追加された関数

Page 46: T sql 振り返り

追加された関数

PARSE文字列 => 日付 / 時刻 or 数値型.NET に依存 (culture 指定可 )

TRY_PARSE/TRY_CONVERTPARSE/CONVERT の変換失敗で null 返す

FORMAT書式指定文字列を返す.NET に依存 (culture 指定可 )

Page 47: T sql 振り返り

追加された関数

CHOOSE値の一覧から index にある項目を返すCHOOSE(index, val1, val2, …)

IIFCASE の簡略化

CONCAT2つ以上文字列結合で null は空文字扱い。

EOMONTH月の最終日を返す

Page 48: T sql 振り返り

さいごに

Page 49: T sql 振り返り

T-SQL を振り返って…

2005 から使いやすくなった2008 は型が追加された2012 ではさらに便利な物が増えたExpress Edition は無償で使えるので、是非お試しを!