SQL振り返り【INSERT,UPDATE,DELETE】
どうも。てちこまです。
前回に引き続きSQLの振り返りで詰まったところ忘れていたところをまとめていきたいと思います。
Index
INSERT(データ挿入)
例
1 2 |
INSERT INTO テーブル名(列名1,列名2) VALUES(値1,値2); |
列名は省略も可能ですが、テーブル定義が変わったり格納する際に列順序などの間違いにつながるのでやめたほうがいいらしいです。
値を指定しない場合テーブル定義で設定したデフォルト値が入る。未設定の場合NULLが入る。
INSERTでNULLやデフォルト値を明示的に設定
1 2 |
INSESRT INTO テーブル名(列名1,列名2,列名3) VALUES(値1,NULL,DEFAULT); |
既存のテーブルから他テーブルにコピー、挿入する
1 2 3 4 |
INSERT INTO テーブルA(Aの列名1,Aの列名2) SELECT Bの列名1,Bの列名2 FROMテーブルB WHERE 条件 |
この場合AとBの列の数とデータ型が一致している必要がある。
列名は一致していなくていい。
UPDATE (データ更新)
例
1 2 3 |
UPDATEテーブル名 SET 列名1 = 値1,列名2 = 値2 WHERE 条件式; |
そのままなんですけど久しぶりに書いてみたらINSERTと構文ごっちゃになってました。
更新対象の列がなくてもエラーにはならない。
WHERE句がないとすべての行が更新される。
DELETE(データ削除)
1 2 |
DELETE FROM テーブル名 WHERE 条件式; |
WHEREの指定がないと全行削除になる。
削除対象行がなくてもエラーにはならない。
おまけ
バルクINSERT
1 2 3 4 5 |
INSERT INTO テーブル名 (列名1, 列名2, ...) VALUES (値1,値2, ...) ,(値1_1, 値2_1, ...) .(値1_2, 値2_2, ...) ...; |
複数行のINSERTを一気に行う場合に利用。VALUES句のみ増やしていくスタイル。
まとめ
SELECTの範囲がちゃんと分かっていれば基本的には問題ないですね。
資格の話だとOracleのSQL12cBronzeは昔とったんですけどこの辺の知識だけで受かると思います。
【追記】
制約もテスト範囲だったの思い出しました。
結合と条件式が若干複雑だったかな。
5月中なら2回目の受験料が無料なんで興味ある人は受けてみてもいいかもしれません。このキャンペーンはたぶん毎年やってます。
リンク