第3回までは、BigQueryの設定とデータのアップロード・連携方法についてご紹介してきました。

今回は、データから必要な情報を抽出するためのSQLの基本をご紹介していきます。

SQL文とは?

SQLとは、大量のデータのデータから、ある条件のデータを選び出したり、データの追加や削除を行う命令を出す言語です。

SQLの基本となる命令文は、下記の4つだけです!
この4つの命令文を使用することで、必要な情報を抽出していくことになります。

SELECT文 → データを取得する命令
INSERT文 → データを追加する命令
UPDATE文 → データを追加する命令
DELETE文 → データを削除する命令

今回は、この4つの基本命令文のうちの「SELECT文」についてご紹介していきます。

練習用テーブル

今回の記事の例題で使用するテーブルとなります。
ある会社の従業員のデータとなっており、テーブル名は「Employee_list」です。

●従業員名簿(Employee_list)

社員名 , name 住所 , area 性別 , gender 年齢 , age 交通費 , expenses
山田 大阪 45 1,360
前田 京都 26 1,820
大林 兵庫 35 1,480
中村 奈良 32 1,640
佐々木 大阪 56 720
小松 大阪 28 900
長崎 滋賀 48 2,680

SELECT文/データの取得

SELECT文は、データから必要な情報を取得するための命令文です。
基本構文は下記となります。

SELECT [取り出したい列] FROM [データセット名]. [テーブル名];
※取り出したい列が複数ある場合はカンマでつなぐ
<SELECT>
SELECTの後ろには、取り出したい列を指定します。
複数列を取得する場合には、取得したい順番にカンマでつなぎ記述します。

<FROM>
FROMの後ろには、データを取り出す元となるテーブルを指定します。
BigQueryでは、テーブルの指定は、「データセット名.(ドット)テーブル名」となります。※記述の末尾には、SQL分がそこで終了したことを示す「;(セミコロン)」を記述するようにしてください。

では、SELECT文を実際に見ていきます。

1つの列を取得

例題1:
「練習用テーブル/従業員名簿」から社員名を抜き出せ。

●命令文
SELECT name FROM Employee_list.Employee_list;

実際に、BigQueryにクエリの記載を行ってみました。

クエリに間違いがある場合は、下記のように右上にエラーが表示されます。

BigQuery:SQLのクエリエラー画面

クエリに問題がない場合は、このクエリを実行することでどれだけのデータが処理されるかの記載が右上に表示されます。
クエリの実行には、画面上部にある「実行」ボタンを押すと、データの処理が開始されます。

BigQuery:SQLのクエリ

●実行結果

BigQuery:BigQuery:1つの列を取得

「,」で複数列取得

例題2:
「練習用テーブル/従業員名簿」から社員名と出身地域を抜き出せ。

●命令文
SELECT name , area FROM Employee_list.Employee_list;
※複数列を取得する場合には、SELECTの後ろに取得したい順番にカンマで区切って記載

●実行結果

BigQuery:「,」で複数列取得

「*(アスタリスク)」で全カラム取得

取得したい要素の項目に「*(アスタリスク)」を入れることで、全ての要素を取得することが可能です。
*を利用して全カラムを取得すると、一部のカラムを指定した場合に比べてクエリ量が増えるためBigQueryの費用(クエリに対する費用)が増加することになります。

例題3:
「練習用テーブル/従業員名簿」のテーブルデータを全て抜き出せ。

●命令文
SELECT * FROM Employee_list.Employee_list;

●実行結果

BigQuery:「*(アスタリスク)」で全カラム取得

「SELECT * EXCEPT(除外したい列) FROM」で特定の列を除外

FROMの前に「EXCEPT(除外したい列)」を入れることで、指定した列を除外することが可能です。
複数の列を指定する際は、「,」で区切って指定を行います。

▶1つの列を除外

例題4:
「練習用テーブル/従業員名簿」から年齢以外のテーブルデータを抜き出せ。

●命令文
SELECT * EXCEPT(age) FROM Employee_list.Employee_list;

●実行結果

BigQuery:「SELECT * EXCEPT(除外したい列) FROM」で特定のカラムを除外

▶複数の列を除外

