見出し画像

SQL学習①〜基礎の基礎〜

SQLについて学ぶため、
集中演習 SQL入門 Google BigQueryではじめるビジネスデータ分析 できるDigital Camp』で書かれている内容を自分用にまとめたものです。
このnoteは、データを扱う基盤についての基本の内容になります。
詳しく知りたい方は、この本を買われるか(Kindle Unlimitedでは0円です)、他の書籍なども参考にしてみてください^^


SQLを学ぶ意義

SQLが使えれば「他人依存」から抜け出せる

ビジネスパーソンが業務上で利用している複数のツールがある。それらには、ツールの画面内でデータを見やすく表示する「ダッシュボード」機能が備わっていることがあるが、ツールの標準機能としてのダッシュボードが、業務上の分析において必要条件を満たしていることは、ほとんどない。
こうしたニーズに応えるのが、生データのCSVダウンロード機能。なお、ユーザー側に自由に分析できるデータを与えるという意味で、生データのダウンロードに対応しているか否かは、ツールの選定基準の1つと言える。

そこでSQLの出番。
CSVファイルの分析や、BIツールに取り込む前のデータの抽出・整形といった前処理で、SQLのスキルは大いに役立つ。逆に、分析者がSQLのスキルを持たない場合、ツールから生データをダウンロードしても、宝の持ち腐れとなってしまう可能性が高い。

BIツールは内部で分類や集計などのSQL的な処理を行なっているため、高度に習熟していれば、かなり柔軟に業務上必要とされる分析を視覚的に行うことができるらしい。しかし、あらゆるBIツールに精通しているビジネスパーソンは少なく、少なくとも個々で得意・不得意があることが考えられるため、BIツールよりもSQLの方が汎用的なスキルであるといえ、SQLは環境依存のない汎用的スキルと言い切ることが可能であるらしい。


データベースとSQL

SQLを一言で説明すると、リレーショナルデータベースの管理や操作を行うための言語。SQLは「Structured Query Language」の略とされ、構造化された(Structured)問い合わせ(Query)のための言語(Language)と説明できるとのことだが、諸説ありで定まっていない。
SQLの実行対象となるリレーショナルデータベース(Relational Database|RDB)は、複数の「表」の形式でデータを管理するデータベースシステムを指す。リレーショナルデータベースにおいては、例えば[user_id][product_id]などの共通するデータにより、テーブル同士に関係性を持たせることができる。標準SQLを学ぶことで、BigQueryをはじめとした幅広いデータベースの対応が可能。


SQLの記述作法

SQLは7種類のパーツで構成されている

①SQLの命令 →「SELECT」「FROM」「WHERE」など
②SQLの関数・引数 →「COUNT」「SUM」など
③カラム名 →「user_id」など
④テーブル名 →「customers」など
⑤カラムやテーブルの別名 →「AS」に続けて指定
⑥定数や固定文字列 →「東京」「1」など
⑦コメント →処理の内容などを記録したメモ

SQLの命令の基本

SQLの命令のうち、基本となるのが「SELECT」と「FROM」。
・SELECT =データを取得するカラムを指定する命令
・FROM =テーブルを指定する命令
 →FROMの後には、データセット名とテーブル名を「.」(ドット)で繋いで記述する

〜記述ルール〜
・半角英字で記述する
・大文字・小文字は混在してもよい
・後ろに半角スペース、または改行を挿入する

SQLの関数・引数

SQLの関数は、Excelの関数と同様の機能がある。例えば、「MAX関数」は、対象のデータ範囲から最大値を取得する。関数の中には引数を利用するものもあり、「MAX(quantity)」のように、関数に続けて半角カッコ内に記述する。

〜記述ルール〜
・半角英字で記述する
・大文字・小文字は混在してもよい

テーブル名

テーブル名は大文字と小文字が厳密に区別される。
〜記述ルール〜
・プロジェクト名、データセット名、テーブル名を「.」(ピリオド)で繋ぎ、「`」(バッククォート)で囲んで記述する
・現在選択中のプロジェクト配下にあるデータセットとテーブルを指定する場合は、プロジェクト名と「`」の省略が可能

カラムやテーブルの別名

なぜ別名をつけると良いのか
実行されたクエリの結果テーブルのカラム名が「f0_」となった場合など、何を表すカラムなのかが分かりにくい場合に、取り出したカラムに別名を定義する命令である「AS」により、分かりやすくする。

〜記述ルール〜
・ASの後ろに半角スペースを空けて、任意の別名を入力する
・半角英字で記述する
・大文字・小文字は混在してもよい
※数字から始まる別名はつけられない

定数や固定文字数

『数量が「100」より大きい』『ユーザーIDが「12345」である』『都道府県が「東京」である』など、定数や固定文字数がSQL文の条件式に組み込みたい場合に用いる。
〜記述ルール〜
・数値は半角で記述する
・固定文字数は「'」(シングルクォーテーション)または「”」(ダブルクォーテーション)で囲んで記述する

コメント

SQL文で何を表しているのかを部分的に記載しておきたいときに利用するもの。SQL文の実行上は完全に無視され、影響を与えない。
〜記述ルール〜
・1行の場合、「--」(2つのハイフン)または「#」(1つのシャープ)に続けて記述する
・複数行の場合、「/」(スラッシュ)と「*」(アスタリスク)を組み合わせた「/*」と「*/」で囲む
・コメントの内容には日本語も利用できる


SQLの基本構文

取得したフィールドを並び替える

