1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelからはじめるSQL〜基本構文編〜

1
Posted at

はじめに

この記事ははじめてSQLを学ぼうとするエクセルユーザーを対象にしております。
SQLの構文の各句がどのような意味合いになっているのか、エクセルのような表計算ソフトになぞってイメージを持つための一助になれば幸いです。

簡単に言うと、SQLはエクセルでやっていたフィルタリングや並び替えを、文字で指示する感覚です。マウスでポチポチやっていたことを「こうしてください」と文字で伝えるイメージになります。

エクセルとSQLの対応関係(早見表)

まず全体像を把握していただくため、エクセル操作とSQLの対応関係を示します。

エクセルの操作 SQLの記述 用途
オートフィルタ WHERE句 データの絞り込み
並び替え(昇順・降順) ORDER BY句 データの並び替え
列の表示・非表示 SELECT句 表示する列の選択
シートの選択 FROM句 データ元の指定
表示行数の制限 LIMIT句 結果の行数制限

つまり、エクセルでできることは基本的にSQLでも同じようにできるということです。

この記事で扱うテーブル

この記事では以下のテーブルを扱います。
佐藤さん、鈴木さん、渡辺さん3人の3科目(国語、数学、歴史)のテストの点数のデータです。
3人×3科目 なので合計で9行、データの項目はname, subject, scoreの3列 のデータとなるので
以下のような9行 × 3列 となるデータとなります。

※SQL上ではscore_tableと表します。

name subject score
佐藤 国語 86
佐藤 数学 73
佐藤 歴史 79
鈴木 国語 83
鈴木 数学 70
鈴木 歴史 87
渡辺 国語 90
渡辺 数学 50
渡辺 歴史 91

エクセルで表すとこんな感じですね。

image.png

SQLの基本構文

本記事で紹介するSQLの基本構文は以下になります。
この基本構文が理解できれば簡単なデータ抽出はできるようになるはずです。

SELECT 〇〇    -- エクセルの「列選択」
FROM 〇〇      -- エクセルの「シート選択」
WHERE 〇〇     -- エクセルの「オートフィルタ」
ORDER BY 〇〇  -- エクセルの「並び替え」
LIMIT 〇〇     -- エクセルの「表示行数制限」
;

上から順にSELECT, FROM , WHERE, ORDER BY, LIMITの各句の意味を説明していきます。

SELECT句

こちらは出力する結果の列を選択する句となります。言い方を換えると列を制御する部分といえます。
なのでここでは欲しい結果の表をイメージしたときにどんな列があるべきかをイメージするといいでしょう。

例えば、SELECT name としたならば、出力結果はnameの列だけ
SELECT name, subject としたならば、出力結果はnamesubjectの2つの列だけとなります。

またSELECT *とするとFROM(後述)で選択したデータソースのすべての列を選択した結果を出力します。

SELECT句の例

■出力結果がnameだけの例

SELECT name
FROM score_table
;

SQLの実行結果
image.png

■出力結果がnamesubjectの2つの例

SELECT name, subject
FROM score_table
;

SQLの実行結果
image.png

■すべての列を出力する例

SELECT *
FROM score_table
;

SQLの実行結果
image.png

FROM句

この句は対象のデータソースを選択する部分となります。
今回はscore_tableしかないので選択の余地がありませんが、
例えば同じエクセル内に複数テーブルがあったときにどのテーブルからデータを抽出するかを判別するためにあります。

FROM句の例

具体例として以下のようなscore_tableの他に学生番号のIDと名前の対応表であるid_tableというものが別であったとします。
image.png

score_tableをデータソースとしたときの例

SELECT *
FROM score_table
;

SQLの実行結果
image.png

id_tableをデータソースとしたときの例

SELECT *
FROM id_table
;

SQLの実行結果
image.png

WHERE句

先ほどのSELECT句では列を制御する句と説明しましてが、一方でこちらは行を制御する部分です。
それこそExcelのテーブルのフィルター機能をイメージしていただければわかりやすいかと思います。

image.png

