さわぴかのなんでもノート!

学びのアウトプット!なにについて書くかはわかりません!なんでもノートです!

非エンジニアの私がSQLを勉強することになったわけ【+はじめに学んだ3つの書きかた!】

こんにちは!さわぴか(@pikasueryoko)です!

株式会社コークッキングで、TABETEの営業やCS(店舗さんやユーザーさんのサポート)、加えてマーケティング的なことまでやっています。

つまり、非エンジニアです!

特にプログラミングできるわけではないですが、自分でほしいなーと思ったデータを、SQLというのを使って自力で取り出しています!

SQLってなんやねん!と拒絶してしまいがちですが、私が思うに、

「部屋の奥にある、あの本取ってきてー!」って頼む感じです!

頼むための言葉(言語)がSQL

例えば、TABETEでいうと「レスキュー数が多い店舗ランキング」とかは出せちゃいます!

今回は、非エンジニアでもSQL使えるよ!データ取り出せるよ!っていうのを強く主張したいです!!

あと、実際にSQLの簡単な説明を、私が好きなピカチュウで例えてみたいと思います! 勉強していない頃の私に、「楽しそうだなー!」って思ってもらえるように!

SQLを勉強しようと思ったわけ

きっかけは、データが欲しい!と、エンジニアに注文しまくってしまったこと。

しかも、どんなデータが欲しいのか、エンジニア目線で伝えるのも難しくて、せっかく作ってもらったのに、見てみたら欲しいデータと違う…ってなったり。 彼らにはもっともっと別の機能を作ってもらわねばなのに、横槍をバンバン入れてしまっていました…。

そんなこんなで、自分でできるようになろうー!と、自社エンジニアに「これができたらだいたいOK!」ってのを教えてもらって、そこから地道にやってたら簡単なクエリはかけるようになりました!

とりあえずなら、

  • SELECT
  • FROM
  • WHERE

の3つがわかればなんとかなります!笑

たった3つです!細かいことは後からで!

ピカチュウ」を探すためのSQL

ということで、小難しい用語とかはとりあえず置いておきます!!

まずはイメージから!

考え方その1:まずは最終的に欲しいデータを頭に浮かべる!

頭に浮かんでいれば、簡単にSQLがかけます! そして、頭に浮かべるためには、どの様な形でデータが入っているかを知っている必要があります!

以下は仮想ポケモンボックスです!

f:id:pikahika:20190120232320p:plain
表の入れ込み方がわからなかったため画像です…

この表のことを「テーブル」と言います。

ここから、「ピカチュウ」を探していきます!

f:id:pikahika:20190120234406p:plain
黄色に塗りつぶした部分が「ピカチュウ

ピカチュウ」を探したいので、上の表の黄色の部分を出したい!と頭に浮かべて、

f:id:pikahika:20190121000212p:plain
ピカチュウ」だけが出てきました!!

この状態にしたいです!!

そのためにどうしたらいいか、順番に説明します!

考え方その2:どのテーブル(表)から?の「FROM」

f:id:pikahika:20190120232320p:plain
「pokemon」のテーブル(表)

今回はテーブル(表)が一つしかないので、とにかくここから取ってきます。

この表を「pokemon」というテーブル名にしました!

なので、

FROM pokemon

というのを使います!

どのテーブル(表)からデータを取ってくるの??というのが「FROM」です!

考え方その3:どのカラム(列)から?の「SELECT」

今回は、上記のカラム(列)全て(id、pokedex_id、name、level)取ってくることにします。

なので、

SELECT *

というのを使います!

ちなみに「*」は、カラム(列)全部って意味です! (名前とレベルだけ取ってくる時は、「SELECT name, level」という感じで、カンマで区切って書きます!)

どのカラム(列)からデータを取ってくるの??というのが「SELECT」です!

考え方その4:どんなレコード(行)の条件?の「WHERE」

さて、ようやくピカチュウを引っこ抜いてくるターンです!

f:id:pikahika:20190120234406p:plain
黄色に塗りつぶした部分が「ピカチュウ

nameというカラム(列)の中にある、いくつかのレコード(行)の中にいる「ピカチュウ」が欲しいです。

なので、

WHERE name = “ピカチュウ”

となります!

どのレコード(行)を指定したいの??というのが「WHERE」です!

考え方その5:「FROM」「SELECT」「WHERE」を順番に並び替えて実行!

1~4で必要なものは出揃いました!

SQLには、書く順番が決まっているので、あとは並び替えて実行するだけです!!

今回出てきた「FROM」「SELECT」「WHERE」の3つについては、以下の順番になります。

  1. SELECT
  2. FROM
  3. WHERE

なので、順番通りに合体させると、今回のクエリはこうなります!!

SELECT *
FROM pokemon
WHERE name = “ピカチュウ”;

(最後の「;」は、ここで終わりです!という意味です。)

実行したら、結果はこうなります!

f:id:pikahika:20190121000212p:plain
ピカチュウだけが出てきました!!

正直これだけでもだいぶすごくないですか?データの中から、ピカチュウだけを取ってこれるっていう…

「このpokemonというテーブルの中には、レベルは45とレベル100の2匹のピカチュウがいる」ということがわかりました! わーい!簡単!!

おまけ

ちなみに、お気付きの方もいるかもしれませんが、ポケモン図鑑の番号(ここでいうpokedex_id)が25番って、ピカチュウのことなんです!

なので、WHEREの部分は

WHERE pokedex_id = 25

でも出せます。同じ結果になります笑

SQLがかけるようになって、よかったこと

私ができるようになってよかった!と思ったところを挙げさせていただければと思います!

  • ほしい!と思ったデータを、わざわざエンジニアにお願いしなくても、自分で手に入れることができる!
  • ほしい!と思ったデータを自力で出すのが難しくても、エンジニアにうまく伝えられるようになった!
  • エンジニアの手を止めさせることが減った!
  • 他のメンバーからの、データが欲しい!という声については、私で事足りるようになった!嬉しい!!
  • サービスの中身、データの構造を理解できる!

部屋のどこに何が収納されているのかを把握できる感じ?です!

関わっているサービスについての理解が進みます!

SQL、そんなに難しくないよ!

簡単なデータを取ってくることができるだけでも、考え方や捉え方の幅が広がると思います!

あと、自分でできる嬉しさもあったり、必要な時にすぐ出せるので、とても便利です!

基礎だけでもあれば、誰かが作ってくれたクエリを自分で紐解いて、どういう意味なのか考えるのもパズルみたいで楽しいです! 新たな発見がたくさんなはずです!

この記事の説明は本当のさわりだけなので、自身の勉強のためにも追加していこうと思いますー!

難しく考えがちですが、SQLは多分優しいと思います!結構見たまんまなので!

SQLがいろんな方の標準装備になって、みんなでデータ見れるようになったらいいなと思います!

ちなみに次はエンジニアでもないのにインサート文を勉強するつもりですー笑

一緒に頑張りましょうー!

ではでは!