【初学者必見!】SQLの超基礎を徹底解説!テーブルデータ挿入編

サムネイル SQL

※この記事にはプロモーションが含まれています。

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

筆者
筆者

この記事では、テーブルにデータを挿入する方法を解説します。

テーブルの作成方法については、前回の記事を参照してください。

A子
A子

今回使用するテーブルは、前回作成した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の実行方法を知りたいという方は、

ぜひ!!下記の記事を参考にしてください。

A子
A子

環境構築が不要で、ブラウザで無料で使用できるから、

SQLの練習にはもってこいだよ!

今回のSQLも、Oracle Live SQLで実行していくよ!

筆者
筆者

まずは、基本構文を見ていきましょう!

基本構文

INSERT INTO テーブル名 (列名1, 列名2, 列名3, …)
VALUES (値1, 値2, 値3, …);

A子
A子

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, 'ガソリン代支給');

A子
A子

今回の記事を学べば、全体の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) は、追加したいデータを入れる列の順序を指定します。

A子
A子

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

筆者
筆者

はい、大きく関係します。

列名の順序は values の値の順序と一致させる必要があります。順序がずれると、例えば STAFF_NO に日付が入ってしまうなどのエラーが発生します。

すべての列にデータを追加する場合は列名の指定を省略できますが、省略した場合は テーブルの定義順 に従います。明示的に指定する方が安全です。

<続きのSQL>

values ('1001', 'A001', to_date('2024-02-01', 'YYYY-MM-DD'), to_date('2024-02-05', 'YYYY-MM-DD'), NULL, 'ガソリン代支給')
A子
A子

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

筆者
筆者

そういう時は、要素ごとに見ていきましょう!

'1001'

意味: STAFF_NO 列に「1001」という値を追加します。

データ型: STAFF_NO は通常、職員番号を格納する文字列型 (VARCHAR2) または数値型 (NUMBER) です。

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

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

筆者
筆者

はい、そうです。

今回のSQLでは '1001' とシングルクォートで囲んでいるため、文字列 (VARCHAR2) として追加されます。

'A001'

意味: APPLI_NO 列に「A001」という申請番号を追加します。

データ型: 文字列 (VARCHAR2) ですので、シングルクォートで囲みます。

A子
A子

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

筆者
筆者

はい、区別されます。

文字列は 大文字小文字を区別 します。

例えば、'A001''a001' は異なるデータとして扱われます。

ちなみに、文字列内に シングルクォート (') を含めたい場合は、シングルクォートを 2つ連続 で書きます。例: 'O''Brien'

to_date('2024-02-01', 'YYYY-MM-DD')

意味: APPLI_DATE 列に「2024年2月1日」という日付を追加します。

関数: to_date は、文字列を 日付型 (DATE) に変換するOracle SQLの関数です。

A子
A子

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

筆者
筆者

それでは、to_date 関数について見ていきましょう。

to_date(文字列, 書式)

文字列: 追加したい日付を文字列としてシングルクォートで囲みます。例: '2024-02-01'

書式: 文字列がどの形式で書かれているかを指定します。例: 'YYYY-MM-DD' は「年-月-日」の形式を表します。

A子
A子

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

筆者
筆者

書式は文字列がどの形式で書かれているかを指定します。

例: 'YYYY-MM-DD' は「年-月-日」の形式を表します。

書式指定では以下の記号を使用できます。

  • YYYY: 4桁の西暦 (例: 2024)
  • MM: 2桁の月 (例: 02)
  • DD: 2桁の日 (例: 01)

Oracleでは、文字列をそのまま日付列に追加しようとするとエラーになります。必ず to_date を使いましょう。

to_date('2024-02-05', 'YYYY-MM-DD')
A子
A子

これは、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
HH2424時間制の時間 (00〜23の2桁)14 (午後2時)
MI分 (00〜59の2桁)30 (30分)
SS秒 (00〜59の2桁)00 (ちょうど0秒)

NULL
A子
A子

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

筆者
筆者

はい!そうです。

CREATE文の解説記事で、解説しましたね!

ちなみに、NULLシングルクォートで囲みません。もし 'NULL' と書いてしまうと、文字列として追加されます。

CREATE文の解説記事

'ガソリン代支給'

意味: APPLICATION_CONTENT 列に「ガソリン代支給」というテキストを追加します。

データ型: 文字列 (VARCHAR2) なので、シングルクォートで囲みます。

筆者
筆者

解説したSQLを実行してみましょう!

<挿入先のテーブルデータ>

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

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

筆者
筆者

select文については、次回解説します!!

最後にひとこと

筆者
筆者

今回は、INSERT文について解説してきました!

次回もお楽しみに!!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました