大量の列をINSERTするクエリを簡単に編集する
はじめに
INSERTクエリは一般的に以下のように記述します。
INSERT INTO
SALE(sale_date, price, created_at)
VALUES
('2023-01-01', 160, '2024-01-11 14:29:01.618')
構文はまるでCSVのようで、非常にシンプル。習得は容易なのですが、「列」と「値」のマッピングを読み取りづらく、修正がし辛いという側面があります。
「難しくはない、ただ手間がかかる。」
この問題を労力をかけずに解決する方法を紹介します。
INSERTクエリの構造
先程のINSERTクエリは、
sale_date に '2023-01-01'(黄色)
price に 160(緑色)
created_at に '2024-01-11 14:29:01.618'(水色)
が代入されます。
代入先の列定義と代入値の定義が分離しているため、どの列にどの値が入るのか直感的に分かりづらいです。
試しに列数を10個の場合を見てみましょう。
INSERT INTO
SALE(sale_date, price, created_at, column4, column5, column6, column7, column8, column9, column10)
VALUES
('2023-01-01', 160, '2024-01-11 14:29:01.618', 'example_text', 42, '2024-01-01', TRUE, 'another_text', 3.14, FALSE)
'another_text'がどの列に代入されるのか、直感的に分かる人は少ないと思います。
ヘッダーとデータを固定長のように桁揃えすれば見やすくなりますが、かなり手間がかかります。代入値の値が変わるだけで、関連する列の表示位置を修正する必要があり、これを維持するのは大変です。
また、追加する行が多くなればヘッダー情報は見づらくなるという宿命から逃れることはできません。
SELECTクエリで表現する
このままでは、列と値のマッピングが非常に分かりづらいため、代入値の編集は地味に面倒なものになります。
このようなときSELECTクエリで記述すると非常にわかりやすくなります。
INSERT INTO
SALE(sale_date, price, created_at)
SELECT
'2023-01-01' AS sale_date,
160 AS price,
'2024-01-11 14:29:01.618' AS created_at
値と列を1行で定義しているので、非常に読みやすいですね。
代入列が10個の場合も見てみましょう。
INSERT INTO
SALE(sale_date, price, created_at, column4, column5, column6, column7, column8, column9, column10)
SELECT
'2023-01-01' AS sale_date,
160 AS price,
'2024-01-11 14:29:01.618' AS created_at,
'example_text' AS column4,
42 AS column5,
'2024-01-01' AS column6,
TRUE AS column7,
'another_text' AS column8,
3.14 AS column9,
FALSE AS column10
'another_text'がどの列に代入されるのか、一目瞭然になりました。
手間が増える?いや大丈夫!
SELECTクエリにすることで確かに読みやすくなりました。
しかし、既にある「INSERT INTO VALUES」クエリを「INSERT INTO SELECT」クエリに書き換えるのは、固定長整形よりも大変です。
「SELECTクエリにするなんて現実的でない!」
そう思うことでしょう。
安心してください。手作業で変換する必要はありません。
こちらのサイトで変換してください。
使い方
1.「INSERT INTO VALUES」クエリをInputテキストボックスに貼り付ける。
2.タブフォーカスを外すとResultに「INSERT INTO SELECT」クエリが表示される。
3.「Swap」ボタンを押して、Resultのテキスト内容をInputに移動させる。
4.Inputにある「INSERT INTO SELECT」を編集する。
5.タブフォーカスを外すとResultに「INSERT INTO VALUES」クエリが表示される。
おしまい!
SELECTクエリ形式を使ってもいいし、VALUESクエリ形式に戻して使っていいです。
Discussion