SQLの学習(1日目)とGitの学習(1日目)
今日からSQLとGitの勉強!
クエリとは
クエリとは命令のことで、SQLとはサーバーにクエリを出すための言語。
まず大枠のテーブルがあり、その中にカラム(列)とレコード(列)
データベースからデータを取り出すためにはまず「SELECT」でカラムを指定して、どの列からデータを取り出すかを決める。
参照したい絡むを決めたら、次はFROMでテーブルをしていする。
そして取り出したいカラムとテーブルを決めたら「;」を押して終了。セミコロンは区切りを意味する記号である。ちなみにSQLは大文字小文字の区別はないので小文字でもいい。順番はSELECT→FROM。選びたいものを決めてから、どこからなのかを指定する感じ。なんとなく英語っぽい?
複数のカラムを取得する。
複数のカラムを選択する場合は、カンマを用いる。カンマは「〜と〜」のようなイメージ。同格のような意味がある。
テーブルからまとめて指定する場合は「SELECT*とする。」
WHERE(レコードの選択)
WHEREによって「どのレコード(行のデータ)を取得するか」を指定することができる。
任意のレコードのみを取得したい場合は「WHERE category = "xx"」というふうにして選択できる。ダブルクォートを忘れずに。
データ型
データベースにはデータ型と呼ばれる概念があり、データの種類を表す。データ型はカラムごとに決められている。
データの取得
数値を取得したいと思ったとき、クォーテーションで囲まない。囲うのは文字列のみ。
比較演算子
データの取得では比較演算子を使って特定のデータのみを抽出することもできる。代表的な比較演算子は下の画像の通り。等しいものを選択するときは普通に呼び出せばいいので「=」単独はないと思われる。
日付のようなデータ型でも扱うことができる。クォートは忘れないこと。
LIKE演算子
ある文字列を抽出したいときは「〜のような」という意味を持つ、LIKE演算子を用いる。画像のようにすることで「指定した[nameカラム]が[文字列のようなもの]を含むレコード」という情報になる。
LIke演算子とワイルドカード
コンピュータの世界で「ワイルドカード」とは、どんな文字列にも一致することを指す記号であり、さながらトランプのジョーカー(ワイルドカード)のようなものである。LIKE演算子では「%」をワイルドカードとして扱う。これにより図では「プリン」を含むデータを全て取得している。"%%"を%を""で囲うこと。
ワイルドカードの位置
前方一致
%を後ろに置くことで、%以降はどんな文字列にも一致する。つまりプリンで始まるあらゆる言葉を抽出できる。つまり「プリン+あらゆる言葉」の検索になるということである。これのような検索を前方一致という。
後方一致
後方一致は前方一致の逆でプリンの前に%を置く。こうすることで%の前はあらゆる言葉と一致するようになり、「あらゆる言葉+プリン」の検索になるということである
NOT演算子
「xxを含まない」という命令を出すときは、条件の前にNOT演算子をおいて否定することで、条件を満たさないデータを取得できる。当然下の画像のように比較演算子やLIKE演算子と併用できる。
NULL 〜カラムに何も保存されていないデータ〜
データベースにしまわれているデータが「何かわからない」時をNULLと呼ぶ。例えばデータがない時にもNULLとなる。
NULLのデータを取得したいときは「IS NULL」を用いる。
NULL以外のものを取得したい!というときは「IS NOT NULL」を使う。
「IS」が必要であり、「=」は使わない。コンピュータの世界の「=」は右辺を左辺に代入するという意味だからである。
AND演算子
AND演算子を用いて「WHERE 条件1 AND 条件2」とすることで「条件1と条件2を共に満たすデータ」を取得することができる。基本技術情報の知識役だってるな〜。
OR演算子
OR演算子を用いて「WHERE 条件1 OR 条件2」とすることで「条件1か条件2を満たすデータ」を取得することができる。
ORDER BY 〜データの並び替え〜
データを並べるには「〜の順に並べる」という意味の「ORDER BY」というコマンドを用いる。順序としては、「ORDER BY カラム名 並べ方」となる。
並べ方は昇順(小→大)を表すASC(ascending)と降順(大→小)を表すDESC(descending)を用いて指定する。
ORDER BYは以下のように「ORDER BY カラム名 ACSorDESC(昇順か降順か)」することで並び替えることができる。
もちろんWHEREとも併用可能。例えば下の画像で「WHERE character_name = "にんじゃわんこ"」とすれば忍者わんこの名前のレコードが降順で降りてくる。
LIMIT 〜必要な数だけ取得する〜
「LIMIT」を用いることで「最大何件まで」という指定ができる。
以下のようにクエリの末尾にLIMITを置くことで取得するデータの制限ができる。
当然WHEREとの併用も可能。
ちなみにORDER BYとLIMITを併用することも可能。その場合、LIMITを末尾にすることが必要。これでpriceの高い順から5件のデータを取得することができる。
DISTINCT(明確化
「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができる。
なおDISTINCTはSELECTと併用することでカラム内の重複を省いた表示ができるようになる。
四則演算
下の画像では価格カラムに消費税分をかけて計算している。
SUM関数
SUM(カラム名)とすることでカラム内の数値を合計することができる。
SUM関数はWHEREと併用することができる。
下の図では、WHEREを使うことで、にんじゃわんこが今まで使ったお金の合計金額を取得している。
AVG関数〜平均を求める〜
ちなみにSUMをAVGに変えることで平均値を求めることができる。
count関数〜レコード数を数える〜
count関数でレコードの数を数えることができる。「*」でNULLを含めた全てのテーブル数を数えることができる。*を使って全ての指定をしないとNULLが省略されてしまうこともあるから*を使うのかも?
WHEREとの併用も当然可能。下の画像では忍者わんこが購入した数がこれで判明する。
MAX関数とMINI関数
MAX(カラム名)やMIN(カラム名)とすることでカラム内で最大最小のデータを取得することができる。
当然WHERE関数とも併用できる。
GROUP BY 〜データのグループ化〜
GROUP BYを使うことでデータをグループ化することができる。下の画像のように「GROUP BY カラム名」とすることで完全に同一データ同士のグループができる。
一方、そのカラム内のある特定の行を取得するのWHEREである。例えばそのカラム内にa,b,cがあるとき、「WHERE c」とすればcのみ抽出、となる。グループの場合はa,b,cそれぞれ同一データ同士をグループ化して取得対象にする。
グループ化するには集計関数を取得するFROMの後ろにつける必要がある。これによってグループ化し、集計することで各グループごとにデータが集計される
GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。
図ではSELECTで集計関数を使っていないため、日付ごとに集計された値が取得できません。
複数のカラムをグループ化することも可能。その際は,カンマでつなぐ。
集計関数により、各グループごとにデータを集計することができる。
例えば、下の図はそれぞれグループ化したデータに対してSUM関数とCOUNT関数を用いたものとなっている。
左の画像の1レコード目では2017-7-01ににんじゃわんこが合計500円使った、となる。。
GROUP BYとWHEREは併用することができる。順番はWHEREの後にGROUP BYを用いる。こうすることで
この併用をすることで、下の画像で言えば①WHEREでカテゴリーが「食費」であるレコードを検索する ②日付とキャラクターでグループ化する ③集計関数で集計するという順番になる。これによりその日付でどの人物が合計何円使ったかがわかる。
実際のコードは以下のようになる。
グループ化したデータをさらに絞り込む
GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用いる。図のように「GROUP BY カラム名 HVING 条件」のようにすることで、条件を満たすグループを取得することができる。
命令の実行順番
グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、SQLの各コマンドが以下の順番で実行されていくため。図のようにWHEREはまず最初に全体から検索をかけ、そのあとにグループ化と関数が実行され、その後にHAVINGによる絞り込みが実行される。つまりHAVINGは絞り込みを行う関数なので最後でないといけないのである。
HAVINGはグループ化されたテーブルから絞り込みを行うため、条件で使われるカラムは必ずグループ化された後のテーブルのカラムを使う(つまりGROUP BYの後)。
下の画像のコードの意味は、合計1000円以上(HAVING)使ってる日(GOUPBY)を取得する、となる
Udemyで学習。ただどうも動画教材が肌に合わないのとポートフォリオ作成の段階で覚えた方がいいと判断し、GitHubの学習は後回しにする。