【SQL】SELECTーDISTINCT(重複レコードの除外)を1分で解説

Database

SQLのSELECT文で用いられるDISTINCTの意味と使い方をわかりやすく1分で解説します。

参考 SQLとは?

DISTINCTはSELECTした結果から "重複するレコードを除外する" オプションです。

このページではDISTINCTの構文ルールや利用方法の注意点を解説します。難しい内容ではないので1分ほどでマスターできます。

このページで学べる内容
  • DISTINCTの使い方:構文ルール
  • DISTINCTで複数のカラムを指定する場合
  • DISTINCTの注意点

プログラマー/システムエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

このページでは、SELECT文の基本を理解している方向けの開設ページです。

SELECT文の基本を1から学びたい(復習しておきたい)という方は初めに以下の記事をご覧下さい。

スポンサーリンク

SELECT:DISTINCTの構文ルール

SELECT DISTINCT (カラム名)FROM (テーブル名);

DISTINCTはSELECT句で指定するカラム名の前に記述します。

以下のテーブルから、"Department" 列を重複を除外したい場合のサンプルコードがこちら。

SELECT DISTINCT Department 
  FROM MemberList;

"Department" 列の重複が削除され、以下の結果が得られます。

画像に alt 属性が指定されていません。ファイル名: image-14.png
DISTINCTの実行結果

もし、DISTINCTを用いずに単純にSELECTした場合は以下の結果が得られます。

SELECT Department 
  FROM MemberList;

NULLも1種類としてカウント

DISTINCTを用いた場合はNULL値も1種類のデータとしてカウントされます。

例えば、どこにも所属していない社員がいるような場合。

この場合、DISTINCTを用いるとNULLも消えずに選択されます。

SELECT DISTINCT Department 
  FROM MemberList;
DISTINCT:NULLが含まれる場合の実行結果

NULLを出力したくない場合は、WHERE句でNULLを除外するように指定しましょう。

DISTINCTで複数のカラムを指定する場合

DISTINCTは以下のように複数のカラムを指定することも可能です。

SELECT DISTINCT Name, Department 
  FROM MemberList;

複数のカラムを指定する場合は、指定したカラムの組み合わせがすべて一意に決まるように重複が除かれます。

以上のように、Name列が "山田" かつDepartment列が "営業部" のように、組み合わせの結果が重複しているものが削除されるという点を押さえておきましょう。

初心者にとっては少しだけ難しいかもしれませんが、これだけ覚えればDISTINCTは完璧です。

DISTINCT は先頭のカラムの前にしか置けない

DISTINCTは先頭のカラムの前にしか記述することができません。

例えば、これはNG例。

SELECT Number, DISTINCT Department 
  FROM MemberList;

Department列の重複だけを削除したいと考えるとこのような使い方をしがちですが、これはSQLの構文ルール違反です。よくあるミスの1つです。

SELECT DISTINCTのまとめ
  • DISTINCTはSELECTした結果から "重複するレコードを除外する" オプション
SELECT DISTINCT (カラム名)FROM (テーブル名);

サンプルコード

-- テーブルの作成
CREATE TABLE employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    job_title VARCHAR(255)
);

-- レコードの挿入
INSERT INTO employees (id, first_name, last_name, job_title)
VALUES (1, 'John', 'Doe', 'Software Engineer');

INSERT INTO employees (id, first_name, last_name, job_title)
VALUES (2, 'Jane', 'Smith', 'Software Engineer');

INSERT INTO employees (id, first_name, last_name, job_title)
VALUES (3, 'Bob', 'Johnson', 'Project Manager');

INSERT INTO employees (id, first_name, last_name, job_title)
VALUES (4, 'Alice', 'Martin', 'Data Analyst');

INSERT INTO employees (id, first_name, last_name, job_title)
VALUES (5, 'Charlie', 'Brown', 'Data Analyst');

-- SELECT DISTINCT
SELECT DISTINCT job_title
FROM employees;

/* 結果
job_title
------------------
Software Engineer
Project Manager
Data Analyst

重複するjob_titleが取り除かれ一意のjob_titleのみが表示される
*/

参考 CREATE TABLE / INSERT

SQLを1から学習したい方は

この記事でSELECT DISTINCTの解説を楽しんでいただけましたら、ぜひ以下の記事をチェックしてみてください!

初心者から上級者まで、段階的に学べるカリキュラムで、短期間でSQLスキルを磨くことができます。さらなるステップアップを目指すあなたに最適なガイドです。

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    アウトプットは「最強のインプット」である!
  2. 備忘:忘れたとしても後から見返せるように。
    未来の自分への「お手紙」を書いています。
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    あなたの知識は誰かにとっての「価値ある情報」です。

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました