SQLの基礎① 〜 簡単なSQL文のご紹介(SELECT句、FROM句、WHERE句) 〜

 前回、「データベースとは?」というテーマで、データベースのイメージをご紹介していきましたが、今回はその続きとなるSQLというものをご紹介していきます。
www.digitaldolphin.jp

目次

SQLとは?

 まず、そもそもSQLとは、"Structured Query Language"の略で、データベースのデータを扱うためのプログラム言語となります。そして、このSQLを利用することにより、データの更新や追加・削除、抽出などの様々な命令をデータベースに対して行うことが出来るようになります。
 ただ一方で、「データベースを扱うためのプログラム言語であることはわかったが、実際にどんな時に使うの?」と正直心の中で思っている人は意外と多いのではないでしょうか。少し余談ですが、DXやテクノロジー関連の言葉や内容で分からないこと自体は恥ずべきことではなく、筆者が実際に色んなDXのプロジェクトに関わっている中でも、企業の担当者のほとんどの方は分からないのは良くない、かっこ悪いからといって、知った感じを出していることが多かったりします。そして、それがプロジェクトの推進を遅延される原因になったり、プロジェクトの炎上につながる原因となっていることがほとんどであることも事実なので、恥じずに一旦受けれて分からないことは調べましょう。話を戻しますが、SQLを使うタイミングはいつなのでしょうか。*1

基礎的なSQLの例(SELECT句、FROM句、WHERE句)

 例えば、多店舗で小売業をしている企業の経営企画担当が2022年6月の店舗Aの『売上データ』を出したいと思ったとします。そうすると、担当者は、実際にPOSシステムから『売上データ』をダウンロードして、Excelで作業しようとしますが、Excelの場合には10万行、20万行というデータが存在する場合は、Excelが動かないと言った事態が発生します。では、一体どうするかというと、ほとんどの担当者はExcelでは出来ないため、一旦システム担当に依頼して必要なデータを出してもらいます。実は、その際にシステム担当の方は必要なデータを抽出するために、SQLを利用していたりします。
 では、具体的にどのような感じでSQLを書いているのでしょうか。
 そこで例として以下の表1にある受注データから、オンラインショップで購入をしているものを抽出する場合のSQLをご紹介します。

表1:受注データ

受注ID 受注日時 顧客ID 購入金額 購入店舗 キャンセル日時 返品日時
o001 2022/06/23 10:00:00 c001 ¥10,000 東京店
o002 2022/06/24 11:30:00 c002 ¥6,600 オンラインショップ 2022/06/24 11:35:00
o003 2022/06/24 12:00:00 c004 ¥6,500 東京店
o004 2022/06/24 12:10:00 c007 ¥4,000 横浜店
o005 2022/06/24 16:30:00 c001 ¥2,000 オンラインショップ
o006 2022/06/25 10:00:00 c001 ¥10,000 東京店
o007 2022/06/26 11:30:00 c002 ¥6,600 オンラインショップ
o008 2022/06/26 12:00:00 c004 ¥6,500 東京店
o009 2022/06/27 12:10:00 c007 ¥4,000 横浜店
o010 2022/06/28 16:30:00 c001 ¥2,000 オンラインショップ

サンプル1

SELECT
    受注ID
    ,受注日時
    ,顧客ID
    ,購入金額
    ,購入店舗
    ,キャンセル日時
    ,返品日時
FROM
    受注データ
WHERE
    キャンセル日時 IS NULL
    AND 返品日時 IS NULL
    AND 購入店舗 LIKE 'オンラインショップ'
;

表2:サンプル1の実行結果

受注ID 受注日時 顧客ID 購入金額 購入店舗 キャンセル日時 返品日時
o005 2022/06/24 16:30:00 c001 ¥2,000 オンラインショップ
o007 2022/06/26 11:30:00 c002 ¥6,600 オンラインショップ
o010 2022/06/28 16:30:00 c001 ¥2,000 オンラインショップ

 このSQLの中で出てくる"SELECT"、"FROM"、"WHERE"、"AND"等はそれぞれSELECT句、FROM句、WHERE句、AND句と呼ばれ、それぞれSQLにおけるデータベースに対しての命令となってます。ちなみに、それぞれの命令を組み合わせて作成しているサンプル1のようなコードをクエリと呼びます。まずはサンプル1で出来きた命令を以下にまとめます。

