INSERT文を使ってテーブルにデータを挿入しよう

この記事では、テーブルにデータを挿入する方法を解説します。
テーブルの作成方法については、前回の記事を参照してください。

今回使用するテーブルは、前回作成したSQLと同じよ!!
<テーブル作成のSQL>
-- 申請管理情報テーブルの作成
create table 申請管理情報 (
STAFF_NO varchar2(10) not null, -- 職員番号 (Staff Number)
APPLI_NO varchar2(10) not null, -- 申請番号 (Application Number)
APPLI_DATE date, -- 申請年月日 (Application Date)
APPROVAL_DATE date, -- 承認日 (Approval Date)
SEND_BACK_DATE date, -- 差戻年月日 (Send Back Date)
APPLICATION_CONTENT varchar2(50), -- 申請内容 (Application Content)
constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);

ちなみに、SQLの実行方法を知りたいという方は、
ぜひ!!下記の記事を参考にしてください。

環境構築が不要で、ブラウザで無料で使用できるから、
SQLの練習にはもってこいだよ!
今回のSQLも、Oracle Live SQLで実行していくよ!

まずは、基本構文を見ていきましょう!
基本構文
INSERT INTO テーブル名 (列名1, 列名2, 列名3, …)
VALUES (値1, 値2, 値3, …);

INSERT文は、テーブルに新しいデータを追加するときに使うんだよね?

はい、そうです!
詳しくは以下にまとめました。
INSERT INTO: 「このテーブルにデータを追加する」という意味です。
テーブル名: データを追加したいテーブルの名前を書きます。
(列名1, 列名2, ...): 追加したい列(カラム)の名前をカンマで区切って並べます。
VALUES: これから書く値を「それぞれの列に追加する」という意味です。
(値1, 値2, ...): 各列に入れる具体的な値をカンマで区切って並べます。値の順番は列名の順番と一致させる必要があります。

では、データ挿入のSQL全体をみていきましょう!!
<全体のSQL文>
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, APPROVAL_DATE, SEND_BACK_DATE, APPLICATION_CONTENT)
values ('1001', 'A001', to_date('2024-02-01', 'YYYY-MM-DD'), to_date('2024-02-05', 'YYYY-MM-DD'), NULL, 'ガソリン代支給');

今回の記事を学べば、全体のSQL文も理解できるんだねっ!

はい、そうです!!
では、パーツごとに見ていきましょう。
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, APPROVAL_DATE, SEND_BACK_DATE, APPLICATION_CONTENT)
insert into: SQLの命令文で、「指定したテーブルに新しいデータを追加せよ」という意味です。
申請管理情報: データを追加するテーブル名です。日本語のテーブル名を使うことも可能ですが、環境によっては文字コードの設定に注意が必要です。
括弧内の列名: (STAFF_NO, APPLI_NO, APPLI_DATE, APPROVAL_DATE, SEND_BACK_DATE, APPLICATION_CONTENT) は、追加したいデータを入れる列の順序を指定します。

列名の順序って関係するのかな?

はい、大きく関係します。
列名の順序は values の値の順序と一致させる必要があります。順序がずれると、例えば STAFF_NO に日付が入ってしまうなどのエラーが発生します。
すべての列にデータを追加する場合は列名の指定を省略できますが、省略した場合は テーブルの定義順 に従います。明示的に指定する方が安全です。
<続きのSQL>
values ('1001', 'A001', to_date('2024-02-01', 'YYYY-MM-DD'), to_date('2024-02-05', 'YYYY-MM-DD'), NULL, 'ガソリン代支給')

ごちゃごちゃしてて、難しそうね、、

そういう時は、要素ごとに見ていきましょう!
'1001'
意味: STAFF_NO 列に「1001」という値を追加します。
データ型: STAFF_NO は通常、職員番号を格納する文字列型 (VARCHAR2) または数値型 (NUMBER) です。

