株式会社リゾーム 技術部 システム開発 第1グループの宮野です。
「スッキリわかるSQL入門」読書会 第4回のレポートです。
過去の記事はこちらです
「スッキリわかるSQL入門」読書会レポート vol.1 - リゾームのテックブログ
「スッキリわかるSQL入門」読書会レポート vol.2 - リゾームのテックブログ
「スッキリわかるSQL入門」読書会レポート vol. 3 - リゾームのテックブログ
今回の題材
引き続き、「スッキリわかるSQL入門」を使用しています。
今回から第Ⅱ部「SQLを使いこなそう」に入りました。
第5章「式と関数」を参加者で読み、感想などを話し合いました。
参加人数
今回は6人での読書会となりました。
参加者の感想・意見まとめ
5.1 式と演算子
式・演算子はよく使うというメンバーもいれば、普段の業務ではあまり使わないというメンバーもいました。 また、以下のような声が挙がっていました。
- 別名は製品やDBMSによる。例えばSQLServerで列名を付けずに計算式のままにしておくと「(列名なし)」になる
- テーブルの各行は一行ずつ順番に処理される。プログラマなら当然の発想だが、確かに初学者は戸惑うかも
5.2 さまざまな演算子
こちらも、使用頻度・よく使う演算子はメンバーそれぞれでした。
CASE演算子が紹介されていましたが、「使われているSQL文を見たことがあるくらい」という人もいれば「よく使う」という人もいたり……
また、 DBMSによって使用できる演算子が異なるケースについても多く発言がありました。
- 文字列連結は「||」とあるがSQL Serverだと「+」か CONCAT 関数、など
便利ですが、こういう注意点もあったり。
- 文字列連結の際には「+」をよく使うが、SQL Serverだと連結する対象がひとつでもNULLの場合、他に文字列があったとしても結果がNULLになってしまうため要注意(NULLはあらかじめISNULLで空文字などに置き換えておく)
5.3 さまざまな関数
こちらもメンバーによって使う機会・使う関数は様々…
そしてやはりDBMSによる違いが話題になりました。
- 検索して出てきた関数を使用できないということがたまにあった。難しいけど製品のドキュメントをなるべく見るように…
- SQL Serverで使ってたあの関数と同じ関数がPostgreSQLに無いかな?無いわ…、みたいなことがあったりする
5.4 文字列にまつわる関数
こちらもメンバーによって(略)
よく使うというメンバーにとっては、この節に登場する関数はどれもおなじみですね…
- コードとコードを連結するとか、郵便番号からハイフンを取り除くとか
- (5.2で挙がっていた、文字列連結で「+」を使う際はNULLの対処が必要ですが)CONCAT関数だとISNULL無しでも暗黙的に空文字に置き換わる
5.5 数値にまつわる関数
こちらもメ(略)
普段かかわる業務やDBMSによる差が話題になりました。
- データ分析や金額計算をするアプリでは ROUND や TRUNC をよく使うのだろうか?
- 分析結果はたいてい何らかの四捨五入なのでROUNDにとてもお世話になる
- SQLServerだとTRUNC関数は使えない。代わりにROUND関数
- powerはべき乗の「べき」のことなのね。パワー!
5.6 日付にまつわる関数
こちらもメンバーによる使用頻度の違いはありましたが、特にSQL Serverユーザーによる「現在日時はだいたいGETDATE()」という声が多く聞かれました。
- GETDATE()で日付取得してCONVERT関数やFORMAT関数で希望の書式に変形
5.7 変換にまつわる関数
この節で紹介されていた関数の中ではCASTをよく使うという声がありました。
- 数値型を文字列型に変換して連結する
- 演算子を使用する際、計算するデータ同士で型を合わせる など
COALESCEはISNULLで対応することの方が多そう…とも。
全体を振り返って
関数はDBMSやバージョンによる差がやはり大きいようで、調べて出てきた関数や以前の業務で使っていた便利な関数が今使用しているDBMSにはない、といった経験が多く聞かれました。
また、現在携わっている製品・業務によって関数を使用する頻度、よく使う関数の種類が全く違うことも印象的でした。
普段見えない世界が見えるのも、チームをまたいだ読書会の面白さかもしれません。