表3:サンプル1で出たきたSQL命令文

# 命令 意味
1 SELECT 必要なカラムの選択するための命令文
2 FROM 対象のデータベースを選択するための命令文
3 WHERE データベースからレコードを抽出する条件指定をするための命令文
4 AND 条件指定などで使われるもので、"且つ"という意味の命令文

 表3を参考にすると、サンプル1の意味としては、『受注データ』というテーブルから「キャンセル日時」がNULLで、「返品日時」がNULLで、購入店舗が"オンラインショップ"のレコードを抽出し、その中で「受注ID」、「受注日時」、「顧客ID」、「購入金額」、「購入店舗」、「キャンセル日時」、「返品日時」というカラムを抽出するという意味となります。ここで出てきたNULLという概念は一旦何も値がない状態と理解してください。別途、NULLとは何かは簡単な記事を出します。
 また、SQLに馴染んでもらうために別のサンプルを以下に共有します。

サンプル2

SELECT
    *
FROM
    受注データ
WHERE
    キャンセル日時 IS NULL
    AND 返品日時 IS NULL
    AND 購入店舗 LIKE 'オンラインショップ'
;

表4:サンプル2の実行結果

受注ID 受注日時 顧客ID 購入金額 購入店舗 キャンセル日時 返品日時
o005 2022/06/24 16:30:00 c001 ¥2,000 オンラインショップ
o007 2022/06/26 11:30:00 c002 ¥6,600 オンラインショップ
o010 2022/06/28 16:30:00 c001 ¥2,000 オンラインショップ

 今回は、SELECT句の後に、"*"という文字がありますが、これは全てのカラムを意味します。実際の現場でも、ただただ必要な条件でデータを抽出したいという場合には、よく使われる記載方法のため覚えておいてください。そのため、サンプル2は実はサンプル1と同じ意味になります。では、次はどんな意味になりますでしょうか?

サンプル3

SELECT
    *
FROM
    受注データ
WHERE
    キャンセル日時 IS NULL
    AND 返品日時 IS NULL
    AND 購入金額 >= 5000
;

表5:サンプル3の実行結果

受注ID 受注日時 顧客ID 購入金額 購入店舗 キャンセル日時 返品日時
o001 2022/06/23 10:00:00 c001 ¥10,000 東京店
o003 2022/06/24 12:00:00 c004 ¥6,500 東京店
o006 2022/06/25 10:00:00 c001 ¥10,000 東京店
o007 2022/06/26 11:30:00 c002 ¥6,600 オンラインショップ
o008 2022/06/26 12:00:00 c004 ¥6,500 東京店

 今回の意味は、表1から購入金額が5,000円以上でキャンセル・返品を抜いた受注を取得するためのコードになります。WHERE句に出てきた「購入金額 >= 5000」というものは特段説明する意味もないですが、購入金額が5,000円以上という意味になります。
 バラバラとお話ししてきましたが、今回重要となるのは、以下のクエリ文になりますので、しっかりと公式的に覚えておいてください!

基礎的なSQLクエリ

SELECT
    項目名1
    ,項目名2
    ,・・・
FROM
    テーブル名
WHERE
    条件文
;

さいごに

 今回、いくつかサンプルのSQLクエリをご紹介しましたが、今回ご紹介した命令文(クエリ)はまだあくまでも一部です。ただ一方で、SQLで出てくる命令文は正直あんまり多くないのも事実のため、今回のものをまずはしっかりと覚えてみてください!

*1:SQLの基礎でご紹介するものは基本的に一通り見てから実際に実行してみてください!処理を実行するとそれだけ費用がかかるケースもあったり、データベースを参照しているサイト(ECサイト)などが重くなるケースもあるので!