見出し画像

【プロゲート】SQL SQL Iの学習内容まとめ

SQL I

1.データベースとは

SQLを学ぼう
・このレッスンではデータベースを扱うための言語であるSQLを学んでいく
・SQLは分析などでも使え、覚えておくとできることの幅がグッと広がるスキル
・このコースではまず、SQLの基本を学んでいく

データ分析もできるSQL
「データ分析」とはどのようにするものなのか?
・定義は様々だが、「データベース」というものに保存されているデータを、統計などの知識を使って活用することを「データ分析」と呼んだりする
・SQL(エスキューエル)というデータベース言語を使った、簡単なデータ分析をやってみよう
・SQLを学習するために、まずは「データベース」がどんなものか見ていく

データベースとは
データベースとは、テキストや数値などのデータを保存するためのツール
・例えばTwitterのようなSNSは「投稿データ」、Progateでは「レッスンデータ」などをデータベースに保存している

データベースの仕組み
データベースは、表でデータを管理している
・表のことを「テーブル」と呼ぶ
・また、縦の列のことを「カラム」、横の行のことを「レコード」と呼ぶ
・データベースでは、必要に応じて複数のテーブルを作成することが可能

このレッスンで使うテーブル
今回は、Progateキャラクターの買い物履歴を保存した「purchasesテーブル」を使ってSQLの基礎を学習していく
・具体的なデータなどを、演習ページで確認してみよう!

2.クエリとは

クエリとは
・データベースからデータを取得するためには、「データを取得してください」といったようにデータベースに送る命令(クエリ)が必要
・SQL(エスキューエル)とはクエリを書くための言語

SELECT
データベースから、データを取得するためには「SELECT」を用いる
・このSELECTを用いて、「どのカラムのデータを取得するか」を選ぶ

FROM
データベースには複数のテーブルが存在する場合がある
・そのため、「FROM」を用いて、SELECTで選んだカラムが「どのテーブルのカラムか」を指定する必要がある

完成したクエリ
最後に「ここまでがクエリです」ということをデータベースに伝えるためのセミコロン(;)を加えて完成
・クエリは一行で書くこともできるが、今回は読みやすいように改行する
・またSQLは大文字と小文字を区別しないため小文字で記述しても問題ない

3.複数のカラムを選択する

複数のカラムを選択しよう
「name」、「price」、「purchased_at」のようにカラムがいくつかある場合、別々に取得するしかないのか?
・一度に複数のカラムからデータを取得する方法もある

複数のカラムからデータを取得する
複数のカラムからデータを取得する場合は、カラム名をコンマ( , )で区切る

全てのカラムからデータを取得する
全カラムのデータを取得する場合は「*」の記号を用いる

4.WHERE(2)

特定のデータを取得しよう
例えばcategoryカラムに「食費」が入っている、「食費のデータだけ」を取得するためにはどのようにすれば良いか?
・そのような場合は「WHERE」を使う

WHERE
特定のデータを取得するためには、「どこの」という意味を持つ「WHERE」を用いる
・「SELECT」と「FROM」で「どのテーブルのどのカラムのデータを取得するか」までは決まっているので、「WHERE」が意味するのは、「どこのレコード(横の行)を取得するか」になる

WHERE(2)
「どこのレコード(横の行)のデータを取得するか」を指定するためには、「=」を用いて、「〇〇カラムが〇〇であるレコード」といった意味になるように条件を指定する

「食費」のデータを取得しよう
今回は「WHERE category = "食費"」のような条件で、「category」が「食費」であるデータを取得する
・データには「データ型」と呼ばれるルールにより、「食費」のようなテキストはクォーテーションで囲む必要がある

5.WHERE(2)

色々なカラムを条件にデータを取得しよう
今回は「categoryカラムが食費であるデータ」を取得したが、他のカラムでも同じようなことができるか?
・今度はpriceカラムやpurchased_atカラムを条件にデータを取得する
・その前に、先ほど少し登場した「データ型」について確認する

データ型
データベースに保存されているデータには、「データ型」と呼ばれるルールがある
・「データ型」とは、テキストデータや数値データ、さらには日付データといったように「データの種類」を示すもの

データ型(2)
データベースでは、カラムごとにデータ型を決める
・今回のテーブルのカラムにはデータ型が設定されている

数値データを取得しよう
今回は「商品の値段が1000円であるデータ」を取得しよう
・「値段」を示す「priceカラム」には「数値データ」が保存されている
・「数値データ」はクォーテーションで囲んではいけないため、注意

日付データを取得しよう
次に「日付が2017-07-01であるデータ」を取得する
・「日付」を示す「purchased_atカラム」には「日付データ」が保存されている
・「日付データ」はダブルクォーテーションまたはシングルクォーテーションで囲む必要がある

データ型のまとめ
データ型によって注意すべき点が異なるが、今回のレッスンではよく使われる、3つのデータ型について覚えれば問題ない

6.比較演算子

「1000円以上のデータ」を取得しよう
1000円のお弁当があるなんて、他にも高い買い物をしている可能性がありそう
・そのような場合は「1000円以上のデータを取得してください」とデータベースに命令を出せば分かる

比較演算子
WHEREの条件では「=」の他にも比較演算子と呼ばれる、大小比較の記号を用いることができる
・比較演算子を用いることで、「priceカラムが1000以上であるレコード」などを取得することが可能

比較演算子(2)
「priceカラム」のような数値データ以外にも、「purchased_atカラム」のような日付データにも比較演算子を用いることが可能
・データ型に注意し、忘れずにクォーテーションで囲む

7.LIKE演算子

