【初心者向け】Oracle SQLでの表の作成、INSERT、UPDATE、DELETEをマスター

オラクルデータベースの基本

データベースを操作する際、テーブル(表)を作成し、データを追加、更新、削除することは基本中の基本です。Oracle SQLは、強力かつ柔軟なデータベース管理システムであり、多くの企業で使われています。本記事では、Oracle SQLを使ってテーブルを作成し、データを挿入(INSERT)、更新(UPDATE)、削除(DELETE)する方法を、初心者向けにわかりやすく解説します。


1. Oracle SQLとは?

まずは、Oracle SQLについて簡単に理解しましょう。SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBMS)でデータを操作するための標準的な言語です。Oracleは、その中でも代表的なRDBMSの1つであり、さまざまな企業や組織で使用されています。

Oracle SQLでは、データの格納、検索、更新、削除といった基本操作が行えます。ここでは、これらの操作を行うために必要な基本的なSQL文を紹介していきます。


2. 表(テーブル)を作成する(CREATE TABLE)

テーブルとは、データを行と列で整理して格納するための構造です。Oracle SQLでは、CREATE TABLE文を使用してテーブルを作成します。まずは、その構文を見てみましょう。

CREATE TABLE文の構文

CREATE TABLE テーブル名 (
カラム名 データ型 [制約],
カラム名 データ型 [制約],
...
);

※カラム名=列名

例:社員情報を管理するテーブルの作成

CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50) NOT NULL,
hire_date DATE,
salary NUMBER(8, 2)
);

解説

  • employee_id: 5桁までの数値で社員のIDを表し、PRIMARY KEYにより重複を許さない一意のキーとなります。
  • first_name, last_name: 文字列型(VARCHAR2)で、last_nameにはNOT NULL制約がついており、必須項目です。
  • hire_date: DATE型で社員の入社日を格納します。
  • salary: 8桁の数値で、2桁の小数を持つ給与情報を表します。

テーブル作成時の注意点

  • テーブル名とカラム名は一意である必要があります。同じ名前のテーブルやカラムが存在するとエラーになります。
  • データ型の選択は慎重に行いましょう。例えば、文字列型(VARCHAR2)と数値型(NUMBER)では格納できるデータが異なります。


[参考]
SQL言語リファレンス – CREATE TABLE

Oracle SQLのDESCRIBEコマンドとは?

DESCRIBEコマンドは、テーブルやビューの構造を確認するために使用されます。テーブルのカラム名、データ型、制約(NULL許可など)を一覧で表示してくれる便利なコマンドです。

使い方

DESCRIBE テーブル名;

例:employeesテーブルの構造を確認

DESCRIBE employees;

解説

  • Name: テーブルのカラム名が表示されます。
  • Null?: NOT NULL制約がある場合、NULL値が許可されないことを示します。
  • Type: 各カラムのデータ型が表示されます。

DESCRIBEは、テーブル構造を素早く確認したいときに非常に便利なコマンドです。テーブルの内容を理解するための第一歩として、ぜひ活用してください。

【実行例】

SQL> CREATE TABLE employees (
2 employee_id NUMBER(5) PRIMARY KEY,
3 first_name VARCHAR2(50),
4 last_name VARCHAR2(50) NOT NULL,
5 hire_date DATE,
6 salary NUMBER(8, 2)
7 );

表が作成されました。

SQL> describe employees
名前         NULL?      型
ーーーーーーーーーー ーーーーーーー ーーーーーーーーーーーーーーー
EMPLOYEE_ID     NOT NULL   NUMBER(5)
FIRST_NAME              VARCHAR2(50)
LAST_NAME      NOT NULL   VARCHAR2(50)
HIRE_DATE              DATE
SALARY                NUMBER(8,2)

SQL>


[参考]
ユーザーズ・ガイドおよびリファレンス – 12.19 DESCRIBE


3. データの挿入(INSERT)

次に、作成したテーブルにデータを挿入する方法を見てみましょう。データを追加するには、INSERT INTO文を使用します。

INSERT INTO文の構文

INSERT INTO テーブル名 (カラム1, カラム2, ...) 
VALUES (値1, 値2, ...);

※カラム=列

例:データの挿入

INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (1001, 'John', 'Doe', '2023-01-15', 5000.00);

一般ユーザーでINSERTをするには表領域の割り当て制限を行う必要があり、割り当てていない場合以下のようにINSERTが失敗します。

SQL> create user user1 identified by user1;

ユーザーが作成されました。

SQL> grant create session,create table to user1;

権限付与が成功しました。

SQL> conn user1/user1
接続されました。
SQL> create table table1 (no number);

表が作成されました。

SQL> insert into table1 values(1);
insert into table1 values(1)
*
行1でエラーが発生しました。:
ORA-01950: 表領域’USERS’に対する権限がありません ★INSERTできない

SQL> conn / as sysdba
接続されました。
SQL> alter user user1 quota 10m on users; ★USERS表領域に10mの割り当て

ユーザーが変更されました。

SQL> conn user1/user1
接続されました。
SQL> insert into table1 values(1);

1行が作成されました。 ★insertできる

※USERS表領域はデフォルトで作成されている表や索引を作成できる表領域。

解説

  • employee_id: 1001は社員ID。
  • first_name, last_name: “John”と”Doe”が名前と名字です。
  • hire_date: ‘2023-01-15’は日付形式での入社日。
  • salary: 5000.00は給与を表します。

【実行例】

SQL> INSERT INTO employees (employee_id, first_name, last_name, hire_date, salar y)
2 VALUES (1001, ‘John’, ‘Doe’, ‘2023-01-15’, 5000.00);

1行が作成されました。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   5000

SQL>


また、構成されている列のすべてに挿入する場合は、カラム名を省略することも可能です。
その場合は以下のような構文となります。

INSERT INTO テーブル名 VALUES (値1, 値2, ...);

【実行例】

SQL> INSERT INTO employees VALUES (1001, ‘John’, ‘Doe’, ‘2023-01-15’, 5000.00);

1行が作成されました。 ★カラム名を省略しても挿入できた

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME        HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe            23-01-15   5000

SQL>


ちなみにカラム名を省略し、一部の列に挿入しない場合は以下のようにエラーとなります。

【実行例】

SQL> INSERT INTO employees VALUES (1001, ‘John’, ‘Doe’, ‘2023-01-15’);
INSERT INTO employees VALUES (1001, ‘John’, ‘Doe’, ‘2023-01-15’)
*
行1でエラーが発生しました。:
ORA-00947: 値の個数が不足しています。


SQL>


もし、一部の列に値を挿入しない場合は “NULL” を挿入する方法もあります。

“NULL” は、データベースにおいて「値が存在しない状態」を示す特別な値です
つまり、NULLは「空」や「欠落」を意味し、ゼロや空白とは異なります。
以下のように値が入っていない行は空白ではなく、”NULL” が挿入されています。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME        HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーーーーーー ーーーー
    1001 John                 ★NULL 23-01-15    5000

SQL>

複数行のデータを挿入する

複数行のデータを挿入する際は以下のような構文になります。

INSERT ALL
INTO employees values (1002, 'Jane', 'Smith', '2023-03-01', 4500.00)
INTO employees values (1003, 'Alice', 'Brown', '2023-05-20', 5500.00)
select * from dual;

【実行例】

SQL> INSERT ALL
2 INTO employees values (1002, ‘Jane’, ‘Smith’, ‘2023-03-01’, 4500.00)
3 INTO employees values (1003, ‘Alice’, ‘Brown’, ‘2023-05-20’, 5500.00)
4 select * from dual; 

2行が作成されました。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   5000
    1002 Jane        Smith          23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL>


[参考]
SQL言語リファレンス – INSERT


4. データの更新(UPDATE)

既に挿入されたデータを変更したい場合は、UPDATE文を使用します。特定の行のデータを変更するために、WHERE句で条件を指定します。

UPDATE文の構文

UPDATE テーブル名
SET カラム名 = 新しい値
WHERE 条件;

例:給与の更新

UPDATE employees
SET salary = 6000.00
WHERE employee_id = 1001;

解説

  • このSQL文は、社員IDが1001である社員の給与を6000.00に更新します。
  • WHERE句がないと、テーブル内のすべての行が更新されてしまうため、注意が必要です。