- 文字列型 (VARCHAR2) の場合は、シングルクォート (
') で囲む必要があります。例:'1001' - 数値型 (NUMBER) の場合は、シングルクォートは不要です。例:
1001

じゃあ、’1001’は文字列かな?

はい、そうです。
今回のSQLでは '1001' とシングルクォートで囲んでいるため、文字列 (VARCHAR2) として追加されます。
'A001'
意味: APPLI_NO 列に「A001」という申請番号を追加します。
データ型: 文字列 (VARCHAR2) ですので、シングルクォートで囲みます。

ちなみに、大文字と小文字って区別されるのかしら?

はい、区別されます。
文字列は 大文字小文字を区別 します。
例えば、'A001' と 'a001' は異なるデータとして扱われます。
ちなみに、文字列内に シングルクォート (') を含めたい場合は、シングルクォートを 2つ連続 で書きます。例: 'O''Brien'
to_date('2024-02-01', 'YYYY-MM-DD')
意味: APPLI_DATE 列に「2024年2月1日」という日付を追加します。
関数: to_date は、文字列を 日付型 (DATE) に変換するOracle SQLの関数です。

to_date 関数について、教えて!

それでは、to_date 関数について見ていきましょう。
to_date(文字列, 書式)
文字列: 追加したい日付を文字列としてシングルクォートで囲みます。例: '2024-02-01'
書式: 文字列がどの形式で書かれているかを指定します。例: 'YYYY-MM-DD' は「年-月-日」の形式を表します。

書式って具体的には何だろう?

書式は文字列がどの形式で書かれているかを指定します。
例: 'YYYY-MM-DD' は「年-月-日」の形式を表します。
書式指定では以下の記号を使用できます。
YYYY: 4桁の西暦 (例: 2024)MM: 2桁の月 (例: 02)DD: 2桁の日 (例: 01)
Oracleでは、文字列をそのまま日付列に追加しようとするとエラーになります。必ず to_date を使いましょう。
to_date('2024-02-05', 'YYYY-MM-DD')

これは、APPROVAL_DATE 列に「2024年2月5日」という日付を追加しているんだね!

はい!その通りです。
Oracle SQLでは 日付データは時刻も含む ため、to_date を使うと 時刻部分は自動的に00:00:00 になります。
もし 時刻を指定 したい場合は、以下のように書きます。
to_date('2024-02-05 14:30:00', 'YYYY-MM-DD HH24:MI:SS')
ポイント:
HH24を使うことで、時間を 24時間制 として解釈します。- もし 12時間制 で指定したい場合は、
HH12を使い、午前午後をAMまたはPMで指定します。

書式についてまとめると、以下の通りです。
| 書式 | 説明 | 入力例 |
|---|
YYYY | 西暦の4桁の年 (Year) | 2024 |
MM | 月 (01〜12の2桁) | 02 |
DD | 日 (01〜31の2桁) | 05 |
HH24 | 24時間制の時間 (00〜23の2桁) | 14 (午後2時) |
MI | 分 (00〜59の2桁) | 30 (30分) |
SS | 秒 (00〜59の2桁) | 00 (ちょうど0秒) |
NULL

NULLは「値が存在しない」 ことを表すんだっけ?

はい!そうです。
CREATE文の解説記事で、解説しましたね!
ちなみに、NULL は シングルクォートで囲みません。もし 'NULL' と書いてしまうと、文字列として追加されます。
CREATE文の解説記事
'ガソリン代支給'
意味: APPLICATION_CONTENT 列に「ガソリン代支給」というテキストを追加します。
データ型: 文字列 (VARCHAR2) なので、シングルクォートで囲みます。

解説したSQLを実行してみましょう!
<挿入先のテーブルデータ>

<データを挿入するSQL文>

<挿入できたか、select文で確認!>


select文については、次回解説します!!
最後にひとこと

今回は、INSERT文について解説してきました!
次回もお楽しみに!!





コメント