MENU

【SQL超初心者向け】SQLを書くときのコツは、基本的な構造を分解して理解することだと思う

【スポンサーリンク】

f:id:polsk123:20180811205450j:plain

こんにちは、ポルスクです。

 

僕は新卒未経験でIT業界へ行ってSEやってます。

 

そして、現在は社内研修でいろいろなIT的なことについて学んでいます。

 

外部研修にも行ってたので、その時のことは別の記事にしてあります。

www.polsk-blog.com

 

で、最近はデータベースとかそっち系のことについてやってます。

 

主にはSQLを書きまくってますね。

 

最初は意味不明すぎて挙動不審な動きをしたりしてましたが、最近ではちょっとは落ち着いて考えられるようになってきましたw

 

ということで、SQLを書きまくっている中で、何となくわかってきた考え方のコツについて書いていきます。

 

僕と同じようにSEになりたてで、「SQLイミフ過ぎワロタwww」ってなってる人は読んでみてください。

ちょっとはわかるようになるかも。

 

あと、SQL上級者の人は「こんなの当たり前だろ。バカかよ」って思うかもしれませんが、生暖かい目で見守ってくださいw

基本的な3つの構造

  1. SELCT
  2. FROM
  3. WHERE

基本的な構造はこんな感じです。

 

この3つを押さえておけば大体どうにかなります。

サブクエリ(副問合せ)が出てきてちょっと雲行きが怪しくなっても、最終的にはこの型に収まります。

 

INSERTとかDELETEとかもありますが、それはここでは置いときますw

SELECT:どの情報が欲しいか

まず1個目のSELECTについてです。

 

これは、一言で言うと「どの情報が欲しいのか」ってものです。

 

ということで、自分がどういった情報を欲しいのかはっきりさせましょう。

 

例えば、10人分のテストの点の情報が入っているテーブル(テーブル名は”テスト”)を考えてみます。

こんな感じ↓

f:id:polsk123:20180811181509p:plain

 

そして、もし10人分の国語のテストの点だけ欲しいのであれば、SELECTで国語を指定してやります、こんな感じに↓

SELECT 国語

 

まあ、こんな簡単なものはほぼないと思いますが、どんなに難しくてもどの情報が欲しいのか見失わないようにしたら大丈夫です。

FROM:どこから取得するか

次はFROMについてなんですが、これはどのテーブルから情報を取得するのかってことですね。

JOINを使った結合なんかもここに関連してきます。

 

上に書いたように国語の点数を取得する例で言うなら、”テスト”っていうテーブルから取得したいので、FROMは”テスト”を指定してやります。

SELECT 国語

FROM テスト

 

もう1個例を紹介してみます。

 

例えば、学生Noだけじゃなく、学生の名前も一緒に欲しい時について考えてみましょう。

 

ここでもう1個テーブルを召喚。

学生の名簿です(名前がテキトーですみませんw)

f:id:polsk123:20180811191143p:plain

 

そして、取得するものをまとめると、学生No、名前、国語の点数、って感じです。

 

つまり、SELECTは学生No、名前、国語の点数の3つ。

 

SELECTがわかったら、次はFROMなんですがよく見てください。

 

学生Noと国語の点数は”テスト”から取得できますが、名前はどう考えてもできません。

”名簿”から取得する必要があります。

 

でも、とりあえずFROMの候補は出てきましたね。

”テスト”と”名簿”です。

 

だけど、FROMには1個のテーブルしか指定できません。

 

どうしよう?

 

理想はこんな感じのテーブルがあることですよね↓

f:id:polsk123:20180811193320p:plain

 

ということで、そんな時はINNER JOINってやつを使って理想のテーブルを作っちゃいましょう。

 

とりあえずFROMに”テスト”と”名簿”のどっちかを指定しておいて、もう片方をINNER JOINを使ってFROMで指定したテーブルにくっつけます。

 

こうやってくっつけてやることで、FROMに指定したテーブルを理想のテーブルに”進化”させます。

 

SQLを書いてみるとこんな感じ。

SELECT 国語

FROM テスト

INNER JOIN 名簿

 USING(学生No)

 

このFROMを考える上で大事なのは、理想のテーブルをイメージすることと必要になりそうなテーブルのリストアップです。

 

理想ができたら、リストアップしたテーブルをJOINを使ってくっつけていくことによってその理想のテーブルを作っていきましょう。

WHERE:どんな条件の情報を取得するか

最後に、WHEREについてです。

 

これは、「どういった条件のデータを取ってくるのか」ってことですね。

 

これも例を使って考えましょう。

 

「国語の点が80以上の学生Noと国語の点を取得する」という例について考えていきます。

 

まず、上に書いたSELECTとFROMについて考えると、こんな感じになります。

SELECT 学生No、国語

FROM テスト

 

で、ここからが本題のWHERE、つまり条件です。

 

「国語の点が80以上の学生Noと国語の点を取得する」という文を見てみると、「国語の点が80以上の」ってところが条件ですね。

ということで、WHEREはこんな感じになります↓

WHERE 国語>80

 

”テスト”から学生Noと国語を取り出して、その中から国語の点が80以上のものを厳選するって感じですね。

 

条件によって取得する情報が大きく変わってしまう場合もあるので、条件について考えるときは落ち着いて考えましょう。

焦りは禁物です。

 

僕はせっかちなので、ここをよく間違えますw

最後に:落ち着いて分解して考えよう

以上が、僕の感じたSQLを書く際のコツです。

 

最初は、「データベースから必要なデータを取り出せ」って言われても何したらいいかわからないと思いますが、まずは落ち着いて上に挙げた3つに何が当てはまるのか考えていきましょう。 

 

ちょっとずつ組み立てていけば、なんとなーく見えてきます。

 

一瞬で答えが出せるような人は別ですが、僕みたいに少しずつやらないとわからないような人は分解して考えることが大事です。

 

まあ、そんなこと言っても数こなせば多少はわかるようになるので、不安な人は数をこなしてみましょう。

探したらこんな本があったので、解いてみると良いかもしれませんね。

それでは、お互いに頑張りましょう!!