SQLでデータを制御する(CASE、LIMIT、ORDER BY、DISTINCT)〜便利な句の紹介#2〜

 2022.09.07  株式会社システムインテグレータ

今回は初心者訓練所#05として、前回に引き続き便利な句について紹介していきます。
SELECT文で抽出した結果の、表示制御や編集を行える便利な句について説明していきます。よく使われる句なので、是非、習得してください。

 

DISTINCT句の基本構文(重複を除外する)

SELECT文で取得したデータに同じ値(重複)が存在した場合は、除外して表示します。重複の判定はSELECT文で指定したカラムで判断されます。
カラムを複数指定した場合は、指定したカラムの値が全て重複している場合に、除外対象となります。

SELECT DISTINCT 項目X,・・・ FROM テーブルY

DISTINCT句の使用例

準備として、確認用のテーブルを作成してデータを挿入してみましょう。

create table tbl_employees (emp_code integer,emp_last_name text,emp_first_name text,kana text,gender text,birthday text,dept_code integer);
insert into tbl_employees values ('1','Horii','Taro','ホリイタロウ','M','1970-12-27','1');
insert into tbl_employees values ('2','Yamada','Taro','ヤマダタロウ','M','1981-09-01','2');
insert into tbl_employees values ('3','Kitajima','Runa','キタジマルナ','F','1981-11-30','3');
insert into tbl_employees values ('4','Yamada','Hanako','ヤマダハナコ','','1982-02-12','1');
insert into tbl_employees values ('5','Kitazawa','Aika','キタザワアイカ','F','1980-08-05','1');
insert into tbl_employees values ('6','Yamada','Taro','ヤマダタロウ','M','1979-03-16','2');

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜01

select文で登録内容を確認してみましょう。

select * from tbl_employees;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜02insert文で作成した6件のデータを確認できます。

それでは、DISTINCT句を使用して「emp_last_name」を取得してみましょう。

select DISTINCT emp_last_name from tbl_employees;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜03

「emp_last_name」が、「Yamada」のデータが3件ありましたが重複データは除外され1件のみ表示されています。

次に、「emp_first_name」も追加してSELECT文を実行してみましょう。

select DISTINCT emp_last_name,emp_first_name from tbl_employees;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜04

「emp_last_name」と「emp_first_name」の両方が同じデータ「Yamada」「Taro」のデータのみが重複データを除外して表示されています。

DISTINCT句の説明は以上になります。 

CASE句の基本構文(条件で分岐させる)

SELECT文で取得したカラムの値により、異なる値を返すことができます。
WHEN条件式の評価結果のうち最初に真となるときのTHEN式の評価結果を返します。WHEN条件式は複数指定可能で、どのWHEN条件式もTRUEではなかった場合、ELSE式の評価結果を返します。このとき、ELSE式が省略されている場合はNULLを返します。

SELECT
  CASE
    WHEN 条件式1 THEN 式1
    WHEN 条件式2 THEN 式2
    ELSE 式3
  END
FROM テーブルX

また、CASE句には以下の書式もあります。
CASE式の値がWHEN値との評価結果のうち最初に真となるときのTHEN式の評価結果を返します。WHEN値は複数指定可能で、どのWHEN値もTRUEではなかった場合、ELSE式の評価結果を返します。このとき、ELSE式が省略されている場合はNULLを返します。

SELECT
  CASE
    WHEN 値1 THEN 式1
    WHEN 値2 THEN 式2
    ELSE 式3
  END
FROM テーブルX

CASE句の使用例

先ほど使用したテーブル「tbl_employees」を使用して確認してみましょう。
SELECT文で取得した「gender」の値によって表示内容を変更してみましょう。「gender」の値が、「M」の場合は「男性」、「F」の場合は「女性」、それ以外の場合は「不明」と表示してみましょう。

select emp_last_name,emp_first_name,
  CASE
    WHEN gender = 'M' THEN '男性'
    WHEN gender = 'F' THEN '女性'
    ELSE '不明'
  END as gender
from tbl_employees;
 SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜05

「gender」の値により、表示内容が変更されていることが確認できます。CASE句にAS句を使用し別名に変更してSELECTの結果を見やすくしています。

次にもう1つの書式パターンとして紹介した、「gender」をCASEの式に設定した場合で試してみましょう。

select emp_last_name,emp_first_name,
  CASE gender
    WHEN 'M' THEN '男性'
    WHEN 'F' THEN '女性'
    ELSE '不明'
  END as gender
from tbl_employees;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜06

もちろん、結果は同じになりますが、CASEに式を記述するとWHENの式の冗長化がなくなりシンプルに記述することができます。

CASE句の説明は以上になります。 

LIMIT句の基本構文(取得する行数を指定する)

SELECT文の最後にLIMIT句を記述することで、指定した行数を取得することができます。
また、パラメータに開始位置を指定すると、先頭からではなく指定した開始位置からデータを取得することができます。

SELECT 項目X,・・・ FROM テーブルY LIMIT 行数
SELECT 項目X,・・・ FROM テーブルY LIMIT 開始位置,行数

LIMIT句の使用例

今迄と同様にテーブル「tbl_employees」を使用して確認してみましょう。
select文で再度、データを確認してみます。ORDR BY句を使用して「emp_code」の昇順で表示してみましょう。

select * from tbl_employees ORDER BY emp_code ASC;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜07

それでは、LIMIT句を使用してみましょう。上図と同様に「emp_code」の昇順で並べて取得したデータの、先頭から3件のデータを取得してみましょう。

select * from tbl_employees ORDER BY emp_code ASC LIMIT 3;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜08先頭から3件のデータのみ表示されています。

次に開始位置を指定して試してみましょう。
並び順を変更して「emp_code」の降順で並べて、開始位置3番目から3件のデータを取得してみましょう。

select * from tbl_employees ORDER BY emp_code DESC LIMIT 2,3;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜09

降順に並べて3番目の「emp_code=4」のデータから3件のデータが取得されています。開始位置が3番目から取得する場合は、開始位置のパラメータは3ではなく、1つ少ない2を指定することに注意してください。

LIMIT句の説明は以上になります。 

ORDER BY句の基本構文(データを並べ替える)

上記3つの句とは趣が違いますが、データの並べ替えに便利なORDER BY句を紹介します。
この句もよく使われますので、是非、覚えてください。
並べ替える項目と並び順(昇順、降順)を指定して、SELECT文で取得した結果の並べ替えに利用されます。並び順を指定しない場合は、昇順として並べ替えが行われます。並べ替える項目は複数指定可能で、記述した順に優先して並べ替えが行われます。
また、項目毎に昇順(ASC)または、降順(DESC)の指定が可能です。

SELECT 項目X,・・・ FROM テーブルY ORDER BY 項目Z [ASC|DESC]

ORDER BY句の使用例

LIMIT句で登場したORDER BY句について、今迄と同様にテーブル「tbl_employees」を使用して確認してみましょう。
それでは、はじめに「dept_code」の昇順で表示してみましょう。

select * from tbl_employees ORDER BY dept_code ASC;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜10

「dept_code」の昇順で表示されているのが、確認できます。

次に、「dept_code」の昇順、「emp_code」の降順で表示してみましょう。

select dept_code,emp_code,emp_last_name,emp_first_name,kana
from tbl_employees ORDER BY dept_code ASC ,emp_code DESC;

SQLの抽出結果を編集してみよう!〜便利な句の紹介#2〜11

「dept_code」の昇順で表示され、「dept_code」が同じデータは「emp_code」の降順で表示されていることが確認できます。
このように、ORDER BY句はSELECTした結果を並べ替えて、見易くするために便利な句なので、是非、活用してください。

ORDER BY句の説明は以上になります。

おすすめの学習コンテンツ

本記事を読み終わって、さらに学びたい方、次は問題にチャレンジしてみたい方には、以下の無料コンテンツをご用意しておりますので、ぜひ活用してみてください!

SQLiteについて
・本記事で使用したデータベース「SQLite」について解説する資料です。
 SQLiteとは?他のデータベースとの違いも解説

SQLの教科書
・一般的な解説から、実際にSQLを動かす操作イメージまで幅広く解説する資料です。
 「SQLの教科書」ビックデータ時代の必須科目

SQL無料トライアルテスト
・TOPSIC-SQLの無料トライアルテストをご受験していただけます。
 TOPSIC-SQL無料トライアルテスト

SQLコンテスト
・簡単な会員登録をするだけでSQLのオンラインコンテストに無料で参加できます。
    過去に開催されたコンテストの問題にもチャレンジできます。
 TOTOPSIC SQL CONTEST

SQL基礎解説YouTube
・「TOPSIC-SQL」を元にしたオンラインウェビナーです。
 SQL-BOOT CAMP #1 
 ビッグデータ時代の必須科目SQLを学ぶ「実戦で通用する武器を身につけよう!」

まとめ

本記事では、初心者訓練所の第5弾として、SELECT文で抽出した結果の制御や編集に便利な句について一部を紹介しました。また、よく使われるORDER BY句についても紹介させていただきました。今回紹介した句を利用して、SELECT文で抽出した結果が見易くなるようにチャレンジしてみてください。
それでは、次の初心者訓練所で更なるスキルアップを目指しましょう!

(株)システムインテグレータ 製品企画室 元鬼軍曹 久保 司


RELATED POST関連記事


RECENT POST「SQL‐BOOTCAMP」の最新記事


SQL‐BOOTCAMP

SQLのEXISTS句とサブクエリで存在チェック!

SQL‐BOOTCAMP

SQLの便利な関数(NULLIF、IIF)を使ってみよう!

SQL‐BOOTCAMP

SQLのNULLを扱う関数(IFNULL、COALESCE)を使ってみよう!

SQL‐BOOTCAMP

SQLの日付・時間関数(DATE、TIME、DATETIME、JULIANDAY、STRFTIME)を使ってみよう!

SQLでデータを制御する(CASE、LIMIT、ORDER BY、DISTINCT)〜便利な句の紹介#2〜

TOPSIC TOPへ