
SQLをExcelと照らし合わせて理解してみよう 〜ビジネスサイド向け〜
みなさんこんにちは。株式会社マツリカでNotia事業とSenses事業の開発に関わっているSumida(Twitter, Github)です!職種的には、エンジニア、プロダクトマネージャー、CS、セールスなど、事業の成長に必要なことは何でもやります。
初noteは #祭り化 Advent Calendar 2019 の4日目でデビューさせていただきます。
今日はSQLという今では当たり前に聞く用語を、実際にはどのように利用されているのかを、ビジネスサイド(Sales, CS, Marketing etc)にもわかるように、Excelと照らし合わせて説明したいと思います。
Excelであれば通常業務でもよく使うので、親しみがあり理解しやすいですよね。
なぜビジネスサイド向けに書こうと思ったのか
そもそものきっかけは、弊社マツリカのビジネスサイドでSQLに興味持ち始めたり、実際にSQLを書く人が増えてきたからです。
それをみて、自分たちでデータを取得しデータの傾向や問題発見ができるようになると、チーム全体として課題解決力が底上げされ、強い組織ができあがるのではないかと思いました。これを実現できている会社はまだまだ少なく、他社との差別化にもつながると思います。
また、最近良くデータサイエンティストやデータ分析という用語をよく聞きますが、データをサイエンスしたり分析するには、まずデータを取得する、今回で言うSQLでデータを取得できなければ何も始まらないのです。
なので、データサイエンティストになりたい、データを分析したいと考えているのであれば、SQLを学んで損はありません。
データを理解するメリット
実際にあった話なのですが、知り合いが自社ツールについて、ユーザヒアリングを行ったところ、お客さんから「とても便利ですよね!」と言われたらしいのですが、実際に帰ってから利用状況を見たところ全く使っていなかったみたいで、えらく落ち込んでいました(笑)
このように、何かを判断するときの材料の1つにデータを使うことは良いことで合理的である、といえます。なにより、データは嘘をつきません。
・・・ここまで説明すれば、SQLの必要性/将来性、自分のスキルアップ、キャリアの幅を広げるために学んだほうがいいと思っていただけたのではないでしょうか。離脱せずに最後まで読んでいただければ嬉しいです。
では早速、Excelと照らし合わせながらSQLを学んでいきましょう。まずは、SQL関連でよく出てくる基本的な用語を紹介します。
データベースとは
Excelと照らし合わせるとデータベースとは、Excelファイル自体のことです!1つのサービスには必ず1つ以上のデータベースが存在します。今は難しく考えずに、1サービスに1つのデータベースがあると考えてもらって大丈夫です。また、スキーマと呼ばれることが多いので覚えてください。※本記事ではイメージしやすくするためにデータベースと記載します
テーブルとは
Excelと照らし合わせるとテーブルとは、Excelのシートのことです!つまり、テーブルとは1つのデータベースの中に複数個存在しています。複雑なサービスになればなるほど、このテーブル(シート)の個数は多くなります。
なぜテーブルを分けるかというと、効率よくデータを管理するためです。
カラムとは
Excelと照らし合わせるとカラムとは、Excelの列のことです!「usersテーブルにnameカラムってあったっけ?」などと会話に出てきます。
レコードとは
Excelと照らし合わせるとレコードとは、Excelの行のことです!「そのテーブルのレコード数っていくつ?」などと会話に出てきます。ロウ(row)と呼ばれることもあります。以下の画像でいうと、レコード数は5です。
用語の説明は以上です!今度はExcelに照らし合わせてSQLを書いてきます!
SQLとは
Excelと照らし合わせるとSQLとは、Excelのフィルタや関数のことです!
取得するにはSELECT
おまたせしました、実際にSQLを書いていきます。
Excelを見るとき、対象のシートをクリックして対象の列と行を見ますよね?それをSQLで表現する構文は以下です。
SELECT カラム(列) FROM テーブル(シート);
上記構文を、先程のExcelに照らし合わせてSQLで書くと以下のようになります。
SELECT id, name, age, email, department, company_id FROM users;
上記SQLを実行すると、まさに以下のExcelの様な結果がデータベースから返ってきます。実際のSQLの結果とほとんど同じです。ここでは苦手意識を持ってほしくないので、結果をあえてExcelで載せておきます。最後に実際のSQL結果の一部を紹介します!
SELECTのあとに書いているのは、どのカラムを参照するかのカラムを記載してます。例えば、先程のSQLのcompany_idを取り除きSQLを実行すると、結果は以下のようになります。
SELECT id, name, age, email, department FROM users;
ここで1つ覚えておくと良いのは、全部のカラムを取得したいときに全部のカラムを書くのは大変です。そこで登場するのが * (アスタリスク)です。実際にSQLで書いてExcelで結果を見てみます。
SELECT * FROM users;
SELECTのあとを * にすると全てのカラムを参照することができるようになります。これは便利でよく使うので覚えておくといいです。
次はFROMのあとを変えてみましょう。FROMのあとはテーブル(シート)なので、今回のデータベース(Excelファイル)にはusersテーブル(シート)の他にcompaniesテーブル(シート)がありますので、companiesに変えて実行します。
SELECT * FROM companies;
実行すると以下のような結果になります。
これがSQLでデータを取得する基本中の基本です!あとはこれをベースに、ちょこちょこ追加のSQL構文を追加するだけです!
ちなみに、実際のSQL結果はこの様な感じです。
Excelとほとんど一緒です。
では次のSQL構文をマスターしましょう!
取得する条件を指定するためのWHERE
Excelで、売上が10万円以上の行で絞り込んでみたいとか、今回の例でいうと年齢が30歳以上の人で絞り込みたい、という場面があると思います。
SQLでそれらを実現するときに使用するのがWHEREです。では30歳以上の人を取得するSQLを書いてみます。
SELECT * FROM users WHERE age >= 30;
結果は以下のとおりです。
今回は以上を条件にしましたが、より大きい( > )、より小さい( < )、以下( <= )、等しい( = )、等しくない( != )、という条件指定もできます。
合わせて、複数条件指定で使用するANDと文字列検索で使用するLIKEもついでに説明したいと思います。
上記3人の内、Sales関連の部署に配属されている人でさらに絞り込みたい場合、先程の条件指定(>=, >, <, <=, ...)で、ある文字を含むという指定の方法がありませんでした。そのとき使用するのがLIKEです。LIKEの部分だけを書くと以下のようになります。今回は説明しませんが、検索したい文字の前後に%を付けてください。
department LIKE '%Sales%'
そして今回の検索は条件が2つになります。年齢が30歳以上と部署にSalesを含むが条件です。複数条件をWHEREに書くときは条件をANDでつないであげます。実際のSQLがこちらです。
SELECT * FROM users WHERE age >= 30 AND department LIKE '%Sales%';
検索結果は以下のようになります。
もうこれで検索に関しては、だいぶマスターしています。他にもOR、IN、BETWEENなどがありますが、ここでは説明しないので慣れてきたら調べてみてください!
ここまでの説明で、結構な文字数になってしまいました。。。もっと書きたいSQL構文があるのですが、この記事では次のSQL構文を最後にしたいと思います!
取得するデータの並び順を指定するためのORDER BY
Excelでも当然のことながら、売上の多い順番で行を並び替えたりすると思います。SQLでその様にデータを並び替えるのに使用するのがORDER BYです!
先程の条件で、年齢が若い順(昇順)に並び替えてみます。SQLと結果は以下の通りです。
SELECT * FROM users WHERE age >= 30 AND department LIKE '%Sales%' ORDER BY age asc;
並び替わってます!。。。データが2件だと実感が無いので、条件を全て外してORDER BYします笑
SELECT * FROM users ORDER BY age asc;
どうでしょうか!きれいに若い順(昇順)に並んでいます!では逆に老けて...ちょっと言葉が悪いので降順と呼びます!降順に並び替える場合は、 asc(昇順)をdescにするだけです!
SELECT * FROM users ORDER BY age desc;
きれいに並び替わっています!ここで覚えるのは、昇順(asc)と降順(desc)です!
まとめ
最後まで読んでいただきありがとうございました。いかがでしたでしょうか。ExcelをイメージしながらSQLを学ぶことで、理解を深められた方がいてくれれば嬉しいです。そして、最終的にビジネスサイドがSQLを書けるスマートな組織になってくれればと思います。
反響があれば、パート2を書いていきたいと思います。
以上 #祭り化 Advent Calendar 2019 の4日目でした!
実際にSQLでデータを取得するためには?
データベースに対してSQLを実行する方法は色々ありますが、一例をあげると、Sequel Proというアプリがあります。ここにデータベースに接続するID/Passwordなどを入力することで、実際にデータベースに対してSQLを実行しデータを取得することができます。本記事で設定までの話をするとすごく長くなるので、実際の接続は社内の詳しいエンジニアの皆さんに聞きましょう。「Sequel Proからデータベースに接続してSQLを実行してみたいです。」とか「リダッシュ(redash)からSQLを実行したいんですけど。」と言えば親切なエンジニアが教えてくれると思います。ただし、実ユーザが使用している本番のデータベースに対してSQLを投げるのは危険なので、影響を与えないテスト環境などに対してSQLを実行しましょう。そこらへんもエンジニアに教えてもらいましょう。