DMLの基本

DML(データ操作言語) でよく利用される SQLを操作してみましょう。SQL では以下のような予約語を組み合わせて記述します。

基本機能

SQLで最も重要な4つの基本機能があります。 Create(作成)、Read(読み込み)、Update(更新)、Delete(削除)で、これを CRUDといいます。

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

条件

データを検索するときに条件を指定しますが、以下のような構文があります。

  • WHERE
  • AND, OR, IN
  • LIKE

その他

その他、並び替えや件数制限、グループ化などの構文があります。

  • ORDER BY
  • LIMIT, OFFSET
  • GROUP BY

まずは SELECTWHERE などを使ってみましょう。

SELECT

SELECTはテーブルのレコードを選択します。

SELECT カラム名 FROM テーブル名;

すべてのカラム選択

すべてのカラムを選択するときは、*(アスタリスク) を指定します。ただ、テーブルのレコードが膨大になりメモリを大量に消費するときは利用を控えましょう。

SELECT * FROM テーブル名;

users のレコードをすべて選択

SELECT文で「users」テーブルのすべてのレコードを取得します。MySQLWorkbenchphpMyAdmin などのクライアントツールで確認してみましょう。

SQL
SELECT * FROM users;

カラムの指定

カラム名を個別指定するには、カラム名を , で区切ります。

SQL
SELECT カラム1, カラム2 FROM テーブル名;

氏名とEmailを選択

「users」から氏名とEmailを選択する例です。

SQL
SELECT name, email FROM users;

WHERE

WHERE でカラムの条件を指定します。

SELECT * FROM テーブル名 WHERE 条件;

比較演算子

条件でデータを比較するときに比較演算子を使います。

比較演算子 比較 意味
= A = B A と B が等しい
!= A != B A と B が等しくない
> A > B A が B より大きい
< A < B A が B より小さい
>= A >= B A が B より大きいか等しい(以上)
<= A <= B A が B より小さいか等しい(以下)

id カラムを指定

users.id = 1

SQL

users.id = 1のレコードを選択します。

SELECT * FROM users WHERE id = 1;

users.id >= 5

SQL

users.id >= 5がのレコードを選択します。

SELECT * FROM users WHERE id >= 5;

AND, OR, NOT, IN

WHERE の条件を ANDORIN で複数指定したり、NOT で全体を否定できます。

演算子 比較 意味
AND A AND B A と B 両方 true
OR A OR B A と B どちらかが true
IN IN(a, b, ...) a, b, ... のいずれかの値を含む
NOT NOT(A) A でない

AND検索

ANDWHEREの条件をすべて一致したときに選択されます。

SQL
WHERE 条件1 AND 条件2 ...

users.id >= 5かつusers.id < 10の条件でレコード検索します。

SQL
SELECT * FROM users WHERE id >= 5 AND id < 10;

OR検索

ORWHEREの条件をいずれか一致したときに選択されます。

SQL
WHERE 条件1 OR 条件2 ...

users.id = 5 または users.id = 10でレコード検索します。

SELECT * FROM users WHERE id = 5 OR id = 10;

IN検索

INOR を簡略して記述できます。

SQL
SELECT * FROM users WHERE id IN (5, 10);

LIKE

LIKEは、文字列のあいまいな検索をするときに利用します。あいまい検索では「前方一致」「後方一致」「部分一致」があり、%_ で文字列を検索します。

%

% は 0文字以上の文字列を検索します。

前方一致

SELECT * FROM テーブル名 WHERE カラム名 LIKE '文字%';

後方一致

SELECT * FROM テーブル名 WHERE カラム名 LIKE '%文字';

部分一致

SELECT * FROM テーブル名 WHERE カラム名 LIKE '%文字%';

users.email が「gmail.com」を含むデータを検索してみます。

SQL
SELECT * FROM users WHERE email LIKE '%gmail.com%';

_(アンダースコア)

_ は、1文字を部分検索します。氏名の2文字目が「田」のユーザを検索してみます。

SELECT * FROM users WHERE name LIKE '_田%';

ORDER BY

ORDER BYレコードの並び順を指定します。昇順はASC、降順は DESCです。

昇順
SELECT * FROM テーブル名 ORDER BY カラム名 ASC;
# または省略
SELECT * FROM テーブル名 ORDER BY カラム名;
降順
SELECT * FROM テーブル名 ORDER BY カラム名 DESC;

降順(大きい順)に並び替え

users.id を降順(大きい順)の DESC で並び替えます。

SELECT * FROM users ORDER BY id DESC;

LIMIT, OFFSET 句

LIMIT はレコードの件数、OFFSET はレコードの開始位置を指定します。

SELECT * FROM テーブル名 LIMIT 件数 OFFSET 開始位置;

LIMIT

LIMIT で選択するレコード件数を指定します。

LIMIT レコード数

最初の10件取得

最初の10件のレコードを取得するには、LIMIT を「10」とします。

SELECT * FROM users LIMIT 10;

OFFSET

OFFSET は指定したレコード件数をスキップします。

OFFSET レコード数

10件目から20件目選択

10件目から20件目まで選択するには、LIMIT を「10」OFFSET を「10」とします。

SQL
SELECT * FROM users LIMIT 10 OFFSET 10;