SQLのコマンド一覧を覚える方法とは?わかりやすい順で徹底解説!


SQLのコマンド一覧を知りたいなぁ・・・
SQLでどんなことができるかもっと知りたいなぁ・・・

SQLの基礎的な書き方がわかった後、何を学べばいいか悩む人がとても多いです。深く学ぼうとすると覚える範囲は多いですし、どんなことができるかSQLのコマンド一覧を知りたい人が多いのではないでしょうか。

こんにちは!フリーランスエンジニア兼テックライターのワキザカです。

この記事では、SQLのコマンド一覧をわかりやすい順に解説します!

入門編・応用編に分けて解説しているので、入門編から見て、わからないところから学んでいくのがおすすめです。

この記事はこんな人のために書きました。

  • SQLのコマンド一覧が知りたい人
  • SQLでどんなことができるのか知りたい人
  • SQLコマンドの書き方をもっと知りたい人
目次

SQLのコマンド一覧を覚える前に大枠を知ろう

SQLのコマンドをいきなり解説する前に、SQLの基礎について知っておきましょう。

SQLは、大きく分けて以下の3つの種類があります。

SQLの3つの種類

  • DDL
  • DML
  • トランザクション制御

それぞれ詳しく解説しますね。

DDL

DDLは、データベース・テーブルを操作するためのSQLの文法です。たとえば、以下のような書き方があります。

DDLのSQL文の例

  • CREATE文:データベース・テーブルの作成
  • ALTER文:データベース・テーブルの定義変更
  • DROP文:データベース・テーブルの削除

SQLを初めて使う時は、CREATE文でテーブルを作るところから始まります。基礎として覚えておくのがおすすめです。

DML

DMLは、レコードを操作するためのSQLの文法です。たとえば、以下のような書き方があります。

DMLのSQL文の例

  • SELECT文:レコード検索
  • INSERT文:レコード挿入
  • UPDATE文:レコード更新
  • DELETE文:レコード削除

テーブルにレコードを挿入してデータを作ったり、レコードを検索して知りたい情報を表示することができます。テーブル作成後はDML操作が基本となるので、それぞれの意味を覚えておくのがおすすめです!

トランザクション制御

トランザクション制御は、データの更新結果を途中で確認することができる仕組みです。

誤ってデータの削除・更新をしてしまうと、事故につながりますよね。事前にSQLで更新結果を確認できれば、事故が起こるのを防ぐことができます。

以下のように「BEGIN;」~「ROLLBACK;」で囲うことで、元のデータを更新確定せずに、値を確認することができます。

トランザクション制御するSQLの例

-- トランザクション制御開始
BEGIN;

-- users_listテーブルの、idが1のnameを更新するUPDATE文
UPDATE
  users_list
SET
  name = '侍1_Ver2'
WHERE
  id = 1;

-- ①users_listテーブルのデータ確認用のSELECT文
SELECT
  *
FROM
  users_list
WHERE
  id = 1;

-- 処理を元の状態に戻す
ROLLBACK;

-- ②users_listテーブルのデータを再確認するSELECT文
SELECT
  *
FROM
  users_list
WHERE
  id = 1;

実行結果(ROLLBACK前のusers_listのデータ):

| id | name | age | created_at | updated_at | 
| ---: | --- | ---: | --- | --- | 
| 1 | 侍1_Ver2 | 18 | 2019-07-01 | 2019-07-26 | 

実行結果(ROLLBACK後のusers_listのデータ):

| id | name | age | created_at | updated_at | 
| ---: | --- | ---: | --- | --- | 
| 1 | 侍1 | 18 | 2019-07-01 | 2019-07-26 | 

「ROLLBACK;」前のデータはUPDATE文で更新した結果が、SELECT文の結果に反映されています。「ROLLBACK;」以降のSELECT文の結果では、UPDATE文が反映されていないですよね。

このように、更新結果を戻すことができるのです。

ちなみに、「ROLLBACK;」を「COMMIT;」に変えると、データ更新を確定することができます。「BEGIN;」~「ROLLBAK;」で囲うのを基本としつつ、確認が取れたら「COMMIT;」に変えて再実行するのがおすすめです。

入門編:SELECT文のSQLコマンドを使いこなせるようになろう

ここからは、SELECT文のSQLコマンドについて、以下4つに分けて解説します。

  • データ数を変えずに結果を変える方法
  • 検索条件を追加する方法
  • 条件によってデータを変える方法
  • 複数テーブルのデータを使う方法

