メインコンテンツへ
データベース

2025年1月1日より前のデータをordersテーブルからarchive_ordersテーブルにコピーするSQL文として正しいものはどれか。

ア.INSERT INTO archive_orders SELECT * FROM orders WHERE order_date < '2025-01-01'正解
イ.INSERT INTO archive_orders VALUES (SELECT * FROM orders WHERE order_date < '2025-01-01')
ウ.COPY INTO archive_orders FROM orders WHERE order_date < '2025-01-01'
エ.INSERT archive_orders SELECT * FROM orders WHERE order_date < '2025-01-01'

解説

INSERT INTO ... SELECT は「コピー機能付きの転記」。SELECT結果をそのまま別テーブルに挿入できる。

なぜ ア が正解か

INSERT INTO archive_orders SELECT * FROM orders WHERE order_date < '2025-01-01' が正しい構文。INSERT INTO テーブル名 の後にSELECT文を続けることで、SELECTの結果をそのまま挿入できる。

なぜ イ は間違いか

INSERT INTO ... VALUES (SELECT ...) は文法エラー。VALUES句の中にはSELECT文を直接入れられない。

なぜ ウ は間違いか

COPY INTO ... FROM ... はSQLの標準構文ではない。一部のデータベース固有の構文。

なぜ エ は間違いか

INSERT archive_orders ... はINTO が抜けており文法エラー。

出典: AI生成問題(学習用)