初めてのSQL
アルバイト先でSQLが必要になった💦
全く分からない状態からだったが、週末勉強したら基礎はなんとなく分かるようになった。たぶんSQLを知ってる人からすれば、まぁそんなもんだろうと思うだろうけど、もしもTypeScriptやReactで既に必死って感じだけど大丈夫かなと心配する人がいたら、とりあえず以下のサイトがおすすめ。意外と理解しやすい言語だった。ただし個人的な感想としては、SQLは必要になったタイミングで勉強するのがいいと思う。基本的なところはスッと入ってくるが、具体的にやりたいことがある場合にはそのためのコードを書くのは複雑で難しかったりする。
SQLBolt
おすすめのサイトはこちら。SQLの基礎を実際に手を動かしながら勉強できたのがこちらのSQLBolt。大好きなピクサー映画が出てくる例題にテンション上がる⤴︎
私の場合はとっかかりはこのサイトで勉強して、あとは具体的に仕事で必要な関数、サブクエリ、WITH ClauseなどをBigQueryのDocなどで個別に調べていった。
以下は勉強メモ
基本はこの形。
SELECT column, another_column -- 表示する列
FROM mytable -- データ元
INNER/LEFT/RIGHT/FULL JOIN another_table
ON mytable.id = another_table.matching_id
WHERE condition
AND/OR another_condition
ORDER BY column ASC/DESC
LIMIT 100 OFFSET 10;
SUMなどの計算ができるが、関数の名前や構文は使用しているデータベース管理システム (DBMS) によって異なる場合が多いらしい。(参照: BigQueryの関数、日付関数)
SELECT SUM(column) AS sum_of_column, ...
FROM mytable
WHERE conditions
GROUP BY column
HAVING group_condition; -- GROUP BY した後さらに絞り込みたい場合はHAVINGを使う
計算結果をまた別の計算に使ったりするときにはWITH Clause(WITH句)を使う。WITH句はCTE (Common Table Expression) とも呼ばれる。サブクエリとの比較で、WITH句はメモリにテーブルが一時保存されるのでメモリを使いすぎる点に注意が必要だが、サブクエリはSQLの中にさらにSQLを埋め込む形なので、コードが読みにくいのと、処理速度が遅めらしい。
WITH DepartmentEmployeeCount AS (
SELECT department_id, COUNT(*) AS num_employees
-- COUNT(*) will count the number of rows
FROM employees
GROUP BY department_id
) -- employeesというテーブルから従業員数を取得
SELECT d.department_name, ec.num_employees
FROM DepartmentEmployeeCount ec
JOIN departments d ON ec.department_id = d.department_id;
-- departmentsというテーブルと合体
今日はここまで。
2月、コロナに罹ってしまい何もできない日が続きました。
Queen + Adam Lambertの来日コンサートのチケット買っていたのに
行けなかったのがとても残念 😢