それぞれ解説しますね。

データ数を変えずに結果を変える方法

まずは、データ数を変えずに結果を変える方法について解説します。

AS:結果の項目名を変える

まず、「AS句」について解説します。AS句を使うと、表示する列名を変えることができます。

たとえば、AS句がない場合は、次のようにテーブルで定義されている列名が表示されてしまいます。

AS句を使わない場合のSQL:

SELECT
  *
FROM
  users;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 4 | 侍4 | 27 | 
| 5 | 侍5 | 21 | 

列名が、id、name、ageになっていますよね。簡単な単語なのでわかりやすいかもしれませんが、日本語になっていたほうが伝わりやすいはずです。

次のように書くことで、表示名を変えることができます。

AS句を加えたSQL:

SELECT 
  id as 'ID',
  name as '名前',
  age as '年齢'
FROM 
  users;
| ID | 名前 | 年齢 | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 4 | 侍4 | 27 | 
| 5 | 侍5 | 21 | 

列の表示名が、ID、名前、年齢になったのでわかりやすくなりましたよね。このように、表示名を変えることができます。

取得した結果をそのままアプリ画面で使う場合も多いので、覚えておくのがおすすめです。

ORDER BY:ソート

次に、「ORDERT BY」について解説します。「ORDER BY」を使うと、データの順序を変えることができます。

たとえば、先ほどのデータは以下のように表示されていました。

AS句で使ったサンプルのデータ:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 4 | 侍4 | 27 | 
| 5 | 侍5 | 21 | 

これを、age(年齢)が若い順に表示するときは、次のように書きます。

ORDER BYでageを昇順に変更するSQL:

SELECT 
  *
FROM
  users
ORDER BY
  age ASC;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 5 | 侍5 | 21 | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 4 | 侍4 | 27 | 

age(年齢)を昇順でソートされていますよね。このように、簡単に順序を並び替えることができます。

ORDER BYの詳しい使い方は以下で解説しているので、深く知りたい方は見てみてくださいね!

SQLで並び替え!ORDER BYを基礎から応用まで学ぼう!
更新日:2024年3月29日

検索条件を追加する方法

次に、検索条件を追加する方法について解説します。

DISTINCT:重複削除

まず、「DISTINCT」について解説します。DISTINCTを使うと、重複したデータを非表示にすることができます。

今回は以下のテーブルがあることを前提に、解説を進めていきますね。


部署所属ユーザ一覧(dept_users)のデータ

上記データから、重複なしの「部署コード」「部署名称」を取得する場合は、次のように書きます。

DISTINCTで重複を除いたSQL:

SELECT 
  DISTINCT dept_cd,
  dept_name 
FROM
  dept_users;

実行結果:

| dept_cd | dept_name | 
| --- | --- | 
| A0001 | 第一開発部 | 
| A0002 | 第二開発部 | 

dept_cd(部署コード)、dept_name(部署名称)が重複なしで取得できていますよね。重複なしでデータ取得するケースはよくあるので、覚えておくのがおすすめです。

DISTINCTのさらに詳しい使い方は以下で解説しています。もっと深く知りたい方は、ぜひ見てみてくださいね。

【SQL入門】DISTINCTで重複行をまとめる方法をわかりやすく解説
更新日:2024年3月29日

LIKE:あいまい検索

次に、「LIKE」について解説します。「LIKE」を使うと、あいまい検索をすることができます。


ユーザ一覧テーブル

たとえば、上記のユーザ一覧テーブルの名前に、「太郎」が含まれているデータを調べることができるのです。

具体的には、以下のようにSQLを書きます。

LIKEを使ってあいまい検索するSQL:

SELECT 
  *
FROM
  users
WHERE
  name LIKE '%太郎%';

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍太郎1 | 22 | 
| 2 | 侍太郎2 | 23 | 
| 3 | 侍太郎3 | 25 | 

name(名前)に、「太郎」が含まれているデータのみ表示されていますよね。このように、一部の文字を含むデータを検索することができます。

LIKEの詳しい使い方については、以下で解説しています。大文字・小文字を判別する方法についても触れているので、LIKEをもっと使いこなしたい方は、ぜひ見てみてくださいね。

【SQL】意外と簡単!これならわかるLIKE句でのあいまい検索
更新日:2024年3月29日

BETWEEN:A~Bの間の値を検索

次は、「BETWEEN」について解説します。BETWEENは、「A~Bの間の値」を条件に指定することができる方法です。


