はじめに
業務でoracleについて扱うことが出てきたので、初心者なりに書籍や実務で身につけたSQLについて記載してこうと思います。
データベース全般初心者なので簡単な内容から記載していきます。。
SQLとは
そもそもSQLとはなんぞやから始まり調べればすぐ出てくるんですが、データベースを操作するためのプログラミング言語であり、「Structured Query Language」から略されてSQLになったそうです。
データベースと言ってもリレーショナルデータベース(RDBMS)という種類のデータベースでSQLは使われるそうです。
SQLの基本命令
続いて、SQLの基本命令を見ていきます。
基本命令は4つで、以下になります。
・SELECT:データの抽出
・INSERT:データの挿入(追加)
・UPDATE:データの更新
・DELETE:データの削除
小難しい話は一旦置いておいて、今回はこの4つについて簡単に触れていきます。
例えばこんなテーブルがあったとします。
テーブル名:EX_TABLE
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| a0001 | Saito | Sales | 300000 |
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
SELECT:データの抽出
基本的な形として、
SELECT * FROM テーブル名;
となり、「*」はすべて(All)を意味するワイルドカードとなり、これを今回の例で当てはめると、
SELECT * FROM EX_TABLE;
となります。これを実行すると、以下のように当該テーブルに入ってるデータが出てきます。
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| a0001 | Saito | Sales | 300000 |
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
「*」を使わないで、必要な情報だけを取得するときはその列名(カラム名)を書けばよいです。
EMP_IDとNAMEを抽出したいときは、
SELECT EMP_ID, NAME FROM EX_TABLE;
とすれば,以下が出力されます。
| EMP_ID | NAME |
|---|---|
| a0001 | Saito |
| b0001 | Suzuhara |
| b0003 | Takada |
さらに、「SALARY」の項目で320000以上のデータだけ抽出したいときは「WHERE」を使って条件を絞って抽出できます。
SELECT * FROM EX_TABLE WHERE SALARY >=320000;
実行結果が以下です。
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
INSERT:データの挿入(追加)
INSERTはデータを追加することができます。
INSERT INTO テーブル名 VALUES ('値1', '値2', 値3・・・);
※数字以外の値を入れるときはシングルクォーテーション「'」で囲ってください。
これを今回の例で実施してみます。
新しく「b0004」「Tanaka」「IT」「500000」で追加してみます。
INSERT INTO EX_TABLE VALUES ('b0004', 'Tanaka', 'IT', 500000);
これを実行してエラーが起きず、「1件追加しました」のような文言がでればOKです。
この後に、もう1度「test1.sql」と同じ内容を実施すると、以下が出力され、データが追加されました。
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| a0001 | Saito | Sales | 300000 |
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
| b0004 | Tanaka | IT | 500000 |
UPDATE:データの更新
データのすでに入っているデータを更新もします。
UPDATE テーブル名 SET 列名(カラム名) = '変更後の値';
このままだと、列名(カラム名)の値をすべて更新してしまうので、「WHERE」で条件を付けて、更新したいデータのみが抽出できるようにします。
UPDATE テーブル名 SET 列名(カラム名) = '変更後の値' WHERE 条件;
としてあげます。今回の例で試してみます。
EMP_IDの「b0004」のSALARYを「550000」に更新したいときは以下のようにします。
UPDATE EX_TABLE SET SALARY = 550000 where EMP_ID = 'b0004';
これを実行してエラーが起きず、「1件更新しました」のような文言がでればOKです。
この後に、もう1度「test1.sql」と同じ内容を実施すると、以下が出力され、データが更新されました。
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| a0001 | Saito | Sales | 300000 |
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
| b0004 | Tanaka | IT | 550000 |
DELETE:データの削除
データの削除は文字通りいらなくなったデータを削除します。
DELETE FROM テーブル名 WHERE 条件;
「WHERE 条件」がなくても動作しますが、そのテーブル名の入ってるデータをすべて消すので、基本的には条件を付けます。
今回はEMP_IDの「a0001」の項目を削除してみます。
DELETE FROM EX_TABLE WHERE EMP_ID = 'a0001';
これを実行してエラーが起きず、「1件削除しました」のような文言がでればOKです。
この後に、もう1度「test1.sql」と同じ内容を実施すると、以下が出力され、データが削除されました。
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| b0001 | Suzuhara | IT | 450000 |
| b0003 | Takada | SE-Support | 320000 |
| b0004 | Tanaka | IT | 550000 |
おわりに
今回あげた4つの基本命令は、条件をさらに細かく指定したり、昇順降順にしたりするなど他にもできることはあります。
今回は一旦これくらいにしておきますが、また身についてきたら記事にできればと思います。
なお、今回は以下のオンライン上でSQLのコマンドを試せる環境で実施しました。
Oracle FreeSQL
参考文献
イラストで理解 SQL初めて入門 (著:朝井 淳/出版:技術評論社)