あしあと

明日の自分への情報発信

SQLの学習(1日目)とGitの学習(1日目)

今日からSQLとGitの勉強!

 

SQL

 

クエリとは

クエリとは命令のことで、SQLとはサーバーにクエリを出すための言語。

まず大枠のテーブルがあり、その中にカラム(列)とレコード(列)

 

データベースからデータを取り出すためにはまず「SELECT」でカラムを指定して、どの列からデータを取り出すかを決める。

f:id:keropp1234:20200113080458p:plain

 

参照したい絡むを決めたら、次はFROMでテーブルをしていする。

f:id:keropp1234:20200113080508p:plain

そして取り出したいカラムとテーブルを決めたら「;」を押して終了。セミコロンは区切りを意味する記号である。ちなみにSQLは大文字小文字の区別はないので小文字でもいい。順番はSELECT→FROM。選びたいものを決めてから、どこからなのかを指定する感じ。なんとなく英語っぽい?

f:id:keropp1234:20200113080510p:plain

 

複数のカラムを取得する。

複数のカラムを選択する場合は、カンマを用いる。カンマは「〜と〜」のようなイメージ。同格のような意味がある。

f:id:keropp1234:20200113081521p:plain

 

テーブルからまとめて指定する場合は「SELECT*とする。」f:id:keropp1234:20200113081525p:plain

 

WHERE(レコードの選択)

WHEREによって「どのレコード(行のデータ)を取得するか」を指定することができる。

任意のレコードのみを取得したい場合はWHERE category = "xx"というふうにして選択できる。ダブルクォートを忘れずに。

f:id:keropp1234:20200113082100p:plain

 

データ型

データベースにはデータ型と呼ばれる概念があり、データの種類を表す。データ型はカラムごとに決められている。

f:id:keropp1234:20200113082637p:plain

 

データの取得

数値を取得したいと思ったとき、クォーテーションで囲まない。囲うのは文字列のみ。

f:id:keropp1234:20200113082757p:plain

 

比較演算子

データの取得では比較演算子を使って特定のデータのみを抽出することもできる。代表的な比較演算子は下の画像の通り。等しいものを選択するときは普通に呼び出せばいいので「=」単独はないと思われる。

f:id:keropp1234:20200113084000p:plain

日付のようなデータ型でも扱うことができる。クォートは忘れないこと。

f:id:keropp1234:20200113084006p:plain

 

LIKE演算子

ある文字列を抽出したいときは「〜のような」という意味を持つ、LIKE演算子を用いる。画像のようにすることで「指定した[nameカラム]が[文字列のようなもの]を含むレコード」という情報になる。

f:id:keropp1234:20200113084609p:plain

 

LIke演算子ワイルドカード

コンピュータの世界で「ワイルドカード」とは、どんな文字列にも一致することを指す記号であり、さながらトランプのジョーカー(ワイルドカード)のようなものである。LIKE演算子では「%」をワイルドカードとして扱う。これにより図では「プリン」を含むデータを全て取得している。"%%"を%を""で囲うこと。

f:id:keropp1234:20200113084916p:plain

 

ワイルドカードの位置

前方一致

%を後ろに置くことで、%以降はどんな文字列にも一致する。つまりプリンで始まるあらゆる言葉を抽出できる。つまり「プリン+あらゆる言葉」の検索になるということである。これのような検索を前方一致という。

f:id:keropp1234:20200113085352p:plain

 

後方一致

後方一致は前方一致の逆でプリンの前に%を置く。こうすることで%の前はあらゆる言葉と一致するようになり、「あらゆる言葉+プリン」の検索になるということである

f:id:keropp1234:20200113085408p:plain

 

NOT演算子

「xxを含まない」という命令を出すときは、条件の前にNOT演算子をおいて否定することで、条件を満たさないデータを取得できる。当然下の画像のように比較演算子やLIKE演算子と併用できる。

f:id:keropp1234:20200113092749p:plain

 

NULL 〜カラムに何も保存されていないデータ〜

データベースにしまわれているデータが「何かわからない」時をNULLと呼ぶ。例えばデータがない時にもNULLとなる。

f:id:keropp1234:20200113093439p:plain

 

NULLのデータを取得したいときは「IS NULL」を用いる。

f:id:keropp1234:20200113093612p:plain

 

NULL以外のものを取得したい!というときは「IS NOT NULL」を使う。f:id:keropp1234:20200113093618p:plain

 

「IS」が必要であり、「=」は使わない。コンピュータの世界の「=」は右辺を左辺に代入するという意味だからである。

f:id:keropp1234:20200113093625p:plain

 

AND演算子

AND演算子を用いて「WHERE 条件1 AND 条件2」とすることで「条件1と条件2を共に満たすデータ」を取得することができる。基本技術情報の知識役だってるな〜。

f:id:keropp1234:20200113094036p:plain

 

OR演算子

OR演算子を用いて「WHERE 条件1 OR 条件2」とすることで「条件1か条件2を満たすデータ」を取得することができる。

f:id:keropp1234:20200113094319p:plain

 

ORDER BY 〜データの並び替え〜

データを並べるには「〜の順に並べる」という意味の「ORDER BY」というコマンドを用いる。順序としては、「ORDER BY カラム名 並べ方」となる。

f:id:keropp1234:20200113094838p:plain

 

並べ方は昇順(小→大)を表すASC(ascending)降順(大→小)を表すDESC(descending)を用いて指定する。

f:id:keropp1234:20200113100416p:plain

 

ORDER BYは以下のように「ORDER BY カラム名 ACSorDESC(昇順か降順か)」することで並び替えることができる。

f:id:keropp1234:20200113100538p:plain

 