例題5:
「練習用テーブル/従業員名簿」から年齢と地域以外のテーブルデータを抜き出せ。

●命令文
SELECT * EXCEPT(age,area) FROM Employee_list.Employee_list;

●実行結果

BigQuery:「SELECT * EXCEPT(除外したい列) FROM」で複数のカラムを除外

「WHERE」で条件を絞り込み

SELECT文の後ろにWHERE [条件文]を追加することで、WHERE以降に条件を記述することでデータの抽出が可能です。
今回は、算術演算子と論理演算子と比較演算子をご紹介いたします。

①算術演算子

算術演算子 意味 算術演算子 意味
= 等しい != <> 等しくない
> 大きい >= 以上
< 小さい <= 以下

②論理演算子

論理演算子 意味
WHERE A AND B AB2つの条件に一致するデータを抽出
WHERE A OR B ABどちらか一方の条件に一致するデータを抽出
WHERE NOT A Aの条件に一致しないデータを抽出

③比較演算子

比較演算子 意味
WHERE [比較対象のカラム] between A and B A~Bの範囲に該当するレコードだけを取得
WHERE [比較対象のカラム] not between A and B A~Bの範囲に該当するレコードを除いて取得
WHERE [比較対象のカラム] in(A,B,C) A,B,Cに該当するレコードだけ取得することができる
WHERE [比較対象のカラム] not in(A,B,C) A,B,Cに該当するレコードを除いて取得することができる

▶1つの条件(算術演算子)で絞り込み

例題6:
「練習用テーブル/従業員名簿」から男性の名前のテーブルデータを抜き出せ。

●命令文
SELECT name FROM Employee_list.Employee_list where gender=’男’;

●実行結果

BigQuery:「WHERE」で条件を絞り込み

▶複数の条件で絞り込み

論理演算子を使用したSQLをご紹介いたします。

例題7:
「練習用テーブル/従業員名簿」から30歳以上の男性の名前のテーブルデータを抜き出せ。

●命令文
SELECT name FROM Employee_list.Employee_list where gender=’男’ AND age>30;

●実行結果

BigQuery:「WHERE」で条件を絞り込み

比較演算子を使用したSQLをご紹介いたします。

例題8:
「練習用テーブル/従業員名簿」から30歳以上50歳以下の男性の名前のテーブルデータを抜き出せ。

●命令文
SELECT name,age FROM Employee_list.Employee_list where age between 30 AND 50;

●実行結果
比較演算子を使用したSQL

「GROUP BY」でグループわけ

グループ分けをしたい場合に使用するのが「GROUP BY」です。

GROUP BY [グループ分けする要素]
例題9:
「練習用テーブル/従業員名簿」から地域ごとの交通費を計算しなさい。

●命令文
SELECT area FROM Employee_list.Employee_list GROUP BY area;

●実行結果

BigQuery:「GROUP BY」でグループわけ

「ORDER BY」でソート

「ORDER BY」で並べ替えることができます。

ORDER BY [並べ替える要素] [昇順・降順の指定]

並べ替えの順番は、ASC(昇順)、DESC(降順)のどちらかで指定することができます。
何も指定しなければ、ASC(昇順)となります。

ASC・・・昇順・小さい方から大きい方への並べ替え(デフォルト)
DESC・・・降順・大きい方から小さい方への並べ替え
※ASC・・・ascending(「登っていく、上昇的な」という意味)
※DESC・・・descending(「下っていく、加工的な」という意味)
例題10:
「練習用テーブル/従業員名簿」から名前と年齢を降順で抜き出せ。

●命令文
SELECT name,age FROM Employee_list.Employee_list ORDER BY age DESC;

●実行結果

BigQuery:「ORDER BY」でソート

SQL構文の並び順

ここまで色々な構文をみてきましたが、SQLには並べる順番が決まっています。
SQLを書く際には、意識するようにしてください。

SELECT→FROM→WHERE→GROUP BY→ORDER BY

まとめ

今回ご紹介したSELECT文を使用することで、データの抽出をすることが可能になります。
次回は、データの更新や削除といった、データをメンテナンスする命令文「INSERT文」「UPDATE文」「DELETE文」についてご紹介いたします。