前回は、社内システムの裏側で動いている「データベース」と「RDBMS」の基礎知識について解説しました。
今回は一歩踏み込んで、データベースを直接操作するための言語「SQL(エスキューエル)」を実際に書いてみましょう! 情シス業務では、データの調査依頼やちょっとした集計作業などでSQLを書く機会が頻繁にありますし、ほぼ全てのシステムに登場する言語です。
今回は、手元の環境(PostgreSQLやMySQL、あるいはブラウザ上のSQL実行環境など)にそのままコピペして試せる実践的な内容です。「社員マスタ」と「部署マスタ」を作り、一連の操作を体験してみましょう。
テーブルを作る(CREATE)
まずは、データを入れるための「箱(表)」を作ります。 今回は、部署の情報を管理する「部署マスタ(departments)」と、社員の情報を管理する「社員マスタ(employees)」の2つを作成します。
以下のSQLを実行してみてください。
-- 部署マスタの作成
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(50) NOT NULL
);
-- 社員マスタの作成
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_id INT
);
CREATE TABLE:新しいテーブルを作成する命令です。INTやVARCHARはデータの「型」を表します。RDMSによって表現が異なるのでご注意ください。PRIMARY KEY(主キー)は、その行を特定するための絶対に重複しないIDであることを示します。
データを入れる(INSERT)
空っぽのテーブルに、テスト用のデータを入れていきましょう。 INSERT INTO という命令を使います。
-- 部署マスタにデータを追加
INSERT INTO departments (dept_id, dept_name) VALUES
(1, '営業部'),
(2, '総務部'),
(3, '情報システム部');
-- 社員マスタにデータを追加
INSERT INTO employees (emp_id, emp_name, dept_id) VALUES
(101, '山田 太郎', 1),
(102, '佐藤 花子', 2),
(103, '鈴木 一郎', 3),
(104, '高橋 健太', 1);
これで、3つの部署と4名の社員のデータがデータベースに登録されました。社員マスタの dept_id には、部署マスタの dept_id と同じ数字が入っていることに注目してください。
データを検索・結合する(SELECT / JOIN)
データが入ったら、今度はそれを検索してみましょう。 データを取得するには SELECT を使います。
ただ社員一覧を見るだけでなく、「社員の名前と、その人が所属する部署名をセットで表示したい」というケースは実務で非常によくあります。ここで登場するのが、RDBの醍醐味である「結合(JOIN)」です。
-- 社員マスタと部署マスタを結合して検索
SELECT
employees.emp_id,
employees.emp_name,
departments.dept_name
FROM
employees
INNER JOIN
departments
ON
employees.dept_id = departments.dept_id;
これを実行すると、社員番号、社員名、そして「数字(dept_id)」ではなく「営業部」などの「部署名」が横に並んで表示されたはずです。 INNER JOIN を使い、両方のテーブルの dept_id が一致するものを紐付けて(リレーションを持たせて)表示しています。
データを更新する(UPDATE)
実務では、「社員が異動になった」「名前が変わった」といった理由でデータを書き換える必要があります。 その場合は UPDATE を使います。
例として、山田さん(emp_id: 101)が営業部(1)から情報システム部(3)へ異動になったと仮定して、データを更新してみましょう。
-- 山田太郎さんの部署を「情報システム部(3)」に更新
UPDATE employees
SET dept_id = 3
WHERE emp_id = 101;
-- 更新結果の確認
SELECT * FROM employees WHERE emp_id = 101;
【情シスとして超重要な注意点】 UPDATE を使うときは、必ず WHERE(条件)をつけてください。 もし WHERE句を書き忘れて実行すると、全社員の部署が情報システム部に書き換わってしまい、システム障害(大惨事)になります。
データを削除する(DELETE)
最後に、不要になったデータを削除する DELETE です。 (※実際の業務システムでは、履歴を残すために「退職フラグ」などを立てて画面から見えなくする「論理削除」が多いですが、ここでは基礎としてデータベースから完全に消す「物理削除」を学びます。)
例として、高橋さん(emp_id: 104)のデータを削除してみます。
-- 高橋健太さんのデータを削除
DELETE FROM employees
WHERE emp_id = 104;
-- 全件検索して削除されたか確認
SELECT * FROM employees;
ここでも UPDATE と同様、WHERE の付け忘れには細心の注意を払ってください。
まとめ:SQLの基本5大コマンドを制覇!
お疲れ様でした!今回は以下の基本コマンドを体験しました。
- CREATE(作る)
- INSERT(入れる)
- SELECT(探す・JOINでくっつける)
- UPDATE(更新する)
- DELETE(消す)
これらは総称して「CRUD(クラッド:Create, Read, Update, Delete)」と呼ばれ、あらゆる業務システムの根幹をなす処理です。
最初は呪文のように見えるかもしれませんが、実際に手を動かして結果を確認することで、少しずつパズルを解くような楽しさが分かってくると思います。情シスとしてシステム運用に関わるなら、この基礎を知っているだけでトラブル時の調査スピードが劇的に上がりますよ!
ぜひご自身の環境でも、色々なデータを入れたり結合したりして遊んでみてくださいね。
次回はRDBMSごとのSQLのちがいや、システムを設計するうえでの注意点について投稿します!


コメント