SQLの全てがっここにある!

【SQL】データを抽出するSELECT文の基本的な使い方

ENGINEER.CLUB編集部

ENGINEER.CLUB編集部

SQLの中のDML(Data Manipulation Language:データ操作言語)には、SELECT(抽出)INSERT(挿入)UPDATE(更新)DELETE(削除)がありますが、その中のSELECT文について説明します。

実際SELECT文を使うときは、色々加工する必要がありますが、まずは、SELECT文の基本的な使い方を覚えていきましょう。


1.SELECT文

SELECT文は、テーブルからデータを抽出するときに使います。

とあるテーブル(データの集合体)からどのような条件でデータを抽出してほしいのかを表した命令文です。

1-1.SELECTの基本的な構文

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

★構文

SELECT列名

FROM テーブル名;

SELECT文の終わりは、「;(セミコロン)」を付けます。

この構文に

  • 複数のテーブルを結合
  • 列と列を結合
  • 演算子を使用して計算
  • 列の値をExcelの関数と同じように使用(例えば、何桁目から何桁目の文字を取得など)
  • どのような条件でデータを絞りこむのか
  • どの順番にデータを並べるか

などさまざまに加工をしてSELECT文を作成することができます。

イメージは、ExcelWordなどで作成する「マトリック表」です。

【例】社員表

社員番号名前部署名性別
00001名前1A部署男性
00002名前2A部署女性
00003名前3B部署男性
00004名前4A部署男性
00005名前5A部署女性
00006名前6B部署男性

「列名」が、縦方向の「列」(社員番号・名前・部署名・性別)

「テーブル」が、「マトリックス表」(社員表)

「レコード」が、横方向の「行」(例えば、00001・名前1・A部署・男性)

1-2.SELECTの使用例

まずは、実際のテーブルとは違いますが、例文を通してSELECT文をイメージしてみましょう。

【例1】テーブルの列名:「社員番号」、「名前」を全データ表示

★構文

SELECT 列名1,列名2, 列名3・・・

FROM テーブル名;

複数の列名を指定する場合は、列名間を「,(カンマ)」で区切ります。

SELECT社員番号,名前 FROM社員表;

出力結果

社員番号      名前
----------------------------------------------------
00001	    名前1 
00002	    名前2 
00003	    名前3 
00004	    名前4 
00005	    名前5 
00006	    名前6

【例2】テーブルの全列名、全データを表示

★構文

SELECT *

FROM   テーブル名;

または

SELECT 列名1,列名2,列名3・・・

FROM   テーブル名;

全項目を指定する場合は、全列名を一つずつ指定でも「*(アスタリスク)」を指定でも同じ意味になります。

●全列名を一つずつ指定した場合

SELECT社員番号,名前,部署名,性別 FROM社員表;

●*(アスタリスク)を使用した場合

SELECT * FROM 社員表;

出力結果

社員番号      名前     部署名      性別
----------------------------------------------------
00001	    名前1    A部署	男性
00002	    名前2    A部署	女性
00003	    名前3    B部署	男性
00004	    名前4    A部署	男性
00005	    名前5    A部署	女性
00006	    名前6    B部署	男性

【例3】テーブルの全列名、「A部署」だけのデータを表示

★構文

SELECT *

FROM テーブル名

WHERE列名 比較演算子 条件値;

または

SELECT 列名1,列名2,列名3・・・

FROM   テーブル名

WHERE列名 比較演算子 条件値;

列名の値が文字の場合は、文字を「’(シングルクォーテーション)」で囲みます。

列名の値が数字の場合は、数字をそのまま「’(シングルクォーテーション)」で囲みは不要です。

※この例では、‘A部署になります。

【参考】WHERE句で使用できる比較演算子

比較演算子説明
=等しい
<小さい
>大きい
<=以下
>=以上
<> または !=等しくない
SELECT * FROM社員表WHERE 部署名 = 'A部署';

出力結果