【実行例】

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   5000
    1002 Jane        Smith          23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL> UPDATE employees
2 SET salary = 6000.00
3 WHERE employee_id = 1001;

1行が更新されました。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   6000 ★
    1002 Jane        Smith          23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL>

UPDATEをWHERE指定せずに実行した場合は全ての行が更新されてしまう

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   5000
    1002 Jane        Smith          23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL> UPDATE employees
2 SET salary = 6000.00; ★WHEREで行を絞らない

3行が更新されました。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   6000 ★
    1002 Jane        Smith          23-03-01   6000 ★
    1003 Alice        Brown         23-05-20   6000 ★

SQL>

★上記のようにWHEREで更新する行を絞り込まないとすべての行が更新されてしまいます。
 そのため、UPDATEを実行する時はWHEREで更新する行を絞るようにしましょう。


[参考]
SQL言語リファレンス – UPDATE


5. データの削除(DELETE)

不要になったデータを削除するには、DELETE文を使用します。こちらもWHERE句を使って特定の行を削除します。

DELETE文の構文

DELETE FROM テーブル名
WHERE 条件;

例:特定の社員の削除

DELETE FROM employees
WHERE employee_id = 1001;

解説

  • このSQL文は、社員IDが1001である行をテーブルから削除します。
  • DELETE文でもWHERE句を使わない場合、テーブル内の全データが削除されるので、特定の行を削除する際には必ず条件を指定しましょう。

【実行例】

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   6000
    1002 Jane        Smith         23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL> DELETE FROM employees
2 WHERE employee_id = 1001;

1行が削除されました。

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1002 Jane        Smith         23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL>

DELETEをWHERE指定せずに実行した場合は全ての行が削除されてしまう

SQL> select * from employees;

EMPLOYEE_ID  FIRST_NAME     LAST_NAME    HIRE_DAT  SALARY
ーーーーーー ーーーーーーーーー ーーーーーーーーーーーー ーーーーー ーーーー
    1001 John        Doe          23-01-15   5000
    1002 Jane        Smith          23-03-01   4500
    1003 Alice        Brown         23-05-20   5500

SQL> delete from employees; ★WHEREで削除する行を絞らない

3行が削除されました。

SQL> select * from employees;

レコードが選択されませんでした。 ★すべての行が削除された

SQL>

★上記のようにWHEREで更新する行を絞り込まないとすべての行が削除されてしまいます。
 そのため、DELETEを実行する時はWHEREで削除する行を絞るようにしましょう。


[参考]
SQL言語リファレンス – DELETE


6. データの表示(SELECT)

ここまでで、テーブルの作成、データの挿入、更新、削除を学びましたが、実際にデータが正しく操作されているかを確認するために、データを表示させる必要があります。データを取得するためには、SELECT文を使用します。

SELECT文の構文

SELECT カラム名1, カラム名2, ...
FROM テーブル名
WHERE 条件;

例:全データの取得

SELECT * FROM employees;

解説

  • *はすべてのカラムを表示することを意味します。このSQL文は、employeesテーブルのすべてのデータを表示します。

例:特定のデータの取得

SELECT first_name, last_name, salary
FROM employees
WHERE salary > 5000.00;

解説

  • このSQL文は、給与が5000.00より高い社員の名前と給与を表示します。


[参考]SELECT文については以下もご確認ください。


7. 実際に使ってみよう

ここまで紹介した操作は、Oracleデータベースで頻繁に使用される基本的な操作です。これらを組み合わせて、データベースの作成、データの管理を行うことができます。

まとめ

  1. 表の作成: CREATE TABLE文を使って新しいテーブルを作成する。
  2. データの挿入: INSERT INTO文でテーブルにデータを追加する。
  3. データの更新: UPDATE文を使って既存のデータを変更する。
  4. データの削除: DELETE文で不要なデータを削除する。
  5. データの確認: SELECT文を使ってデータを表示する。

Oracle SQLの基本操作をマスターすれば、データの管理や分析がスムーズに行えます。まずは簡単なテーブルを作成し、データを操作する練習から始めてみましょう!


この記事を通じて、Oracle SQLの基本的な操作について学ぶことができました。次のステップとして、トランザクション管理についても学んでいきましょう。

コメント

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