はじめに
SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBMS)との対話を行うための言語です。
SQLを使用することで、データの検索、挿入、更新、削除が容易に行えます。
今回はSQLでよく使用される基本的な構文について説明します。
これらを覚えておけば、一通りデータベースを操れるはずなので一緒に見ていきましょう。
SELECT
データベースからデータを取得するために使用される最も基本的な構文です。
SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE 条件;
<例>ユーザテーブルから年齢が18歳より大きいユーザの名前と年齢を表示
SELECT name, age
FROM users
WHERE age > 18;
INSERT
テーブルに新しいレコードを挿入するために使用されます。
INSERT INTO テーブル名 (カラム1, カラム2, ...)
VALUES (値1, 値2, ...);
<例>ユーザテーブルに"Taro","25"歳のユーザを挿入
INSERT INTO users (name, age)
VALUES ('Taro', 25);
UPDATE
既存のレコードを更新するために使用されます。
UPDATE テーブル名
SET カラム1 = 値1, カラム2 = 値2, ...
WHERE 条件;
<例>ユーザテーブルの"Taro"を"26"歳に更新
UPDATE users
SET age = 26
WHERE name = 'Taro';
DELETE
テーブルからレコードを削除するために使用されます。
DELETE FROM テーブル名
WHERE 条件;
<例>ユーザテーブルからnameが"Taro"のレコードを削除
DELETE FROM users
WHERE name = 'Taro';
CREATE TABLE
新しいテーブルを作成するために使用されます。
CREATE TABLE テーブル名 (
カラム1 データ型,
カラム2 データ型,
...
);
<例>id, name, ageという要素(カラム)を持ったユーザテーブルを新規作成
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);
ALTER TABLE
テーブル定義を変更する際に使われます。
ALTER TABLE テーブル名
ADD カラム名 データ型;
ALTER TABLE テーブル名
DROP COLUMN カラム名;
ALTER TABLE テーブル名
MODIFY カラム名 新データ型;
<例>ユーザテーブルにemailという要素(カラム)を追加
ALTER TABLE users
ADD email VARCHAR(100);
<例>ユーザテーブルからemailという要素(カラム)を削除
ALTER TABLE users
DROP COLUMN email;
<例>ユーザテーブルのデータ型をSMALLINT型に変更
ALTER TABLE users
MODIFY COLUMN age SMALLINT;
DROP TABLE
作成したテーブルを削除するために使用されます。
DROP TABLE テーブル名;
<例>ユーザテーブルの削除
DROP TABLE users;
JOIN
複数のテーブルから関連するデータを結合して取得するために使用されます。
よく使われるのは、内部結合のINNER JOIN、外部結合のLEFT JOIN, RIGHTJOINです。
<SELECT テーブル1.カラム1, テーブル2.カラム2, ...
FROM テーブル1
JOIN テーブル2
ON テーブル1.共通カラム = テーブル2.共通カラム;
<例>ユーザテーブルのnameとオーダーテーブルのorder_dateという要素を表示
SELECT users.name, orders.order_date
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
WHERE句
特定の条件を満たすレコードをフィルタリングするために使用されます。
SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE 条件;
<例>年齢が18より大きくて、名前の最初が"T"から始まるレコードのnameとageを表示
SELECT name, age
FROM users
WHERE age > 18 AND name LIKE 'T%';
GROUP BY句
特定のカラムの値に基づいてレコードをグループ化するために使用されます。
集計関数(SUM, COUNT, AVGなど)と一緒に使われることが多いです。
SELECT カラム1, 集計関数(カラム2)
FROM テーブル名
GROUP BY カラム1;
<例>ユーザテーブルを年齢ごとにグループ分けし、その年齢と人数を表示
SELECT age, COUNT(*)
FROM users
GROUP BY age;
HAVING句
GROUP BY句でグループ化された結果に対して条件を適用するために使用されます。
SELECT カラム1, 集計関数(カラム2)
FROM テーブル名
GROUP BY カラム1
HAVING 条件;
<例>ユーザテーブルを年齢ごとにグループ分けし、その人数が1よりも大きいグループの年齢と人数を表示
SELECT age, COUNT(*)
FROM users
GROUP BY age
HAVING COUNT(*) > 1;
ORDER BY句
結果セットを特定のカラムに基づいてソート(並び替え)するために使用されます。
デフォルトは昇順(ASC)ですが、降順(DESC)も指定できます。
SELECT カラム1, カラム2, ...
FROM テーブル名
ORDER BY カラム1 ASC|DESC;
<例>ユーザテーブルのname,ageをageの降順で表示
SELECT name, age
FROM users
ORDER BY age DESC;
サブクエリ
他のクエリ内に含まれるクエリです。
結果をフィルタリグ、計算、集計するために使用されます。
SELECT カラム1
FROM テーブル名
WHERE カラム2 = (SELECT カラム2 FROM テーブル名2 WHERE 条件);
<例>後半のselec文はユーザテーブルで最大年齢が結果として返される
→ユーザテーブルで最大年齢のレコードの年齢を表示
SELECT name
FROM users
WHERE age = (SELECT MAX(age) FROM users);
インデックス
検索の速度を向上させるためにテーブルのカラムに作成されるデータ構造です。
インデックスの作成と削除にはCREATE INDEXとDROP INDEXを使用します。
CREATE INDEX インデックス名
ON テーブル名 (カラム名);
DROP INDEX インデックス名;
<例>
CREATE INDEX idx_age
ON users (age);
DROP INDEX idx_age;
まとめ
SQLの基本的な構文を理解することで、複雑なSQL文も書けるようになり、データベースを効率的に操作することができます。
今回紹介した構文は、データ操作の基礎のみで他にも構文や応用点はたくさんあります。
まずは基本的なデータ操作から始め自信をつけていき、ゆくゆくは複数のテーブルを用いたり複雑なSQL文を書けるようになっていくと良いでしょう。
SQLについての概要を知りたい方はこちら。