ユーザ一覧テーブル

たとえば、上記のユーザ一覧テーブルの中でage(年齢)が23 ~ 27までの値のみ表示することができます。

具体的には、以下のようにSQLを書きます。

BETWEENを使ったSQL:

SELECT 
  *
FROM
  users
WHERE
  age BETWEEN 23 AND 27;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 2 | 侍太郎2 | 23 | 
| 3 | 侍太郎3 | 25 | 
| 4 | 侍1 | 27 | 

「BETWEEN A AND B」のようにA、Bの値を指定すると、上記のようにその間の値を条件にすることができます。

BETWEENの使い方については、以下でも詳しく解説しています。基礎的な使い方だけでなく「日付でも使えるの?」「文字列でも使えるの?」といった疑問にも答えているので、より詳しく知りたい方は見てみてくださいね。

【SQL】範囲指定ならコレで決まり!BETWEENでスマートに条件を絞ろう
更新日:2024年3月29日

AND / OR:複数条件を追加するときの書き方

次に、「AND / OR」条件の使い方について解説します。

WHEREの条件は、複数設定することができます。複数指定するときに、「条件1かつ条件2の時」と指定するか、「条件1または条件2の時」と指定するか決めるのが「AND」「OR」です。


ユーザ一覧テーブル

たとえば、上記のユーザ一覧テーブルから「名前に太郎を含む」かつ「年齢が23歳~25歳」で指定する場合は、次のようになります。

ANDを使ってWHEREに複数条件を入れたSQL:

SELECT 
  *
FROM
  users
WHERE
  name LIKE '%太郎%'
  AND age BETWEEN 23 AND 25;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 2 | 侍太郎2 | 23 | 
| 3 | 侍太郎3 | 25 | 

「名前に太郎を含む」かつ「年齢が23歳~25歳」のデータのみ表示されていますよね。仮にOR条件にすると、次のようになります。

SELECT 
  *
FROM
  users
WHERE
  name LIKE '%太郎%'
  OR age BETWEEN 23 AND 25;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍太郎1 | 22 | 
| 2 | 侍太郎2 | 23 | 
| 3 | 侍太郎3 | 25 | 

「名前に太郎を含む」データの時点で3件あるため、3件データが表示されています。このように、ANDとORは絞り込み方が変わるので、使い方を覚えておくのがおすすめです。

IN / NOT IN:複数含む・含まない

次に、「IN / NOT IN」条件の使い方について解説します。

「IN」は、複数の要素を条件に指定することができる方法です。age(年齢)が「23、25のとき」のようなイメージですね。

「NOT IN」はINの逆で、ageが「23、25以外のとき」のようなイメージです。

ageに23、25を含むときのSQLの書き方は、以下のとおりです。

IN句を使ったSQL:

SELECT 
  *
FROM
  users
WHERE
  age IN (23,25);
実行結果:
| id | name | age | 
| ---: | --- | ---: | 
| 2 | 侍太郎2 | 23 | 
| 3 | 侍太郎3 | 25 | 

ageが23、25のデータのみ表示されていますよね。AND条件で「age = 23」「age = 25」2つの条件を指定して書くこともできますが、1行で表現できた方がシンプルですよね。

使いこなすととても便利なので、使い方を覚えておくのがおすすめです。IN句の詳しい使い方については、以下で詳しく解説しています。興味がある方は、ぜひ参考にしてみてくださいね。

SQLでIN句を使おう!基本からサブクエリ活用方法まで一覧紹介
更新日:2024年3月1日

条件によってデータを変える方法

次に、条件によって表示するデータを変える方法について解説します。

CASE:検索結果によって変える

CASEは、値によって表示方法を変える時に使います。

たとえば、次のようなテスト結果一覧テーブルがあったとします。


テスト結果一覧テーブル

単純に点数を表示したいだけであれば全件表示すれば良いですが、点数に応じて以下のように表示を分けたいときにCASEを使います。

CASEを使って得点の表示を変える例

  • 80点以上の場合:合格(優秀)
  • 31点 ~ 79点の場合:合格(普通)
  • 30点以下:赤点

具体的には、以下のようにSQLを書きます。

CASEを使ったSQL:

SELECT
  id,
  point,
  CASE
    WHEN 80 <= point THEN '合格(優秀)'
    WHEN 31 < point AND point < 80 THEN '合格(普通)'
    WHEN point <= 30 THEN '赤点'
  END as '結果'
