SQLを勉強し始めて最初に習うのが「SELECT」と「FROM」です。
入門書などでも十分理解できるでしょうけど、折角ならしっかり理解して、これからの勉強に繋げたいところ。
なお、SELECT句は下記の記事で紹介しているので、まだご覧になっていなければご一読ください。
SELECT句を解説する記事へのリンクを設置予定
初心者が最初にFROM句を勉強する時はポイントを2つおさえればOK!
- FROM句は、参照するデータソースを指定するために必要になる。
- 参照するデータソースには、テーブルやビューを指定できる。
他にもFROM句でできることはあるんですが、初心者であれば、後回しにした方が習得しやすいです。
必要な知識の土台が出来上がってからチャレンジしましょう。
FROM句は参照するデータソースを指定する時に使うもの
ビジネスパーソンがSQLを習得する必要に迫られる場面とは、ビッグデータを自在に取り扱える必要性がある時でしょう。
特に、必要なデータを抽出するために勉強することになるはず。
その際、どこに格納されたデータから抽出するのか、つまり、データソースは何なのか、を指定することになります。
これを指定することができるのがFROM句です。
実際にテーブルを用意して使ってみよう
BigQueryで、テーブルの作成操作からお見せしましょう。
サンプルとして、「sql-beginner-385323」というプロジェクトを用意しています。
プロジェクト名の左隣の三角形をクリックすると、プロジェクト配下のデータセット一覧を開くことができます。
プロジェクト名の右側にある星マークはお気に入り登録のようなもので、クリックすると「スター付き」として登録できます。
星マークの右隣にある点3つのマークをクリックすると、下記のように操作メニューが表示されます。
ここから「データセットを作成」を選択し、試しにデータセットを作ってみましょう。
作成するデータセットのID(名前のようなもの)を指定しましょう。
他設定に関しては、もし会社やチームでルールが決められていれば、それに従ってください。
指定が無ければ、デフォルト通り作成しちゃって、後から削除すれば良いでしょう。
今回は「test_dataset」という名前で作ってみます。
プロジェクトの配下にデータセットが作られます。
同様にデータセットの右側の点3つのマークをクリックすると、テーブルを作成することができます。
ファイルをアップロードするなどしてテーブルを作成する時には、ここから操作しましょう。
ファイルの用意が面倒なので、今回はクエリの実行結果からテーブルを作ってみましょう。
SELECT句の説明に使った、下記のクエリを流用します。
-- サンプルデータ -- ここから
WITH sample AS (
SELECT * FROM UNNEST(ARRAY<STRUCT<fruit_id INT64, fruit_name STRING, fruit_price NUMERIC>>[
(1, "apple", 100),
(2, "orange", 80),
(3, "banana", 120),
(4, "lemon", 80)
])
)
-- サンプルデータ -- ここまで
-- 演習01
SELECT * FROM sample
クエリを実行した後、クエリ結果のウィンドウの右上にある「結果を保存」をクリックしましょう。
どうやって保存するかを選択できるので、「BigQueryテーブル」を選択します。
先ほど作ったデータセットのIDと、保存先のテーブルのID(付けたい名前)を指定してエクスポートしましょう。
今回は、「test_table」というIDで作ってみます。
指定したデータセット配下に、テーブルを作成できたらOKです。
テーブルIDの右下にある、「詳細」や「プレビュー」のタブをクリックして見ると、今しがた実行したクエリの結果が保存されたことを確認できるでしょう。
さて、実際に作ったテーブルをデータソースとして、テーブルからデータを抽出してみましょう。
SELECT * FROM `project_id.dataset_id.table_id`
FROM句を使ってテーブルからデータを抽出する時、このような構文となります。
SELECT句で抽出対象カラムを指定した後、「FROM」と書き、その後に「`」(半角バッククォーテーション)で囲って、プロジェクト名、データセット名、テーブル名を「.」(半角ドット)で区切って指定します。
「`」(半角バッククォーテーション)は、Shiftキーを押しながら「@」(半角アットマーク)を押下すれば入力できます。
実際に、今回のサンプルで利用したプロジェクト名、データセット名、テーブル名を適用すると下記のようになります。
-- 今回のサンプルで利用したプロジェクト名、データセット名、テーブル名を適用した場合
SELECT * FROM `sql-beginner-385323.test_dataset.test_table`
これで、テーブルをデータソースとして指定して、データを抽出することができます。
「`」(半角バッククォーテーション)は無くても実行できる
この記号を使うことは必須ではないのですが、筆者は省略することをおすすめしません。
試しに書いてみると、下記のようになります。
FROM句で指定するところが緑色でなくなりました。下線もありません。
クエリを読む人にしてみれば、テーブルを参照しようとしているのか、一瞬不安になる文字色です。
明示的に「`」で緑色下線付きのフォントになっていれば、テーブルを参照しているものと認識しやすいでしょう。
オマケでもう一つ。
「`」を使って緑色下線付きフォントになっていれば、Ctrlキーを押しながらテーブル名をクリックした時、そのテーブルの情報が画面右側に表示されます。
何気に便利なので、その操作ができるようにしておくためにも、「`」を使っておきましょう。
クエリの実行結果に対してクエリを実行できる
実は、勉強を進めるともっと簡単にそのようなことができるのですが、まずは初心者向けに。
クエリを書いて実行してテーブルとして保存、保存したばかりのテーブルから抽出する新しいクエリを書いて実行してテーブルとして保存、という操作を繰り返せば、ちょっと難しいクエリであっても、段階的に作ることができます。
慣れない内は、この方法を意識しても良いでしょう。
テーブル名の省略はおすすめしない
BigQueryでは、テーブル名を一部省略した書き方ができるようになっています。
SELECT * FROM `test_dataset.test_table`
プロジェクト名を省略すると、実行環境によってエラーになったり、異なる抽出結果になったりします。
また、「`」(半角バッククォーテーション)でテーブル名を囲むところも同様です。
テーブル名は省略せず書くようにしましょう。
筆者が経験した範囲では、省略することを推奨する場面はほぼありません。
テーブルじゃなくても参照できる
前述の説明ではテーブルを対象に説明しましたが、テーブルでなくビューでも同様に参照できます。
ビューからビューを参照する、といった形で繋げば、ちょっと難しいクエリであっても、段階的に作ることができます。
この方法も、慣れない内は意識しても良いでしょう。
ただし、あまりに沢山繋いでしまうとBigQueryの限界に到達しエラーになってしまうので、その時はテーブルとして保存することを考えましょう。
SELECT * FROM `project_id.dataset_id.view_id`
勉強を後回しにした方が良いポイントがある
FROM句のテーブル名の後ろに「JOIN」が登場していたら
JOIN句を勉強して理解できるようになる内容です。
そのようなクエリを見かけたら、JOIN句を勉強し終わるまでスルーしましょう。
JOIN句を解説する記事へのリンクを設置予定
FROM句のテーブル名の後ろに「,」(半角カンマ)は、JOIN句の省略形
「FROM テーブル名, テーブル名」のように書かれたクエリは、JOIN句の中でも「CROSS JOIN」という方法を省略した時の書き方です。
これも、JOIN句を勉強し終わるまでスルーしましょう。
JOIN句を解説する記事へのリンクを設置予定
「()」(半角括弧)が書かれているケースは副問い合わせ
FROM句の後ろに、テーブル名でなく「(」(半角括弧)が書かれているクエリが存在します。
これは「副問い合わせ」や「サブクエリ」と呼ばれるもので、初心者の内は触れない方が良いでしょう。
副問い合わせを勉強する際に解説するので、今は読み飛ばしましょう。
副問い合わせを解説する記事へのリンクを設置予定
最初に「WITH」があるクエリも読み飛ばして良い
WITH句を使ったクエリは、単純なクエリをいくつも組み合わせているクエリになります。
この時、FROM句の後ろはテーブル名に限らない書き方になります。
WITH句を勉強する際に解説するので、今は読み飛ばしましょう。
WITH句を解説する記事へのリンクを設置予定
なお、SELECT句での解説などでもWITH句を使っているのですが、それは魔法の呪文でコピペするものとしてご容赦ください。
テーブル名に別名を付けることもできる
JOIN句を勉強する時に使う知識ですが、FROM句を勉強するタイミングでも理解できるので、参考までに紹介します。
SELECT * FROM `project_id.dataset_id.table_id` AS test_table
テーブル名の後ろにAS句を繋げて、テーブルの別名を付けています。
SELECT句とFROM句しか勉強できていない段階では役に立ちませんが、JOIN句を勉強する時に思い出すことになるでしょう。
FROM句が無いクエリも書ける
FROM句が無いクエリを書くと、参照データソース無し、参照カラム無しの1レコードとしてSELECT句の抽出を行えます。
といっても、この説明では分かりづらいでしょうから、実際のクエリを見てみましょう。
SELECT 1
実際にクエリを実行した結果がこちら。
「1」の1レコードだけが返ってきます。
もう一つ、例を示してみましょう。
SELECT
1,
1 + 2,
1 + 2 + 3,
1 + 2 + 3 + 4,
1 + 2 + 3 + 4 + 5,
1 + 2 + 3 + 4 + 5 + 6
実際にクエリを実行した結果がこちら。
6カラム1レコードの抽出結果が返ってきました。
それぞれのカラムに計算結果が入っています。
当サイトの解説では、処理の結果を簡単に確認するため、FROM句が無いクエリを使っているところがあります。
FROM句が無いクエリを初心者が書くことはほぼありませんが、このように、処理結果を簡単に示すために使うには都合が良い書き方です。
書ける必要はありませんが、読む時に抵抗感が無いようにしておきましょう。
振り返り
お疲れさまでした。
新しく理解するところが比較的少なく、操作方法を覚えるところが多少の壁でしょうか。
習得を後回しにした方が良いポイントがいくつかあるので、それらは少しずつ習得していきましょう。
次の解説記事へのリンクを設置予定