はじめに
Photo taken by @kaedemalu
春の入門連載2021の3日目です。
今回は業界歴の比較的浅い方々をターゲットに、覚えておくと現場で役立ちそうなSQLの小技をいくつか紹介したいと思います。
知らなくても困らないけど、知っているとちょっと仕事を効率化できそうなもの、考え方に触れれば比較的簡単に応用ができそうなものをピックアップしてみました。
紹介しているサンプルはPostgreSQLを前提とした記述しています。多少構文が異なるケースはあるものの、どのプロダクトでも同様の事ができます。
メタデータの利用
一般的にデータベースは、内部でオブジェクト(テーブル、インデックス、ストアドプログラムなど)をはじめとしたデータベース構成要素の定義情報を持っており、それらは「メタデータ」や「ディクショナリ」と呼ばれています。条件付きではありますが、データベース内で発生した「出来事」の情報も保持しています。
メタデータを上手くを活用すると、例えば簡単なケースでは、後述するような環境のクリーニング(全テーブルのデータを一括削除)であったり、テーブルのレコード件数の確認だったりといった、日常のちょっとした機械的な作業の手数を減らす事ができます。
その他にも、「〇〇カラムってどのテーブルで持ってたんだっけ」といった、設計ドキュメントを見れば分かるけれど、それを探して開くのが面倒くさいような、ちょっとした調べ事をSQLの発行で代替できます。
応用性が非常に高い領域ですので、まずは簡単な事から初めつつ、引き出しを増やしていってみてください。
Sample
特定環境の全テーブルを削除するSQLをSQLで作成
SELECT |
特定文字を含むカラム名を持つテーブルの調査
SELECT |
SELECT句のみSQL
一般的にSELECT文はFROM句とセットで記述すると習うのではないかと思います。
しかしながら、PostgreSQLなどのDBプロダクトではFROM句のないSELECT文が構文として許容されています(OracleなどはNGです)。
「FROM句のないSELECT文を書くケースなんてあるのか?」という疑問を抱かれるでしょうが、初めて利用する関数の挙動確認などを行う場合など、デバッグやカジュアルな検証を行う際に便利です。わざわざテストテーブルを作成し、テスト用ダミーデータを入れてといった手間を省く事ができます。
Sample
SQL版Hello World!
SELECT 'Hello World!'; |
組み込み関数の挙動確認
/* 「 UPPER(小文字を大文字に変換して返す))」なる関数が便利そうだが、想定する結果を返してくれるか? */ |
JOINのコーディング量削減 ※限定利用推奨
新人研修などでも「内部結合と外部結合の理解は必須」などと言われるかと思いますが、データベース(RDBMS)を利用する場合、JOINは日常的に書く事になります。
コピー & ペーストである程度楽できるとはいえ、結合する両テーブルのカラムを指定したり、「=」や「AND」、半角スペースを入れたりと、キーボードを叩く手数は少なくありません。
システム内でのコーディングスタイルの一貫性が損なわれる可能性がある(ONとUSINGが混在すると)といったような理由のため、アプリケーションに組み込むSQLで利用する事は推奨しませんが、結合するテーブル間で結合キーの物理名が同じ場合には(条件が整っていれば)「USING」句を利用する記述方法で、コーディング量を1/2以下に減らす事ができます。
Sample
USINGとONの比較
/* USING */ |
コメント化/解除ショートカットキー
SQLに限った話ではないですが、普段利用するツールのショートカットキーを把握しておく事は作業の効率化に繋がります。SQLの場合、ショートカットキーの中でも特に利用頻度が多いのが行単位でコメント化/解除(行の先頭に「– 」を挿入する/消す)を行うものです。
ツールによって異なりますが、私の知る限りは「Ctrl + /」が割り当てられているケースが多いです。
本当によく利用するので知っていると便利です。
Sample
WHERE句の条件指定を色々と変えながらデータを探す
SELECT |
まとめ
研修や入門書では触れられなさそうな、地味な「小技」を紹介してみました。
SQLに限らず実施頻度が多い作業はなるべく効率化を検討し、生産性を上げていきましょう。