FROM
  test_results;

実行結果:

| id | point | 結果 | 
| ---: | ---: | --- | 
| 1 | 66 | 合格(普通) | 
| 2 | 99 | 合格(優秀) | 
| 3 | 56 | 合格(普通) | 
| 4 | 44 | 合格(普通) | 
| 5 | 20 | 赤点 | 

結果の列に、合格(優秀)、合格(普通)、赤点などが表示されていますよね。このように、テーブルのデータを使って、表示項目を追加したいときにとても便利です。

CASEについては以下でも詳しく解説しています。UPDATE文で使いこなすコツも解説しているので、興味がある方は見てみてくださいね!

【SQL】5分でわかるCASE式!SELECTもUPDATEも自在に条件分岐させよう
更新日:2024年3月29日

サブクエリ:別のクエリの結果で条件を作る

次に、「サブクエリ」の使い方を解説します。

サブクエリは、SELCT文で取得した結果を使って、別のSQL(SELECT文やUPDATE文など)を実行する書き方です。

たとえば、次のような2つのテーブルがあったとします。


部署所属ユーザ一覧・ユーザ一覧テーブル

部署所属ユーザ一覧テーブルから第一開発部のユーザIDを取得し、それを使ってユーザ一覧テーブルのデータを表示するようなケースで使います。具体的には、以下のようにSQLを書きます。

サブクエリでSELECT文を実行するSQL:

SELECT
  *
FROM
  users
WHERE
  id IN (
    SELECT
      id
    FROM
      dept_users
    WHERE
      dept_cd = 'A0001'
  );

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍太郎1 | 22 | 
| 2 | 侍太郎2 | 23 | 

まず、WHEREの条件の中で以下のSQLを実行しています。

SELECT
  id
FROM
  dept_users
WHERE
  dept_cd = 'A0001';

実行結果:

| id | 
| ---: | 
| 1 | 
| 2 | 

dept_cd(部署コード)がA0001のidを取得しています。このidを使って、「WHERE id IN SELECT文で取得したid」を条件にすることで、絞ったデータを表示しているのです。

少しわかりづらいかもしれませんが、サブクエリは「2つのSQLでできているだけ」です。そのため、以下の流れで作ると作りやすいのでおすすめです。

サブクエリを作るときのおすすめの流れ

  • 手順1:WHEREの条件に使うSELECT文だけを一旦作る
  • 手順2:大元のSELECT文をサブクエリなしで一旦作る
  • 手順3:手順1の結果を使って、手順2のWHERE句の条件を書き換える

1つずつ結果が正しくなることを確認してから、サブクエリ化できるので作りやすくなります。

複数テーブルのデータを使う方法

次に、複数テーブルのデータを表示する方法について解説します。

JOIN:テーブルを結合して使う

まず、JOINの使い方を解説しますね。

JOINは、複数テーブルをつなげてデータを取得することができる仕組みです。

たとえば、先ほどの例で使った次のようなテーブルがあったとします。


サンプルで使うテーブル一覧

このデータをつなげて、次のようにデータを表示するSQLを書いてみましょう。


SQLで取得したい情報

SQLの書き方は、次のとおりです。

JOINを使ったSQLの書き方:

SELECT
  dept_users.dept_cd,
  dept_users.dept_name,
  users.id,
  users.name
FROM
  users
INNER JOIN 
  dept_users
ON
  users.id = dept_users.id;

実行結果:

| dept_cd | dept_name | id | name | 
| --- | --- | ---: | --- | 
| A0001 | 第一開発部 | 1 | 侍太郎1 | 
| A0001 | 第一開発部 | 2 | 侍太郎2 | 
| A0002 | 第二開発部 | 3 | 侍太郎3 | 
| A0002 | 第二開発部 | 4 | 侍1 | 
| A0002 | 第二開発部 | 5 | 侍2 | 

2つのテーブルを結合して、表示できていますよね。「INNER JOIN 結合するテーブル ON 条件」で簡単に結合することができます。

注意点としては、SELECT直後の「テーブル名.列名」で指定しているところですね。

usersテーブル、dept_usersテーブルどちらも「id」の列がありますよね。そのため、ただ「id」だけを指定してしまうと「どっちのテーブルのidなの?」と理解できず、エラーになってしまいます。

どちらも同じデータにはなりますが、明確にどちらか指定する必要があるので注意しましょう。

JOINのさらに詳しい使い方は、以下で詳しく解説しています。興味がある方は、以下を見てみてくださいね。

