Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのselect文を使ったサンプルを集めました。

以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。

select文の基本的な使い方

select文の基本的な構文は以下の通りです。

select カラム名1,カラム名2…
from テーブル名
where 抽出条件

例えば、以下のSQLはemployees(社員テーブル)から、hire_date(雇用日)が1990/01/01以降のレコードの全てのカラム(*)を抽出するselect文になります。

SELECT * FROM `employees` where hire_date > '1990/01/01'

実行結果はこうなります。

select文のサンプルコード集

likeであいまい検索

where節の条件にlikeを使うと、%(パーセント)記号をワイルドカードにして、あいまい検索を行うことが可能です。

以下のSQLは、employees(社員テーブル)から、first_name(姓名の名)がYで始まるレコードを全て(*)抽出します。

SELECT * FROM `employees` where first_name like 'Y%'

実行結果はこうなります。

ワイルドカード文字は「%」以外に、「_」(アンダースコア)があり、任意の1文字にマッチします。

DBMSによっては、あいまい表現指定に正規表現が使えます。例えば、MySQLのばあいはREGEXP演算子を使って、正規表現が使用可能です。

【関連記事】
sql likeを使ったサンプル集 likeは本当に遅いのか?

重複行を除いて抽出する distinct

select文のカラム指定の前にdistinctをつけると、重複行を除外してデータを取得します。

以下のSQLは、社員テーブル(emplyees)のfirst_name(姓名の名)を重複を除いて抽出します。

SELECT distinct first_name FROM `employees`

実行結果はこうなります。

SQL実行結果

countと組み合わせてデータの種類(重複除外後にcount)を取得したり、group byでの置き換えも可能です。distinct使用時には、暗黙のソートが発生するので、order byと組み合わせる場合には注意しましょう。

【関連記事】
SQLで重複データを扱うサンプルコード集 カウント、集計、最新のみ抽出、重複禁止

件数をカウントするcount

select文のカラム名指定にcount()関数を使うと、取得データの件数を取得可能です。

以下のSQLは、employees(社員テーブル)のデータ件数を取得します。

SELECT count(*) FROM `employees`

count(カラム名)と指定した場合、対象カラム名がNULLの場合はカウントされません。

countは集計関数と呼ばれ、group byと組み合わせて使うことで、データ種類ごとの件数を取得することも可能です。

【関連記事】
SQLで重複データを扱うサンプルコード集 カウント、集計、最新のみ抽出、重複禁止

selectした取得行を別テーブルにinsertする

既存のテーブルにselectした取得行をinsertするには以下のようにします。

insert into コピー先テーブル名
select * from コピー元テーブル名

また、selectした行で新規にテーブルを作るには、以下のようにします。

create table コピー先テーブル名
select * from コピー元テーブル名

以下のSQLは、employees(社員テーブル)から、emp_no(社員番号)が20000以下、first_name(姓名の名)がAから始まる、gender(性別)が女性(F)のデータを抽出し、新たなテーブルemployees_copyを作成するSQLです。

create table employees_copy 
select * from employees 
where 	emp_no < 20000 
	and first_name like 'A%' 
	and gender = 'F'

実行するとemployees_copyという新しいテーブルができます。employees_copyの内容は以下のようになります。

case式を使ったselect文

case式を組み合わせると、select文に条件分岐を組み込むことが可能です。

以下のSQLは、departments(部署テーブル)から、dept_no(部署番号)と、日本語の部署名をcase文で判定して取得します。

日本語の部署名は、dept_name(部署名)がProducttionなら「製造部門」、Salesなら「営業部門」、Developmentなら「開発部門」、それ以外は「それ以外」と表示します。case式で表示するカラム名をjpnameとしています。

SELECT `dept_no`, 
case `dept_name`
	when 'Production' then '製造部門'
   	when 'Sales' then '営業部門'
        when 'Development' then '開発部門'

	else 'それ以外'
end
as jpname 
FROM `departments`

実行結果はこうなります。

SQL実行結果

【関連記事】
SQLのCASE式サンプル集 order byやgroup byとの組み合わせもバッチリ

複数行をjoin(結合)してselect

複数行を結合してデータを取得するには、select文とjoinを組み合わせます。

以下のSQLは、employees(社員テーブル)、dept_emp(社員・部署紐付けテーブル)、departments(部署テーブル)を結合して、emp_no(社員番号)、first_name(姓名の名)、last_name(姓名の姓)、dept_name(部署名)を表示します。

SELECT employees.emp_no, first_name, last_name, dept_name FROM `employees` 
left join dept_emp on employees.emp_no = dept_emp.emp_no
left join departments on dept_emp.dept_no = departments.dept_no

実行するとこうなります。

結合方法には、inner join、outer joinなど複数の方法があります。また、joinの記述次第でパフォーマンスが大きく変わることがあるため、注意が必要です。

【関連記事】
SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法

order byで取得行をソートする

select文にorder byを組み合わせると、取得行をソートすることができます。

以下のSQLは、employees(社員テーブル)を、birth_date(誕生日)順にソートして取得します。

SELECT * FROM `employees` order by birth_date

実行結果はこうなります。

order by desc 指定で降順、order by asc指定で昇順ソートになります。省略してorder byのみの場合は昇順ソートになります。

order byに複数カラムを指定するには、order by カラム名1、カラム名2…と、カンマで区切って指定します。

なお、降順、昇順の指定はカラムごとに変えられます。

以下のSQLは、employees(社員テーブル)をbirth_date(誕生日)で昇順、hire_date(雇用日)で降順にソートして取得します。

SELECT * FROM `employees` order by birth_date asc ,hire_date desc

まとめ

select文の基本的な使い方を紹介しました。

ポテパンダの一言メモ
  • likeであいまい検索
  • distinctで重複除外
  • countで件数を数える
  • select内容で別テーブル作成やinsertが可能
  • case式でselect文の条件分岐を組み込める
  • joinで、複数テーブルを結合
  • order byでソート可能

上記以外にも、サブクエリやgroup byでの小計、平均、偏差値の計算など便利な応用応用方法があります。まずは、selectの基本部分を抑えておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。