第3章

第44話 SQLのお勉強

 サイトウと飲んだ翌朝、詰め所に行くと事務員から研修室に行くように案内された。10席ばかりの研修室の教壇にはサイトウ。前の席にはイノウエが座っていた。サイトウに促されて席につく。




「今日は皆さんに、ちょっと殺し合いをしてもらいます」




 サイトウの下手くそなビートたけしのモノマネに、おれとイノウエはどう反応していいかわからず沈黙が流れた。


「チッ、ノリわりいなあ。おめえら世代じゃねえのか。もういいよ。えーっと今日はSQLを学んでもらう」


「え?データベースのアレですか?」


 SQLは言葉としては知っているものの、具体的なことはなにも知らない。


「そうだ。理由なんだが、おれたちのチームはこれからしばらくエンジニアが作っているSpreadsheetsの現場を担当することになった。QUERY関数が処理できねえとあのへんじゃあお話になんねえからな」


 まじかよ。エンジニアってひたすら黒い画面でプログラミングしてるものだと思っていたが、ExcelとかGoogleSpreadsheets使うのか?いったい何に使っているのか想像がつかない。これまでの広告業界はなんだかんだで土地勘があった。慣れない関数があっても、シート全体としてなにを意図して数式が組まれているのかはわかる。まだまだworkerとしての仕事に慣れないおれがなんとかやっているのはそのおかげといってもいい。不安になってきた。それにQUERY関数ってなんなんだ。


「あの、質問いいですか」


 イノウエが手をあげて発言する。


「わたし、SQLならわかるので特に学ぶ必要はないと思うのですが」


「あたりめえだろ。おめえ元々SE(システムエンジニア)じゃねえか。学ぶのがタカハシで、教えるのがおめえだよ」


 イノウエ、SEだったのか。たしか前に一度聞いたのだが、どうも答えたくないらしく「普通のOLです」みたいなことを言ってごまかしていたが、SEだったとは。言われてみるとたしかに正規表現とかにも詳しかったのにも納得がいく。


「えー、サイトウさんが教えたらいいじゃないですかー」


「すまんな、おれは今日は休暇なんだ。見なくちゃなんねえ映画が溜まってんだよ。そういうわけなんで、1日でQUERY関数処理できるように仕込んどけよ。そんじゃあとは任せた。おつかれさん」


 そう言ってサイトウは出ていき、ため息をつきながらイノウエが教壇にたった。



###################################


「えっと、タカハシさんはSQLって何の略か知ってますか?」


「いえ、さっぱり」


「おもしろくないなあ…、これ読めますか」


 退屈そうにイノウエがホワイトボードに書く。


Structured Query Language


「Structured Query Language、構造化…問い合わせ?言語?ですか?なるほど、SQLですね」


「はい、ダメです。SQLはデータベースの操作、定義のための言語ですが、国際標準としてのSQLは何かの略語ではないとされているので、『略語ではない』が正解なんですよね。正直わたしも最初Structured Query Languageの略だって習ったし、よくそう言われているのですが、Wikipediaにはそう書いてありました」


 読ませておいてなんだっていうんだイノウエが得意げにいうが、まったくもってどうでもいい話だ。略語でいいじゃねえか、だいたいWikipediaに書いてたってほんとに信用していいのか?


「え、その話なんの意味があるんですか?」


「ちょっとしたですよ。それでStructured Query Language、構造化された問い合わせ言語なんですが」


 自分でもStructured Query Languageって言うんじゃねえか。


「わたしたちworkerとしてはQUERY関数が処理できればよいのでデータベースからデータを取り出すための言語だと思っておいたらいいです」


「ってことは今日1日で新しい言語を学ぶってことですか?それはさすがに無茶なんじゃ…」


「安心してください。実際ほぼ英語なんで、中学生の英語ができたらあとは雰囲気で大丈夫です。たとえばこういうworkerのデータベースがあるとします」


 名前 性別 年齢

---------- --- -----

タカハシ 男 27

サイトウ 男 43

イノウエ 女 17


 イノウエが書いている途中サイトウの年齢43だったのかと思ったが、そのあと17という数字をみて信ぴょう性が失われた。


「一応補足しておくと、性別は生まれ持った身体的な性のことであり、性的嗜好を定義するものではないとします。タカハシさんもサイトウさんも男性と書かれているからといって、ふたりが恋愛をしてもよいということですね」


 ポリティカルコレクトネスに配慮するふりをして自分のBL趣味を語るのをやめろ。とにかくなにもつっこもうという気が起きない。イノウエはこちらをチラチラ見ながら説明を続ける。


「たとえばここから30歳以下のworkerを抽出するときはこのように書きます」


select * where 年齢 <= 30


「そうすると結果はこう」


 名前 性別 年齢

---------- --- ---

タカハシ 男 27

イノウエ 女 17


「whereっていうのが抽出の条件なんですね。*はなんですか?」


「selectのあとは表示したい列の指定です。*は全部の列を指定するときの書き方です。なのでたとえば名前と年齢だけ出したい場合はこう」


select 名前, 年齢 where 年齢 <= 30


 名前 年齢

---------- ---

タカハシ 27

イノウエ 17


「ちなみにデータの並び順を指定したい場合はorder byを使います」


select 名前, 年齢 where 年齢 <= 30 order by 年齢


 名前 年齢

---------- ---

イノウエ 17

タカハシ 27


「こうやって年齢で並び替えるように指定すると17が先に表示されるわけです」


「なるほど、17歳かどうかはともかくわかりました」


 イノウエがつっこみをうけてニヤニヤしている。言わなきゃよかった。


「あと重要どころでいえばgroup byで集計をするときですね。例えば性別ごとの人数を出したいときはこういう感じです」


select 性別, count(名前) group by 性別


性別 count(名前)

----- -------------

 女 1 

 男 2 


「女がわたし1人で、男がサイトウさんとタカハシさん2名なのでこうなるんですね。ちなみにこの性別は…ってもういっか」


「countはSpreadsheetsの関数みたいなやつですね」


「そうなんです。ちなみにcount(性別)でもcount(年齢)でもこの場合は数えるだけなんでここでは特に結果に影響はありません。count以外にも関数だとこんな感じ」


select 性別, count(名前), avg(年齢) group by 性別


性別 count avg(年齢)

----- ------ -----------

 女 1 17

 男 2 35


「雰囲気でわかると思いますがaverage、平均ですね。だいたいこのぐらいがQUERY関数でよく使われる範囲ですね。ほぼ英語だしExcelに慣れていると関数も自然じゃないですか?」


「そうですね、思ったより簡単なんで今日1日でSQL理解できそうな気がしてきました」


 イノウエの眉がピクリとうごく。


「タカハシさん、念のため言っておきますが」


「はい」


「いま説明したのはQUERY関数で使われているGoogle Visualization API のクエリ言語です。MySQLやPostgreSQL、Oracleなどのよく使われるデータベースに比べれば簡略化されたごく一部の限定的な機能しかないんです。口のきき方に気を付けて下さい。タカハシさんだって学校の授業でならっただけの高校生が『Excelぜんぶわかった』とか言ってたらむかつくでしょ?」


 自称17歳の設定はどこに行ったのかと思ったが、それは正論だ。おれは素直に謝罪して、授業は続けられた。



※今回の関数

QUERY https://support.google.com/docs/answer/3093343

Google Visualization APIについてはこちら https://developers.google.com/chart/interactive/docs/querylanguage



******************************

というわけで新章突入、エンジニアSpreadsheets編です。お楽しみに。


余談ですがぼくはSQLについては達人ミック先生の本で学びました。

SQL ゼロからはじめるデータベース操作(ミック)

https://www.amazon.co.jp/dp/B00ESXY9FM

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます