====== SQLの小技 ====== ===== SQLite 専用小技 =====  [[https://www.sqlite.org/|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 演算子が実装されておらず、ユーザが自分で実装する必要があります。