目次

SQLの小技

SQLite 専用小技

 SQLite3 のシステムに依存した小技の紹介です。他の DBMS では使用できませんのでご注意を。

データベース一覧の取得

 現在開いているデータベースの一覧を取得します。

pragma database_list

テーブル/ビュー/インデックス一覧の取得

 現在のデータベース内のテーブル、ビュー、インデックスの一覧を取得します。

select * from sqlite_master

テーブル定義の取得

 指定したテーブルの定義を取得します。たとえば、tekiyo テーブルの定義を見たい場合は、table_name を tekiyo に置き換えてください。

pragma table_info(table_name)

SQL 汎用小技

 一般的な SQL で使用可能な小技の紹介です。システムによっては、使えないことがあるかもしれません。

特定パターンが複数フィールドのいずれかに部分一致するかどうか

 フィールド f1, f2, f3 のいずれかに 'p' というパターンが部分一致('%p%')するレコードを検索する場合、通常

f1 like '%p%' or f2 like '%p%' or f3 like '%p%'

という式にしますが、左辺側で各フィールドの文字列を連結して

f1||f2||f3 like '%p%'

という式にまとめることもできます。

応用

 パターンと各フィールド値に存在しない文字をフィールド間に付加すれば、下記のように前方一致/後方一致/完全一致も可能です。もっとも、こうなると書きやすさは通常と大差なく、著しくリーダビリティが悪くなるので、あえてここまでする必要があるかどうかはかなり疑問ですね(^_^;)。

前方一致: '~'||f1||'~'||f2||'~'||f3||'~' like '%~p%'
後方一致: '~'||f1||'~'||f2||'~'||f3||'~' like '%p~%'
完全一致: '~'||f1||'~'||f2||'~'||f3||'~' like '%~p~%'

留意点

 || は SQLite の文字列連結演算子です。他の DBMS では concat 関数等を使う必要があります。

特定フィールドが複数パターンのいずれかに部分一致するかどうか

 フィールド f に 'p1', 'p2', 'p3' というパターンのいずれかが部分一致するレコードを検索する場合、通常

f like '%p1%' or f like '%p2%' or f like '%p3%'

という式にしますが、正規表現演算子を使うと

f regexp 'p1|p2|p3'

と簡単な式で書けます。

留意点

 regexp は、SQLite の正規表現演算子です。DBMS ごとに正規表現演算子は異なりますので、システムのマニュアルを参照してください。

 また、古い DBMS では、正規表現に対応していないものがあります。Windows 版の SQLite3 データベースエンジンである sqlite3.dll も標準では regexp 演算子が実装されておらず、ユーザが自分で実装する必要があります。