「"プリン"を含むデータ」を取得しよう
「プリン」と付くものが好きで、つい買ってしまう
・「=」は完全に一致するデータしか取得できないが、「プリン」を含むデータのような条件で取得するためのSQLもある
・わんこが「プリン」と付くものをどれくらい買っているのか調べてみる

LIKE演算子
「ある文字を含むデータ」を取得したい場合は、「〜のような」という意味を持つ、「LIKE演算子」を用いる
・「指定したカラムが〇〇を含む(〇〇のような)レコード」という条件となる

ワイルドカード
LIKE演算子を用いる際に覚えておく必要があるのが「ワイルドカード」
・コンピュータの世界で「ワイルドカード」とは、どんな文字列にも一致することを指す記号
・LIKE演算子では「%」をワイルドカードとして扱う
・これにより「プリン」を含むデータを全て取得している

8.LIKE演算子(2)

LIKEとワイルドカードに慣れよう
もう少し「LIKE演算子」と「ワイルドカード」に慣れるために、少し異なる使い方も勉強してみる

前方一致
ワイルドカードを文字列の前後どちらかにのみ置くことも可能
・「〇〇%」とした場合、「〇〇」以降はどんな文字列にも一致するので、「〇〇」で始まる文字列を検索することができる
・このような検索を「前方一致」と呼ぶ

後方一致
「%〇〇」とした場合、「〇〇」より前はどんな文字列にも一致するので「〇〇」で終わる文字列を検索することができる
・このような検索を「後方一致」と呼ぶ

9.NOT演算子

否定の条件でデータを取得しよう
逆に「プリン以外のデータ」や「食費以外のデータ」などはどのようにして取得するか?
・そのような場合は「NOT」という演算子を使う

NOT演算子
「〇〇を含まないデータ」や「〇〇に一致しないデータ」のような条件でデータを取得したい場合は「否定」を意味する「NOT演算子」を用いる
・これまで学習した演算子の前に「NOT」を置くことで、その条件を満たさないデータを取得することが可能

10.IS NULL・IS NOT NULL

カラムに何も保存されていないデータ
データベースを見ていたらカラムに何も保存されていないデータがあった
・そのようなデータは「NULL(ヌル)」と呼ぶ

NULLとは
データベースには「中身がなにかわからない」ということを示すNULLというものがある
・例えば、何のデータも保存されていない場合などにNULLとなる

NULLのデータを取得する
NULLのデータを取得するためには「〜がNULLである」という意味になる、「IS NULL」を用いる
・「カラム名 IS NULL」とすることで、「指定したカラムがNULLであるデータ」を取得することが可能

NULLではないデータを取得する場合
一方、「NULLではないデータ」を取得する場合は「〜がNULLでない」という意味になる「IS NOT NULL」を用いる
・「IS NOT NULL」も「IS NULL」と同様に、「カラム名 IS NOT NULL」のようにして使う

NULLに関連するデータを取得するときの注意
「NULLのデータ」や「NULLでないデータ」を取得したい場合、「=」は使うことができない

11.AND・OR演算子

「ひつじ仙人の食費」を調べよう
「IS NULL」、「IS NOT NULL」は他の演算子と書き方が少し違うので注意が必要
・categoryが「食費」でcharacter_nameが「ひつじ仙人」だと条件が2つあるが、大丈夫か?
・そのような「複数の条件」からデータを取得することもできる

AND演算子
AND演算子を使うと、WHEREに複数の条件を指定することができる
・「WHERE 条件1 AND 条件2」のようにすることで、条件1と条件2を共に満たすデータを検索することができる

OR演算子
OR演算子は、AND演算子と同様に、複数の条件を扱う
・「WHERE 条件1 OR 条件2」のようにすることで、条件1または条件2のどちらかを満たすデータを検索することができる

12.ORDER BY

取得したデータを並び替えよう
比較演算子は「〇〇以上」のような条件なので、どれが一番高い買い物データかどうかまでは分からない
・比較演算子では無理だが、取得したデータを値段の高い順に並び替えれば、誰が一番高い買い物をしたか分かる
・次は「データを並び替える」方法を学習する

ORDER BY
データを並び替えるためには、「〜順に並べる」という意味の「ORDER BY」を用いる
・またデータを並び替えるためには、「(基準となる)並べ替えたいカラム名」と「並べ方」を指定する

昇順と降順
「ORDER BY」の並べ方は、「昇順」か「降順」を指定する
・「昇順」は「小さい数から大きい数へ向かう順序」、「降順」は「大きい数から小さい数へ向かう順序」
・SQLでは「昇順」は「ASC」、「降順」は「DESC」と指定する

ORDER BY(2)
「ORDER BY」はクエリの末尾に記述することで、取得結果を並び替える

ORDER BY(3)
「ORDER BY」は「WHERE」と併用することが可能

13.LIMIT

「必要な数だけ」データを取得しよう
一番高い買い物をしている人だけが分かれば良いので、全部のデータを取得する必要はない
・では最後に「最大で何件取得するか」を指定するLIMITを学習する

LIMIT
「最大で何件取得するか」を指定するためには、「制限する」という意味の「LIMIT」を用いる
・「LIMIT」は「 データの件数」を指定する

LIMIT(2)
LIMITはクエリの末尾に記述することで、取得するデータの数を制限する

LIMIT(3)
また「LIMIT」も「ORDER BY」と同様に「WHERE」と併用することが可能

14.総合演習

レッスンの復習
ここまでできればSQLの基礎はバッチリ
・最後に、SQLをちゃんと理解できたか確認する問題をいくつか出題する

【補足】ORDER BYとLIMITの組み合わせ
「ORDER BY」と「LIMIT」を併用することも可能
・その場合、「LIMIT」を末尾にする必要がある
・このように2つを用いることで、priceが高いデータの上位5位を取得することができる

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