初めてのSQL
はじめに
「SQL」という用語はご存じでしょうか。本稿はSQLという言葉は耳にしたことはあるが具体的なことがよく分かっていない方に、分かりやすく伝えることを目的にしています。
SQLとは
SQLとは一言で表すとデータベースを操作するための言語であります。データベースに対して作成、削除、検索など様々な操作を行うことができます。本稿では特に検索(SELECT文)について詳しく紹介していきます。
そもそもデータベースとは
本稿で取り扱うデータベースとは大量のデータを追加、貯蓄、削除、検索しやすい形にしたもの程度に認識していただければ問題ありません。データベースにも種類があり、オープンソースであるPostgreSQLやMySQL、OracleのOracle Database、MicrosoftのMicrosoft SQL Serverなど様々なデータベースがあります。筆者もPostgreSQLを使用したことがあります。SQLを学習することで上記のデータベースを操作することが出来るようになります。
SQLのコマンド一覧
SQLは大きく分けて下記の3種類に分類することができます。
- データ定義言語
- データ操作言語
- データ制御言語
データ定義言語
データ定義言語はデータベースやテーブルのようなオブジェクトを操作する命令です。主な命令は下記の3種類になります。
- CREATE文
- ALTER文
- DROP文
CREATE文
テーブルを新たに作成するコマンドです。
例
CREATE TABLE 社員名簿
(
ID INTENGER(10)
氏名 CHAR(30)
);
ALTER文
テーブルの定義や名前を変更するコマンドです。
例
ALTER TABLE 社員名簿 ADD 年齢 INTENGER(3);
ALTER TABLE 社員名簿 RENAME 社員一覧;
DROP文
DROPコマンドはテーブル自体を削除してしまうことができます。なので使用する際は本当に削除してよいオブジェクトか注意が必要です。
例
DROP TABLE 社員名簿;
データ操作言語
データ定義言語でデータを入れるための枠を用意したので、ここからはデータ操作言語を使用して個々のデータに対して操作していきます。主な命令は下記の4種類になります。
- SELECT文
- INSERT文
- UPDATE文
- DELETE文
SELECT文
SELECT文はテーブルから任意のデータを抽出するコマンドです。SQLといえばSELECT文を思い浮かべられます。詳しい使い方は後ほど紹介していきます。
INSERT文
データを追加するコマンドです。
例
INSERT INTO 社員名簿 (ID, 氏名)
VALUES (1, '山田太郎');
UPDATE文
データを更新するコマンドです。
例
UPDATE 社員名簿
SET 氏名 = ‘鈴木次郎’
WHERE ID = 1;
DELETE文
データを削除するコマンドです。
例
DERETE FROM 社員名簿’
WHERE ID = 1;
データ制御言語
データ制御言語はデータベースに対するアクセス権を制御するための言語です。あまり使うことはありません。主な命令は下記の2種類になります。
- GRANT文
- REVOKE文
GRANT文
特定の利用者に権限を付与するコマンドです。
REVOKE文
特定の利用者の権限を剥奪するコマンドです。
SELECT文のあれこれ
先ほどは省略したSELECT文について詳しく紹介していきます。今回は下記のようなテーブルからデータを抽出していきます。
【社員名簿テーブル】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
2 | 鈴木次郎 | 38 | 開発 |
3 | 佐藤三郎 | 24 | インフラ |
4 | 田中四郎 | 18 | 開発 |
テーブルから全てのデータを抽出する場合
*は全てを選択する際に使用します。
SELECT *
FROM 社員名簿;
【抽出結果】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
2 | 鈴木次郎 | 38 | 開発 |
3 | 佐藤三郎 | 24 | インフラ |
4 | 田中四郎 | 18 | 開発 |
テーブルから全ての行の必要な列だけ抽出する場合
SELECT ID, 氏名
FROM 社員名簿;
【抽出結果】 | |
---|---|
ID | 氏名 |
1 | 山田太郎 |
2 | 鈴木次郎 |
3 | 佐藤三郎 |
4 | 田中四郎 |
テーブルから特定の条件の行を抽出する場合
条件を指定する際はWHERE句というものを使います。
SELECT *
FROM 社員名簿
WHERE 年齢 = 24;
【抽出結果】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
3 | 佐藤三郎 | 24 | インフラ |
AND演算子
複数の条件を指定する際はAND演算子というものを使います。
SELECT *
FROM 社員名簿
WHERE 年齢 = 24
AND 部署 = ‘開発’;
【抽出結果】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
LIKE演算子
指定した文字パターンに一致する行を取り出します。
SELECT *
FROM 社員名簿
WHERE 氏名 LIKE ‘%田%’;
【抽出結果(部分一致)】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
4 | 田中四郎 | 18 | 開発 |
SELECT *
FROM 社員名簿
WHERE 氏名 LIKE ‘田%’;
【抽出結果(前方一致)】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
4 | 田中四郎 | 18 | 開発 |
SELECT *
FROM 社員名簿
WHERE 氏名 LIKE ‘%田’;
【抽出結果(後方一致)】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
BETWEEN演算子
指定した範囲と一致する行を取り出します。
SELECT *
FROM 社員名簿
WHERE 年齢 BETWEEN 19 AND 24;
【抽出結果】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
1 | 山田太郎 | 24 | 開発 |
3 | 佐藤三郎 | 24 | インフラ |
ORDER BY句
特定の列の値で並べ替えることができます。デフォルトで昇順に並べ替えるので降順にした倍は「DESC」と指定する必要があります。
SELECT *
FROM 社員名簿
ORDER BY 年齢 DESC, ID DESC;
【抽出結果】 | |||
---|---|---|---|
ID | 氏名 | 年齢 | 部署 |
2 | 鈴木次郎 | 38 | 開発 |
3 | 佐藤三郎 | 24 | インフラ |
1 | 山田太郎 | 24 | 開発 |
4 | 田中四郎 | 18 | 開発 |