【SQL】これで完璧テーブル結合!JOINの種類と使い方を一覧まとめ
更新日:2024年3月29日

UNION:結果をマージして使う

次に、UNIONの使い方を解説します。

JOINはテーブルを結合して表示しましたが、UNIONはSELECT文の結果を合体させる時に使います。

たとえば、次のような2つのテーブルがあったとします。


サンプルで使うテーブル

上記のように、列名が全く同じテーブルのときに検索結果を合体させることができます。具体的には、以下のようにSQLを書きます。

UNIONを使うSQL:

SELECT
  *,
  'dev_client_lists' AS 'テーブル名'
FROM
  dev_client_lists
UNION
SELECT
  *,
  'mkt_client_lists' AS 'テーブル名'
FROM
  mkt_client_lists;

実行結果:

| comp_cd | comp_name | sales_count | テーブル名 | 
| --- | --- | ---: | --- | 
| CP0001 | 株式会社A | 1 | dev_client_lists | 
| CP0002 | 株式会社B | 4 | dev_client_lists | 
| CP0003 | 株式会社C | 2 | dev_client_lists | 
| CP0004 | 株式会社D | 5 | dev_client_lists | 
| CP0005 | 株式会社E | 8 | dev_client_lists | 
| CP0101 | 株式会社AA | 11 | mkt_client_lists | 
| CP0102 | 株式会社BA | 15 | mkt_client_lists | 
| CP0103 | 株式会社CA | 13 | mkt_client_lists | 
| CP0104 | 株式会社DA | 14 | mkt_client_lists | 
| CP0105 | 株式会社EA | 16 | mkt_client_lists | 

2つのSELECT文の結果をつなげて表示できていますよね。複数の条件でとってきたデータを、同じ列に整えてUNIONで繋げるケースはよくあります。

UNIONの詳しい使い方・UNION ALLとの違いについては以下で詳しく解説しています。さらに深く知りたい方は、ぜひ見てみてくださいね。

【SQL】結果の統合はUNIONで!だれでもわかるUNION解説!
更新日:2024年3月1日

応用編:他のDMLのSQLコマンドを覚えよう

SELECT文の使い方を覚えたら、他のDMLで応用する方法を覚えましょう。

ここまで解説した方法はUPDATE文、INSERT文、DELETE文などでも使うことができます。UPDATE文を使ったサンプルを解説しますね。

「条件によってデータを変える方法」で解説した、サブクエリを使ったデータ更新について解説します。SELECT文は、以下のようになっていました。

SELECT文のSQL:

SELECT
  *
FROM
  users
WHERE
  id IN (
       SELECT
      id
    FROM
      dept_users
    WHERE
      dept_cd = 'A0001'
  );

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍太郎1 | 22 | 
| 2 | 侍太郎2 | 23 | 

SELECT文の結果を使って、SELECT文でデータを取得するSQLでしたね。これを、SELECT文の結果を使って、UPDATE文でデータ更新するサンプルに書き換えてみます。

UPDATE文でサブクエリを置き換えたSQL:

UPDATE
  users
SET
  name = 'サブクエリで更新'
WHERE
  id IN (
       SELECT
      id
    FROM
      dept_users
    WHERE
      dept_cd = 'A0001'
  );

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | サブクエリで更新 | 22 | 
| 2 | サブクエリで更新 | 23 | 
| 3 | 侍太郎3 | 25 | 
| 4 | 侍1 | 27 | 
| 5 | 侍2 | 21 | 

このように、UPDATEに置き換えることも容易です。サブクエリ以外にも、WHEREで指定した条件を使うことができます。

「BEGIN;」~「ROLLBACK;」で囲ってデータ書き換えしないようにしつつ、条件式を使って試してみるのがおすすめです。

ちなみに、UPDATE文、INSERT文、DELETE文の詳細な使い方は以下で解説しています。よく使う条件の書き方も解説しているので、見ながらSQLを書くのがおすすめです!


【SQL】これで完璧!UPDATE文の重要テクニックを一覧まとめ
更新日:2024年3月1日

【SQL】1分でわかるDELETEでのデータ削除方法!安全に削除するには?
更新日:2024年3月1日

まとめ

今回は、SQLの基礎・コマンド一覧について解説しました。

SQLは条件を絞ってデータを取得する方法を覚えれば、あとは更新に活かしていくだけです。

入門編からでいいので、ぜひSQLのコマンドを覚えていって下さいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次