社員番号      名前     部署名       性別
----------------------------------------------------
00001	    名前1    A部署 	 男性
00002	    名前2    A部署 	 女性
00003	    名前3    B部署 	 男性
00004	    名前4    A部署 	 男性
00005	    名前5    A部署 	 女性
00006	    名前6    B部署 	 男性

【例4】テーブルの全列名、「A部署」だけのデータで、「社員番号」で昇順(多い順)・降順(少ない順)に表示

★構文(昇順)

SELECT *

FROM テーブル名

WHERE列名 比較演算子 条件値

ORDER BY 列名;

または

SELECT 列名1,列名2,列名3・・・

FROM  テーブル名

WHERE  列名 比較演算子 条件値

ORDER BY 列名;

★構文(降順)

SELECT *

FROM  テーブル名

WHERE  列名 比較演算子 条件値

ORDER BY 列名 DESC;

または

SELECT 列名1,列名2,列名3・・・

FROM  テーブル名

WHERE  列名 比較演算子 条件値

ORDER BY 列名 DESC;

●全列名を一つずつ指定した場合(昇順)

SELECT社員番号,名前,部署名,性別
FROM社員表
WHERE 部署名 = 'A部署'
ORDER BY社員番号;

●*(アスタリスク)を使用した場合(昇順)

SELECT *
FROM 社員表
WHERE 部署名 = 'A部署'
ORDER BY社員番号;

出力結果

社員番号      名前     部署名       性別
----------------------------------------------------
00001	    名前1    A部署	 男性
00002	    名前2    A部署	 女性
00004	    名前4    A部署	 男性
00005	    名前5    A部署	 女性 

●全列名を一つずつ指定した場合(降順)

SELECT社員番号,名前,部署名,性別
FROM社員表
WHERE 部署名 = 'A部署'
ORDER BY社員番号 DESC;

●*(アスタリスク)を使用した場合(降順)

SELECT *
FROM社員表
WHERE 部署名 = 'A部署'
ORDER BY社員番号 DESC;

出力結果

社員番号      名前     部署名       性別
----------------------------------------------------
00005	    名前5    A部署	 女性 
00004	    名前4    A部署	 男性
00002	    名前2    A部署	 女性
00001	    名前1    A部署	 男性

2.実際の列名の値の加工内容を確認 ~覚えておくと便利なDUAL表~

ある程度、SELECT文を作成に慣れてくると、列名の値を加工して出力することが多くなります。

列名の値の加工内容を確認するのに「DUAL表」を覚えておくと便利です。

【例】SELECT文で出力するときの日付の表示形式を「YYYY/MM/DD」の表示にしたい

ORACLEの場合、日付の表示形式の確認方法

SELECT SYSDATE FROM DUAL;

DB2の場合、日付の表示形式の確認方法

SELECT SYSDATE FROM SYSIBM.DUAL;

出力結果

SYSDATE
-------------------
2018-12-09 00:00:00

実際そのまま使用しようした場合、表示したい形式と違うことがわかった場合、SELECT文の日付の表示形式を加工します。

ORACLEの場合

SELECT TO_CHAR(SYSDATE,’YYYY/MM/DD’) FROM DUAL;

DB2の場合

SELECT TO_CHAR(SYSDATE,’YYYY/MM/DD’) FROM SYSIBM.DUAL;

出力結果

SYSDATE
-------------------
2018/12/10

※ご使用のRDBにより、「DUAL表」、日付の表示なども異なりますので、ご利用する前に環境のご確認をお願い致します。


3.さいごに

以上、SQL SELECTについての基本的な使い方をまとめました。

本来ならキーワードや文字列や計算など加工して表示するときに使用する関数などがありますが、さまざまな加工方法は、応用になりますので、まずは、基本的な構文をしっかり理解した方がよいかもしれません。

初めてSELECT文を使う方には、抵抗があるかもしれませんが、この記事を読んで、参考になるところがあれば光栄です。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中