見出し画像

参加記録:【初心者向け】基礎から分析までのSQL【データエンジニア入門ダイジェスト】(技育CAMP)

今回はサポーターズが開催している技育CAMPの4月6日開催分に参加させていただきました。その記録を書き記そうと思います。
登壇者の方が会の中でnoteへのアウトプットの許可をしてくださっていたので内容についても記載させていただきます。発表資料のスクリーンショット(登壇者から許可あり)のコピペになってしまっているところが多々あるかと思いますがご容赦いただけますと幸いです。
(技術系なのでQiitaのほうが良いのかなとも思ったのですが、イベント中のチャットで触れられていたのがnoteだったので、noteにしています。)

参加イベント概要

技育CAMP:


株式会社サポーターズ(https://corp.supporterz.jp/)さんの技育プロジェクトの一環として開催されている企画です。ハッカソンとアカデミアの2つの開催形態があります。(今回参加させていただいたのはアカデミアの企画です)

参加回:

【初心者向け】基礎から分析までのSQL【データエンジニア入門ダイジェスト】(技育CAMP 4月6日開催)

登壇者紹介

菱沼 雄太(ひしぬま ゆうた)さん
ちゅらデータ株式会社(https://churadata.okinawa)CTO
DATUM STUDIO株式会社(https://datumstudio.jp)執行役員
DATA LEADERS WATCH IN 2023などに選出
Twitter:@foursue
今回のイベントにもアバターとボイスチェンジャーを用いて参加されていました。

イベント記録

SQLとは:

データベースでデータを操作するための言語。
集合指向言語、宣言型言語とされる。
1974年にIBMの研究所でSEQUEL(A Structured English Query Language)として開発されたが、SEQUELという名称が商標で使えなかったためにSQL(Structured Query Language)とされた。
ANSIによって標準化が行われ、SQL-86、89など複数の規格が存在。
(「えすきゅーえる」と呼ぶ方が多いが、SEQUELの流れを汲んで「しーくえる」と呼ぶ方もいる。)

1970年代から大きく変化していないので、一度学んでしまえば数十年使えるコスパの良い言語。(ただし、「ようこそSQLのアビスへ」と題した画像が図示された画像が示されおり、極めようと思うとかなり奥深いようです。)

1PBなどの巨大なデータを扱いやすいという長所があります。
(Big Queryなどを利用した並列処理で処理するようです)
(PythonでもPySparkなどを利用すれば巨大なデータを扱えるようですが、裏ではSQLが動いているようです。それなら最初からSQLで書いた方が早そうですよね)

SQLの種類

SQLはDDL,・DML・ DCLの3つの種類に分けることができます。

  • DDL (Data Difinition Language)  

    • データ定義言語。テーブルなど、データの入れ物に関する操作を行う

  • DML (Data Manipulation Language) 

    • データ操作言語。データをあれこれいじる

    • (今回のイベントではこれに着目して述べられていました)

  • DCL (Data Control Language)

    • データ制御言語。アクセスの権限処理やトランザクション処理(複数のSQL文の更新をまとめてデータベースに反映させる処理)を行う

SQLの用語

  • テーブル(表)

  • カラム(列)

  • レコード(行)

(基本的には文字そのままです。後でイメージ画像を添付します。)

SQLで個人的に気になる仕様

SQLでは大文字小文字の区別がない
English Query Languageだからとのことです。回の中ではアメコミの話も交えて、英語の大文字と小文字の区別って適当だよねみたいな話もされていました。
極端な話、SELECTでもselectでもsEleCTでもよい。
菱沼さんは登壇資料ではSELECTなどの標準の関数などは大文字にしてそれ以外は小文字にされているとのこと。(それ以外の場面ではすべて小文字にされているとか)
プロジェクトの開発標準に従えばよいとのこと。

SQLでの論理演算子
他言語(Pythonなど)と異なるものがあるので注意が必要です。
等価を示す演算子が「=」(代入演算子がないから「==」でない?)
等価でないことを示す演算子が「<>」(どうやら「>=<」からの変形のよう)
その他不等号に関する演算子についての記述はここでは省略します。(個人的には他言語と同じだったのであまり気にしなくてもよいかなと思ってます)
(上記の書き方は標準であり、標準でない書き方(方言)でも動くDBはありますが移行性のためには標準をしっかりと使いましょう。(後述))

データベース(DB)によって仕様が異なる
DBが異なると、採用している規格が異なっていたり、標準ではない書き方(方言)が使用できたりします。データベースを別のデータベースに移行する際に方言を使用していると移行が困難になります。後の移行担当(自分か他人かはわかりませんが)が苦労することになります。このため、方言の使用には注意しましょう。
また、後述しますがDBによってSQLの記述の処理の仕方が異なるものもあります。このため、DBごとに最適な記述方法が異なる場合があります。(このため、DBの仕様を把握して、それに合わせて書けるとベストなようです)

DMLのSELECT文の文法について

例:(実際に資料として出てきたコードを載せました)

SELECT
    "customer_name" AS "名前"
    , "customer_age" AS "年齢"
FROM
    "customers"
WHERE
    "customer_age" >= 20
;
SELECT
    data_part('year', "order_time") as "order_year"
    , SUM("order_amount")
FROM "orders"
GROUP BY "order_year"
ORDER BY "order_year" /*descとつけると逆になる*/
;

SELECT:列を指定してデータを取り出します。
FROM:データを取り出すテーブルを指定します。
WHERE:データの条件を指定します。(ここで前述の比較演算子が登場)
GROUP BY:指定した列の値を基にデータをまとめます。
ORDER BY:指定した列の値を基にデータを並び変えます。(descで逆に)
data_part:日付を抽出します。(今回は'year'として年を抽出している)
SUM:合計を求めます。
(SQLではシングルクオーテーションとダブルクオーテーションの用法が異なるので注意が必要。)

SELECT文で取り出されたデータに対してさらにSELECT文を適用するネスト構造も適用できます。ただ、この記法だと可読性が落ちます。これはWITH文を使うことで解消可能です。WITHを使用しても性能は下がらないし、可読性が上がるので使用しましょう。(WITHはSQL99で採用された)

SQL(SELECT文の節)の記述順、実行順について

前述のようにEnglish Query Languageなので記述の順番が英語によっているようです。このため、記述の際の順番と実行される順番が異なります。このため、標準では以下のような記述順、実行順になるようです。
ただし、DBの仕様によっては実行順が異なるものもあるようです。
記述:
SELECT節→FROM節→WHERE節→GROUP BY節→
HAVING節→ORDER BY節→LIMIT節
実行:
FROM節→WHERE節→GROUP BY節→SELECT節→
HAVING節→ORDER BY節→LIMIT節
(SELECT節の位置のみが異なります)

SQL学習について(入門)

SQLiteを使うのがお勧め。
書籍はパズル系の本が良いとのこと。
ウェブ系を使う方は「~で学ぶSQL」という書籍が良いかも。
「達人に学ぶSQL徹底指南書」は具体的に名前が挙げられていました。

あとがき

SQLは講義で軽く触っただけで忘れていたものも多く、復習のよい機会となりました。イベント登壇者の菱沼さん、主催のサポーターズの方々の皆様に感謝いたします。また機会がありましたら参加させていただきます。

今回初めてイベント参加記録を書かせていただきました。あまりこのような文章を書かないので、お見苦しい点等ありましたら申し訳ありません。
本当は技育祭2023春についてもこのような形で書こうと思っていたのですが、書こうと思っているうちに時間がたってしまっていました。今後は参加日に忘れずに書く習慣をつけたいものです。
今後も技術系のイベントに参加した際は何等かの記事をnoteに残していこうと思いますので、その記事も読んでいただけますと幸いです。

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