例えば、欲しいデータが国語のデータだけだったらWHERE subject = '国語'と記述することで実現できます。
Excelだとこう実現できますね。
image.png

またこの行のフィルター機能であるWHERE句は条件式で記述することができます。
例えば、80点以上の結果だけ欲しいときはWHERE score >= 80と記述します。

WHERE句の例

■国語または数学の結果を抽出したいときの例

SELECT *
FROM score_table
WHERE subject = '国語' OR subject = '数学'
;

SQLの実行結果
image.png

■佐藤さんの歴史の結果を抽出したいときの例

SELECT *
FROM score_table
WHERE name = '佐藤' AND subject = '歴史'
;

SQLの実行結果
image.png

■80点以上の結果を抽出したいときの例

SELECT *
FROM score_table
WHERE score >= 80
;

SQLの実行結果
image.png

ORDER BY句

ORDER BY句は出力結果の行の順序をソートする機能になります。
Excelでいうとこちらの昇順、降順にソートする機能と同義になります。
image.png

SQLではソートしたい列名をして昇順にしたい場合はASC、降順にしたい場合はDESCと続けて記述します。
記述しなかった場合は昇順が適用されます。

ORDER BY句の例

■scoreを降順にして出力させたいときの例

SELECT *
FROM score_table
ORDER BY score DESC
;

SQLの実行結果
image.png

■nameを昇順かつscoreを降順にして出力させたいときの例

SELECT *
FROM score_table
ORDER BY name, score DESC
;

SQLの実行結果
image.png

■数学の点数のランキングを知りたい時の例

SELECT *
FROM score_table
WHERE subject = '数学'
ORDER BY score DESC
;

SQLの実行結果
image.png

LIMIT句

LIMIT句は出力される行数を制限する役割があります。
今回はデータが9行とかなり少ないのですが、実際だと数万以上のデータテーブルを扱うことがよくあります。
そのような場合にこのLIMIT句は役に立ちます。

LIMIT句の例

■5行だけを出力したいときの例

SELECT *
FROM score_table
LIMIT 5
;

SQLの実行結果 ※順序保証はされていないことに注意
image.png

■scoreの上位3位出力させたいときの例

SELECT *
FROM score_table
ORDER BY score DESC
LIMIT 3
;

SQLの実行結果
image.png

各句の実行順序について

これまでが各句の説明になります。
各句は上から順に実行されるのではなく、

  1. FROM句
  2. WHERE句
  3. SELECT句
  4. ORDER BY句
  5. LIMIT句

の順で実行されます。
つまりは、

  1. FROM句 でデータソースを特定し、
  2. WHERE句 で抽出する行データを選別し、
  3. SELECT句 で抽出する列データを選別し、
  4. ORDER BY句 で抽出されたデータの並び替えをし、
  5. LIMIT句 で抽出されたデータを出力する行数を制御する

ということです。
エクセルに例えると「シートを選んで→フィルタをかけて→必要な列だけ表示して→並び替えて→上位何件かだけ見る」という流れと同じです。

はじめのうちはあまり意識する必要がないのですが、後々この順序が重要になってくるケースが多々あります。
例えば、今回のデータでテストの点数(score)が上位3位のデータを抽出する際には以下のようなSQLで実現できます。これは「データの並び替え」→ 「データ出力の行数制御」の順で実行されるからこそ実現できています。
これが逆だと出力結果が上位3位とはなりません。

SELECT *
FROM score_table
ORDER BY score DESC
LIMIT 3
;

まとめ

SELECT 〇〇    -- どの列を表示するかを選択する(エクセルの列選択)
FROM 〇〇      -- どのデータ元からデータを抽出するか選択する(エクセルのシート選択)
WHERE 〇〇     -- どの行を対象にするかフィルタリングする(エクセルのオートフィルタ)
ORDER BY 〇〇  -- 出力結果を並び替える(エクセルの並び替え)
LIMIT 〇〇     -- 出力結果の行数を制限する(エクセルの表示制限)
;

この記事がエクセルは出来るけどSQLに苦手意識のある方のお力になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?