行の並び替えに使うSQLの命令は「ORDER BY」

  • FROMの後に記述し、ORDER BYに続けて並び替えの基準とするフィールド名を記述(この場合は、「昇順」)

  • 順序のオプションを「ASC」「DESC」で指定できる

    • ASCは、「ascending」の略で、昇順(省略が可能)

    • DESCは、「descending」の略で、降順

すべてのフィールドを取得する

SELECTで指定するフィールド名の代わりに「*」(アスタリスク)を記述

各フィールドにどのような値が格納されているのかを、ざっと確認したいときに、下のテーブルにあるすべてのフィールドの値を取得する構文。
SQL文の実行により処理されるデータ量が増えることには注意が必要。対象となるテーブルのレコード数がそれほど多くないとわかっている場合のみの利用が良い。

不要なフィールドを除いて取得する

「*」に続けてEXCEPTと、取得したくないフィールド名を「()」(半角カッコ)で囲んで記述

さらに、複数のフィールドを除外したい場合は、「()」内のフィールド名を「,」で繋いで記述

結果テーブルの表示行数を制限する

下記のような場合で、結果テーブルの一部だけを確認したいときは、SQL文の実行結果を特定のレコード数に制限する命令「LIMIT」を利用する

  • 演算結果を新しいフィールドに格納した場合

  • 条件を指定してデータを絞り込んだ場合

  • 2つ以上のテーブルを参照する場合

ORDER BYも併用することで、フィールドの順序を指定した上でレコードを絞り込める。
指定したレコード数分だけずらして結果を取得可能な「OFFSET」も利用できる。

条件に合致するレコードのみを取得する

条件を明示的に指定して合致するレコードのみを取得する命令「WHERE」

WHEREはFROMの直後に記述する。
LIMITやORDER BYと組み合わせることも可能だが、順序はFROMに続いて、WHERE、ORDER BY、LIMITの順に記述する。

〜条件式における記号の意味〜
・= ・・・等しい
・<>、!= ・・・等しくない
・> ・・・より大きい
・< ・・・より小さい
・>= ・・・以上
・<= ・・・以下

・日付型、日時型、文字列型のデータは「'」または「"」で囲む
・整数型、数値型、浮動小数点型のデータは半角で記述、「"」で囲まない
・日付型、日時型のデータを不等号で指定する場合、古い日付・日時ほど小さい、新しい日付・日時ほど大きい扱いになる
・以上(<=)と以下(>=)は不等号の次に等号を記述する

条件式に利用できる演算子

WHEREの条件式には、ANDやORの他にも演算子が利用できる。

IN ・・・IN(値1,値2,値3)
→いずれかの値に当てはまる
NOT IN ・・・NOT IN(値1,値2,値3)
→いずれかの値にも当てはまらない=半角カッコ内で指定した値以外のレコードを取得する
LIKE ・・・LIKE(パターン)
→パターンに当てはまる
NOT LIKE ・・・NOT LIKE(パターン)
→パターンに当てはまらない
BETWEEN ・・・BETWEEN 値1 AND 値2
→値1から値2の間に当てはまる
NOT BETWEEN ・・・NOT BETWEEN 値1 AND 値2
→値1から値2の間に当てはまらない

▶︎LIKE

LIKEに続く半角カッコ内で文字列型のデータを記述して、パターンを指定し、それに合致するレコードのみを取得する。
「LIKE」は英語のlikeと同じく、「〜のような」という意味で用いる演算子。

LIKEと組み合わせる記号の意味
 ・・・パーセント→任意の数の任意の文字
_ ・・・アンダースコア→1つの任意の文字
\ ・・・バックスラッシュ→エスケープ処理をする

▶︎BETWEEN

BETWEENの使い方の注意点
1. 日本語の文字列を範囲として指定しない
文字列がアルファベットの場合、「a」が最も小さい値、「z」が最も大きい値として扱われるが、日本語の場合結果が定かでないため利用を控えた方が良い。順序を持つフィールドである整数型、浮動少数点型、数値型、日付型、日時型、タイムスタンプ型のデータに対しては利用すると良い。
2. 「BETWEEN 値1 AND 値2」の2つの値で「値1<値2」の関係を保つこと
「値1>値2」と指定した場合は合致するレコードが存在しないため、結果が表示されない。

▶︎「true」「false」の判定

「true」または「false」のデータが格納されるブール型のフィールドに対する絞り込みには、「IS TRUE」「IS FALSE」の条件を指定する。
指定したフィールドにnullが存在しない場合は、IS FALSEの代わりに、IS NOT TRUEでも良い。

▶︎「null」の判定

値が格納されていない状態を「null」といい、この「null」を判定するための条件として「IS NULL」がある。
なお、nullではないレコードを取得する条件として、「IS NOT NULL」がある。
適宜「WHERE フィールド名 IS NULL」の構文を利用し、「null」の有無を確認するようにした方が良い。


ラストに上記で学んだことをもとにBigQueryで演習ドリルをやってみました。
所々抜けていた観点もありましたが、考え方が大きくずれることはなかったので、少しはいい感じかなと感じることができました。

そもそも、SQLを学ぶ意図はいくつかあり、
この本の意図である分析がしたいという思いがすべてではないので、
いいとこ取りをしながら深めていけたらなと感じています。

といっても、まだまだ基礎の基礎なので、
着実に進めていきます。

演習ドリルで実行した内容

この記事が参加している募集

最近の学び

わたしの勉強法

この記事が気に入ったらサポートをしてみませんか?