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