📚

大量の列をINSERTするクエリを簡単に編集する

2024/04/02に公開

はじめに

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クエリにするなんて現実的でない!」
そう思うことでしょう。

安心してください。手作業で変換する必要はありません。

こちらのサイトで変換してください。

https://mk3008.github.io/Carbunql/insert_query/try_convert_to

使い方

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