目次
OracleデータベースでのSQL入門
この記事ではOracleデータベースを使ったSQL入門について見ていきます。OracleデータベースでSQLを使ってテーブルを作成し、レコードの検索、登録、更新、削除ができるようになるまでを説明します。
Oracleデータベースとは
Oracle社が開発・販売しているリレーショナル・データベース管理システムです。Oracleデータベースの最新バージョンは本記事執筆時点(2020年06月02日)でOracle Database 19cです。
データベースとは
データベースとは情報を収集して、活用しやすいように蓄積したものを指します。例えばCSVファイルなどのテキストファイルでも情報を蓄積していればデータベースと呼べます。
リレーショナル・データベース管理システム
データベースには情報を保持する役割があります。そしてリレーショナル・データベースには情報をテーブルとよぶ表形式の単位で保管・管理し、そのテーブル同士に関連を持たせる役割があります。この関連を持たせる点がリレーショナルという名前の意味合いです。
例えばインターネットで買い物をした際に、その情報は受注テーブルとその詳細である受注明細テーブルを関連させて別々に、またお届け先の情報はお届け先テーブルで保管します。このテーブル同士を同じ注文者からの情報は後から分かるように紐付けて保管しています。
さらにリレーショナル・データベースの情報を登録したり更新したり、また処理を途中で取りやめたり制御するシステムをリレーショナル・データベース管理システムといいます。このシステムの1つがOracleデータベースです。
このリレーショナル・データベース管理システム(RDBMS)に情報を登録したり、検索したり指示できる言語をSQLといいます。
SQLの種類
SQLには主に3種類あります。DDL、DML、DCLです。一昔前はRDBMS毎に構文やオプションが微妙に違いました。現在はほぼ同じ構文で使えますが、まったく同一ではないということを覚えておきましょう。
この入門編では3種類のSQLがどのように分類されているか、主にDMLを中心に説明します。SQLを実行できるOracle環境がある方は実際に手を動かしてみてください。
DDL(Data Definition Language)
情報を定義する際に使用するSQLです。具体的には情報を保管するためのテーブルを作成するCREATE、テーブルを変更するALTER、テーブルを削除するDROPが該当します。
CREATE
CREATE構文を使うことでテーブルを作成することができます。多くのオプションがありますが、入門編ではテーブル名とカラム(名前、型、桁数、必須であるか)を指定する例をあげます。
商品を購入した情報を保持する受注テーブルを例に見ていきましょう。
1
2
3
4
5
6
7
|
-- 構文:CREATE TABLE [テーブル名] (カラム名 データ型 オプション,...)
CREATE TABLE JUCHU (
JUCHU_ID NUMBER(10) NOT NULL, --受注番号
KAIIN_ID NUMBER(10) NOT NULL, --会員番号
CREATE_DATE DATE, --作成日
CONSTRAINT PK1 PRIMARY KEY(JUCHU_ID)
);
|
ALTER
ALTER構文を使うことで定義を追加・変更することができます。ここではCREATE構文で例にした受注テーブルに更新日カラムを追加する例をあげます。
1
2
3
4
|
-- 構文:ALTER TABLE [テーブル名] ADD (カラム名 データ型 オプション,...)
ALTER TABLE JUCHU ADD (
UPDATE_DATE DATE, --更新日
);
|
DROP
DROP構文を使うことでテーブルを削除することができます。ここではCREATE構文で例にした受注テーブルを削除する例をあげます。
1
2
|
-- 構文:DROP TABLE [テーブル名]
DROP TABLE JUCHU;
|
DML(Data Manipulation Language)
情報を操作する際に使用するSQLです。具体的には情報を登録するINSERT、検索するSELECT、更新するUPDATE、削除するDELETEが該当します。
各SQLには様々なオプションがありますが入門編では特に使用する構文・オプションに絞って説明します。
INSERT(登録)
INSERT構文を使うことで情報を登録できます。この登録した情報1件1件をレコードといいます。1回のINSERTで1レコードを登録します。
1
2
3
|
-- 構文:INSERT INTO [テーブル名] (カラム名1, カラム名2, ...) VALUES (登録する値, 登録する値, ...)
--SYSDATEとは現在日付のことです。処理を行った日付を入れることができます。
INSERT INTO JUCHU (JUCHU_ID, KAIIN_ID, CREATE_DATE, UPDATE_DATE) VALUES (1, 1, SYSDATE, SYSDATE);
|
カラム名の指定順で「登録する値」が登録されます。また、すべてのカラムにデータを登録する場合、カラム名は記入必要する必要はありません。
SELECT(検索)
SELECT構文を使うことでテーブルからレコードを取得できます。
1
2
3
4
5
6
|
-- 構文:SELECT [取得するカラム名] FROM [テーブル名]
SELECT JUCHU_ID, KAIIN_ID, CREATE_DATE, UPDATE_DATE FROM JUCHU;
-- * を用いることで全カラムを指定することが可能
SELECT * FROM JUCHU;
-- 特定のカラムだけ取得することも可能
SELECT JUCHU_ID, KAIIN_ID FROM JUCHU;
|
しかし、これではJUCHUテーブルの全レコードを取得します。レコード数が少ないうちは問題ありませんが何万件、何十万件と増えるたびに結果取得までに多くの時間がかかるだけでなく、Oracleデータベースに負荷がかかります。そこで条件指定が大切です。
1
2
3
4
5
6
7
8
|
-- 構文:SELECT [取得するカラム名] FROM [テーブル名] WHERE [条件]
SELECT JUCHU_ID, KAIIN_ID FROM JUCHU WHERE JUCHU_ID = 1;
-- 大なり小なりの記号で範囲を指定することも可能
SELECT JUCHU_ID, KAIIN_ID FROM JUCHU WHERE KAIIN_ID < 2;
-- 複数の条件をAND(かつ)やOR(または)で指定することも可能
SELECT JUCHU_ID, KAIIN_ID FROM JUCHU WHERE JUCHU_ID = 1 AND KAIIN_ID = 2;
|
UPDATE(更新)
UPDATE構文を使うことでカラムの値を更新できます。
1
2
|
-- 構文:UPDATE [テーブル名] SET [カラム名] = [更新する値]
UPDATE JUCHU SET KAIIN_ID = 2, UPDATE_DATE = SYSDATE;
|
しかしWHERE句の条件なしではすべてのレコードを更新します。そこで基本的にはWHERE句の併用が基本です。
1
2
|
-- 構文:UPDATE [テーブル名] SET [カラム名] = [更新する値]
UPDATE JUCHU SET KAIIN_ID = 2, UPDATE_DATE = SYSDATE WHERE JUCHU_ID = 1;
|
DELETE(削除)
DELETE構文を使うことでレコードを削除できます。
1
2
|
-- 構文:DELETE FROM [テーブル名]
DELETE FROM JUCHU;
|
こちらもWHERE句の条件なしではすべてのレコードを削除します。そこで基本的にはWHERE句の併用が基本です。
1
2
|
-- 構文:DELETE FROM [テーブル名]
DELETE FROM JUCHU WHERE JUCHU_ID = 1;
|
DCL(Data Control Language)
情報操作を制御する際に使用するSQLです。具体的にはトランザクションを開始するBEGIN、確定するCOMMIT、取り消すROLLBACKが該当します。
ステップアップするためには必須の知識です。
BEGIN(トランザクションを開始)
まずトランザクションとは一連の処理のかたまりを指します。例えば、受注テーブルのレコードを1件更新し、次に受注明細テーブルのレコードを2件更新するような処理になります。
また、受注明細テーブル更新時にエラーが発生すると受注テーブルだけ更新されては不整合が発生します。
このような状況を発生させないために一箇所でもエラーになればそれまでの処理をすべてもとに戻せるようにする役割があります。
このトランザクションを開始させるSQLがBEGINです。
COMMIT(トランザクションを確定)
トランザクションを開始したら終わりを伝える必要があります。この終わりを伝える確定指示がCOMMITです。ちなみに使用するDBの設定によってデフォルトでオートコミット設定がONになっている場合、1SQLを実行するたびに自動でCOMMMIT処理がなされています。
ROLLBACK(トランザクションを取り消す)
トランザクションを開始した以降の処理をすべて取り消します。例えば先程の例のように途中でエラーが発生した場合に実行されることが多いです。当然ですがオートコミット設定がONになっている場合、ROLLBACK指示は意味をなしません。
SQLの入門を理解しよう!
いかがだったでしょうか。ここまででSQLの入門編としてテーブルの作成・定義更新・削除、またテーブルへのレコードの登録・検索・更新・削除を順に見ていきました。初めてSQLを学ぶ方への入門書として、また久しぶりだという方の参考になったでしょうか。
SQLにはまだまだ多くのオプションやできることがあります。この入門編を読み終わって興味がわきましたら、ぜひ次のステップにチャレンジしてみてください。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。