SQL IN句生成
複数の値を1行ずつ入力すると、SQLのIN句をまとめて生成できます。文字列リテラルとクォートなしを切り替えられ、シングルクォートのエスケープにも対応します。
入力例
結果
入力して「IN句を生成」を押してください。
このツールでできること
- 複数行の値からSQLの
IN (...)を一括生成できます - 出力形式を「文字列リテラル(
'...')」「クォートなし」から選べます(既定は文字列リテラル) - 値内部のシングルクォートを
''へ自動的にエスケープします(文字列リテラルモード) - 入力順序をそのまま維持します(自動的に並べ替えません)
- 重複した値もそのまま維持します(自動的に重複削除しません)
- 前後の空白を除去し、空行は自動的に無視します
- 生成したIN句をワンクリックでコピーできます
使い方
手順を見る
- 値の形式で「文字列リテラル」または「クォートなし」を選びます(既定は「文字列リテラル」)
- SQLのIN句にしたい値を1行1件で入力します(前後の空白は自動で除去され、空行は無視されます)
- 「IN句を生成」を押します
- 生成された結果を確認し、「コピー」でクリップボードへコピーします
こんなときに使えます
利用シーンを見る
- SQLコンソールで複数のIDやコードをまとめてWHERE句の条件に使いたいとき
- Excel・スプレッドシート・CSV・ログ・管理画面からコピーした複数の値を、そのままIN句に変換したいとき
- 開発・デバッグ中に、手動でIN句付きのSQL断片をすばやく組み立てたいとき
- 値の中にシングルクォートを含む文字列(例:
O'Reilly)を、エスケープミスなくSQLへ組み込みたいとき
SQL IN句生成の仕組みと注意点
詳しい解説を見る
文字列リテラルモードとクォートなしモードの違い
「文字列リテラル('...')」モードは各値をシングルクォートで囲んだSQLの文字列リテラルとして出力します。「クォートなし」モードは値をクォートせずそのまま並べます。数値やSQLの特別な値(NULL等)をクォートなしで使いたい場合に選びます。どちらのモードも、値の内容を見て自動的に切り替えることはありません。
シングルクォートのエスケープ(O'Reilly → 'O''Reilly')
文字列リテラルモードでは、値の内部に含まれるシングルクォート(')をすべて2つ並べた''へ変換してから、値全体をシングルクォートで囲みます。これは一般的なSQLの単一引用符文字列リテラルにおける標準的な表記方法です。例えばO'Reillyは'O''Reilly'になります。
001のような値を自動で数値と判定しない理由
本ツールは値の内容を見て「これは数値」「これは文字列」と自動推測することはしません。001のような値をクォートなしモードで自動的に1へ変換してしまうと、意図しないデータの変化につながるためです。数値として扱いたい場合は「クォートなし」を、文字列として扱いたい場合は「文字列リテラル」を、利用者自身が選んでください。
NULL・'NULL'・IS NULLは別物です
クォートなしモードでNULLと入力すると、SQLのNULLリテラルとしてそのまま出力されます。文字列リテラルモードでNULLと入力すると、文字列'NULL'として出力されます。また本ツールはIS NULLへの自動変換を行いません。IN (NULL)とIS NULLはSQL上の意味が異なるため、この違いを理解した上でご利用ください。
DB製品ごとの方言は自動判定しません
本ツールは特定のDB製品(MySQL・PostgreSQL・SQL Server・Oracle等)を選択する機能を持たず、一般的なIN (...)・単一引用符文字列リテラル・内部単一引用符の''化のみを対象とします。DB製品固有のエスケープ規則や構文には対応していません。
本ツールはSQLインジェクション対策ではありません
文字列リテラル内のシングルクォートを''へ変換する機能は、SQLコンソールでの調査や手動SQL作成を補助するものであり、SQLインジェクション対策そのものではありません。生成した結果をアプリケーションコードへそのまま連結すれば安全になる、という設計でもありません。アプリケーションコードでは、prepared statement / parameterized queryなどの利用を検討してください。また、非常に多くの値を含むIN句は、DB製品や用途によって性能・件数上の制約が異なるため、利用前に確認することをおすすめします。
よくある質問
文字列リテラルとクォートなしはどう違いますか?
文字列リテラルは各値をシングルクォートで囲んだSQLの文字列として出力します(内部のシングルクォートは自動的にエスケープされます)。クォートなしは値をそのままクォートせずに並べます。どちらを使うかは値の内容に応じて利用者ご自身で選んでください(自動判定はしません)。
O'Reillyのようなシングルクォートを含む値を入力するとどうなりますか?
文字列リテラルモードでは、値の内部のシングルクォートがすべて2つ並べた''へ変換されてから、値全体がシングルクォートで囲まれます。例えばO'Reillyは'O''Reilly'になります。クォートなしモードでは変換せずそのまま出力されます。
001のような値は自動で数値として扱われますか?
いいえ。本ツールは値の内容を見て数値・文字列・SQL予約語などを自動推測することはありません。001はクォートなしモードでもそのまま001として出力されます。
NULLと入力すると、SQLのNULL(IS NULL)として扱われますか?
クォートなしモードで入力したNULLはSQLのNULLリテラルとしてそのまま出力されます。文字列リテラルモードでは文字列'NULL'として出力されます。いずれの場合も、本ツールはIS NULLへの自動変換は行いません。IN (NULL)とIS NULLはSQL上の意味が異なります。
このツールを使えばSQLインジェクションを防げますか?
いいえ。本ツールはSQLコンソールでの調査・手動SQL作成を補助するためのツールであり、SQLインジェクション対策の機能ではありません。生成した結果をアプリケーションコードへそのまま連結すれば安全、という意味でもありません。アプリケーションコードではprepared statement / parameterized queryなどの利用を検討してください。
入力したデータはサーバーへ送信されますか?
いいえ。IN句の生成処理はすべてブラウザ内で完結しており、入力内容がサーバーへ送信されることはありません。