もちろんWHEREとも併用可能。例えば下の画像で「WHERE character_name = "にんじゃわんこ"」とすれば忍者わんこの名前のレコードが降順で降りてくる。

f:id:keropp1234:20200113100821p:plain

 

LIMIT 〜必要な数だけ取得する〜

LIMIT」を用いることで「最大何件まで」という指定ができる

f:id:keropp1234:20200113101649p:plain

 

以下のようにクエリの末尾にLIMITを置くことで取得するデータの制限ができる。

f:id:keropp1234:20200113101705p:plain

 

当然WHEREとの併用も可能。

f:id:keropp1234:20200113101709p:plain

 

ちなみにORDER BYとLIMITを併用することも可能。その場合、LIMITを末尾にすることが必要。これでpriceの高い順から5件のデータを取得することができる。

f:id:keropp1234:20200113102032p:plain

 

DISTINCT(明確化

DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができる。

f:id:keropp1234:20200113184520p:plain

 

なおDISTINCTはSELECTと併用することでカラム内の重複を省いた表示ができるようになる。

f:id:keropp1234:20200113184656p:plain

 

四則演算

SQLカラム名に計算記号をつけて四則演算ができる

f:id:keropp1234:20200113185027p:plain

 

下の画像では価格カラムに消費税分をかけて計算している。

f:id:keropp1234:20200113185105p:plain

 

SUM関数

SUM(カラム名)とすることでカラム内の数値を合計することができる。

f:id:keropp1234:20200113185359p:plain

 

SUM関数はWHEREと併用することができる。
下の図では、WHEREを使うことで、にんじゃわんこが今まで使ったお金の合計金額を取得している。

f:id:keropp1234:20200113185441p:plain

AVG関数〜平均を求める〜

ちなみにSUMをAVGに変えることで平均値を求めることができる。

f:id:keropp1234:20200113185910p:plain

 

count関数〜レコード数を数える〜

count関数でレコードの数を数えることができる。「*」でNULLを含めた全てのテーブル数を数えることができる。*を使って全ての指定をしないとNULLが省略されてしまうこともあるから*を使うのかも?

f:id:keropp1234:20200113190159p:plain

 

WHEREとの併用も当然可能。下の画像では忍者わんこが購入した数がこれで判明する。

f:id:keropp1234:20200113190256p:plain

 

MAX関数とMINI関数

MAX(カラム名)やMIN(カラム名)とすることでカラム内で最大最小のデータを取得することができる。

f:id:keropp1234:20200113200112p:plain

 

当然WHERE関数とも併用できる。

f:id:keropp1234:20200113200156p:plain

 

GROUP BY 〜データのグループ化〜

GROUP BYを使うことでデータをグループ化することができる。下の画像のように「GROUP BY カラム名」とすることで完全に同一データ同士のグループができる。

一方、そのカラム内のある特定の行を取得するのWHEREである例えばそのカラム内にa,b,cがあるとき、「WHERE c」とすればcのみ抽出、となる。グループの場合はa,b,cそれぞれ同一データ同士をグループ化して取得対象にする。

f:id:keropp1234:20200113200523p:plain

 

グループ化するには集計関数を取得するFROMの後ろにつける必要がある。これによってグループ化し、集計することで各グループごとにデータが集計される

f:id:keropp1234:20200113200747p:plain

 

GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。
図ではSELECTで集計関数を使っていないため、日付ごとに集計された値が取得できません。

f:id:keropp1234:20200113200952p:plain

 

複数のカラムをグループ化することも可能。その際は,カンマでつなぐ。

f:id:keropp1234:20200113201535p:plain

 

集計関数により、各グループごとにデータを集計することができる。
例えば、下の図はそれぞれグループ化したデータに対してSUM関数とCOUNT関数を用いたものとなっている。

左の画像の1レコード目では2017-7-01ににんじゃわんこが合計500円使った、となる。。

f:id:keropp1234:20200113201636p:plain

 

GROUP BYとWHEREは併用することができる。順番はWHEREの後にGROUP BYを用いる。こうすることで

f:id:keropp1234:20200113205823p:plain

この併用をすることで、下の画像で言えば①WHEREでカテゴリーが「食費」であるレコードを検索する ②日付とキャラクターでグループ化する ③集計関数で集計するという順番になる。これによりその日付でどの人物が合計何円使ったかがわかる。

f:id:keropp1234:20200113205951p:plain

f:id:keropp1234:20200113210053p:plain

 

実際のコードは以下のようになる。

f:id:keropp1234:20200113210208p:plain

 

グループ化したデータをさらに絞り込む

GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用いる。図のように「GROUP BY カラム名 HVING 条件」のようにすることで、条件を満たすグループを取得することができる。

f:id:keropp1234:20200113210816p:plain

 

命令の実行順番

グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、SQLの各コマンドが以下の順番で実行されていくため。図のようにWHEREはまず最初に全体から検索をかけ、そのあとにグループ化と関数が実行され、その後にHAVINGによる絞り込みが実行される。つまりHAVINGは絞り込みを行う関数なので最後でないといけないのである。

f:id:keropp1234:20200113211153p:plain

 

HAVINGはグループ化されたテーブルから絞り込みを行うため、条件で使われるカラムは必ずグループ化された後のテーブルのカラムを使う(つまりGROUP BYの後)。

下の画像のコードの意味は、合計1000円以上(HAVING)使ってる日(GOUPBY)を取得する、となる

 

f:id:keropp1234:20200113211310p:plain

 

GitHub

Udemyで学習。ただどうも動画教材が肌に合わないのとポートフォリオ作成の段階で覚えた方がいいと判断し、GitHubの学習は後回しにする。