→[[データベース関連]]

→SQL関連メモ(Oracle)

→T-SQL関連メモ

#contents


*話題 [#tec52d92]
-[[SQL本三大対決>http://blog.livedoor.jp/dankogai/archives/50995918.html]]
-[[三値理論とNULL:http://codezine.jp/a/article.aspx?aid=532]]
-[[SQLクリニック@IT:http://www.atmarkit.co.jp/fdb/index/index-db.html#sqlclinic]]


*Tips [#m47a0472]


-[[EXISTSとSQLの高速化について>http://kkoudev.github.io/blog/2013/09/14/sql/]] 2013.9
--[[SQL テーブル参照先の条件句 JOIN vs EXISTS>http://totech.hateblo.jp/entry/2016/09/21/172801]] 2016.9
---こちらはEXISTSの方が速くなるケース


て>https://tgk.hatenadiary.org/entry/20101005/1286273710]] 2010.10

-[[WITH句を使い重複するSQL文をまとめる方法>http://omachizura.com/sql/WITH%E5%8F%A5%E3%82%92%E4%BD%BF%E3%81%84%E9%87%8D%E8%A4%87%E3%81%99%E3%82%8BSQL%E6%96%87%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%E6%96%B9%E6%B3%95.html]]

-SELECTしたレコードをUPDATE/DELETEする場合、最初に
SELECTするときにROWIDを取得しておいてキーにすると速く処理できる(ただしRowIDがつ使えるOracleの場合)

-DECODEや CASE WHEN 式でSQLを一つにまとめられるならしたほうがよい

-HAVING句による絞り込みをする前にwhere句による絞り込みをしたほうがいい
--良い例
 SELECT job, AVG(uriage) from emp 
  where job IN ('A','B', ...) group by job;
--悪い例
 SELECT job, AVG(uriage) from emp
  group by job having job IN ('A','B', ...) ;
--先に絞り込んでから集計する方がパフォーマンスが良い


-レコードを毎回ランダム順に取得
 select newid() nid,*   from <hoge> order by nid

-抽出結果からテーブル作成
 select * into <hoge> from <hage>

-抽出結果を既存テーブルにインサート
 insert into <hoge> select * from <hage>
<hoge>と<hage>の項目が合っていることが前提。values()や項目指定などを使って合わせる

-[[Having句の力>http://codezine.jp/a/article/aid/652.aspx]]
-[[SQLの日付処理関数>http://www.atmarkit.co.jp/fdb/rensai/tsql03/tsql03_2.html]]
-[[SQLで数列を扱う>http://codezine.jp/a/article/aid/1076.aspx]]
-[[SQL for practitioners:http://www.geocities.jp/mickindex/database/db_TaT.html]]
--2つのテーブルのコンペア→どこが一致してないのか特定する方法
--完全外部結合(2つ以上のマスタで外部結合する FULL OUTER JOIN)
--リスト比較
-[[自己結合の使い方:http://codezine.jp/a/default.aspx?cid=134&aid=460]]
-[[CASE式のすすめ:http://codezine.jp/a/article.aspx?aid=405]]


*文字列の中に数字以外の文字があるかどうかで絞り込みたい [#ubd4744d]
-Oracleならtranslate()関数で英字を''に変換して長さが変わるか見る
-SQL Serverにはtranslate()がないので↓のようにする
 len(
 replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
 replace(kekka,'0', '') , '1', ''), '2', ''),'3',''), '4',''),'5',''),'6',''),'7',''),'8',''),'9',''),'.','')
 ) > 0
-参考:http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-901234&bbsid=1&no=43887&view=8

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS