前回に続き高度な構文を学んでいきましょう。さてここから複雑になってきた!

 

サブクエリ

 

SQLでは、クエリの中に他のクエリを入れることができます。

この他のクエリをサブクエリと言います。2つ以上のクエリを1つにまとめることができるので、

より複雑なデータを取得する際に使われます。下の図では「ウィルより得点数の多い選手名」を調べています

 

 

( )で囲むことで、サブクエリを使用できます。

サブクエリの書き方は基本的に通常のクエリと同じですが、()内にセミコロン(;)は不要です。
セミコロン(;)はクエリの最後にだけ書くようにしましょう。

 

 

サブクエリを含むクエリの場合、サブクエリが実行された後、外側にあるクエリが実行されます。下の図で確認しましょう。

 

 

取得したデータをわかりやすく

ASの使い方

 

ASを使うことでカラム名などに別名を定義することができます。
「カラム名 AS "名前"」で、カラム名に定義する名前を指定します。

 

 

 以上です!


お疲れ様でした。

 

 

 

 

 

 

 

前回は基本構文を学びましたが、

取得したデータの加工について今回は実践を学びたいと思います!

以下学の履歴です。

スタート!

 

DISTINCT

DISTINCTを用いると、検索結果から重複するデータを除くことが可能です。

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

 

 

DISTINCTは図のように、SELECTで取得するカラムに使用することで、重複を省いたデータを取得できます。
図ではpurchasesテーブルからnameカラムの重複したデータを省いて取得しています。

 

 

四則演算について

 

SQLでは四則演算「足す(+)、引く(-)、かける(*)、割る(/)」が可能です。

左の図のような記号を使うことで、右の図のようにカラムのデータを計算することが可能です。

かける場合はアスタリスク(*)、割る場合はスラッシュ(/)を用いることに注意しましょう。

 

 

関数の利用について

 

 

合計を求める

SUM関数

 

 

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

 

 

平均の求め方

AVG関数

 

AVG関数はSELECTで取得するカラムに使用することで、計算結果を取得することができます。

 

 

AVG関数はWHEREと併用することができます。
下の図では、WHEREを使うことで、にんじゃわんこが買った商品の平均金額を取得しています。

 

 

データの数を計算

COUNT関数

 

COUNT関数は、指定したカラムのデータの合計数を計算してくれる関数です。

図のように「COUNT( カラム名 )」とすることで、指定したカラムのデータの数を計算します。

 

 

COUNT関数でカラム名を指定した場合、nullになっているデータの数は計算されません。
右の図ではnullのデータが計算されていないため、4件と数えられます。

 

 

nullの数も含めてデータの数を計算したい場合は、

COUNT関数で * (全てのカラム)を指定します。* を使った場合、

特定のカラムのデータの数ではなく、レコードの数を計算します。この方法で、nullの数を含めてデータの数を数えられます。

 

 

COUNT関数はWHEREと併用することができます。
下の図ではWHEREによって、にんじゃわんこがいくつ商品を買ったかを取得しています。

 

 

MAX MIN 関数

SQLでMAXという関数を用いると、指定したカラムのデータの中から最大のデータを取得することができます。

同じく、MINと言う関数を用いることで、最小のデータを取得することができます。

 

 

MAX,MINも他の集計関数と同様にWHEREと併用することができます。
下の図ではWHEREを使うことでにんじゃわんこが使った1番高い金額を取得しています。

 

 

データのグループ化

GROUP BY

 

 

GROUP BYを用いると、データをグループ化することができます。

例えば図のように「GROUP BY カラム名」とすることで、指定したカラムで、

完全に同一のデータを持つレコードどうしが同じグループとなります。

 

 

 

グループ化するには、今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加します。

集計関数により、各グループごとにデータが集計されます。

 

 

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

 

 

カラムのグループ化

 

 

GROUP BYは複数のカラム名を適用させることができ、その場合は、カラム名同士をコンマ(,)で繋げます。
どのようにグループ化が行われ、集計されるのか、次のスライドで説明していきます。

 

 

 

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

 

 

 

細かい条件設定でデータをグループ化

where と group by

 

GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書きます。
WHEREとGROUP BYと集計関数は以下の順番で実行されていきます。

下の図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行されます。

 

 

where と group by の順番

今回のように日付とキャラクターごとの食費に使ったお金の合計を取得するときは、

①WHEREでカテゴリーが「食費」であるレコードを検索する

②日付とキャラクターでグループ化する 

①と②は下の図

 

 

③集計関数で集計するという順番になります。

③については下の図

 

 

WHERE と GROUP BYの書き方

 

 

グループ化データの絞り込み

HAVING

 

GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。

図のように「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。

 

 

Where と HAVING

 

グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、

SQLの各コマンドが以下の順番で実行されていくためです。

図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行され、その後にHAVINGが実行されます。

 

 

Where と HAVING の違い

 

実行順序によって、WHEREとHAVINGは検索対象に違いがあります。

WHEREはグループ化される前のテーブル全体を検索対象とするのに対し、

HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。

 

 

注意点

HAVINGはグループ化された後のテーブルから検索するため、

条件文で使うカラムは必ずグループ化されたテーブルのカラムを使います。

 

 

実践編はここまで!


お疲れ様でした。

 

 

 

最近データベース復習しないとなと思っていたところ

SQLの復習で簡単なWEBサイトにて学習できるものを発見!!

 

https://prog-8.com/

 

簡単に質問形式で学習できました。

以下学習のアウトプットとして書き留めます。以下学習の足跡です。

 

データーベースとは

データベースは、左の図のような表でデータを管理しています。表のことを「テーブル」と呼びます。

また、縦の列のことを「カラム」、横の列のことを「レコード」と呼びます。

データベースでは、必要に応じて複数のテーブルを作成することが可能です。

 

 

今回は、Progateキャラクターの買い物履歴を保存した「purchasesテーブル」を使ってSQLの基礎を学習していきましょう。

具体的なデータなどを、演習ページで確認してみましょう!

 

 

クエリとは

SQL文の基本構文

 

select *カラム名 from テーブル名 where "値"や関数 ;

 

データの種類

データベースに保存されているデータには、「データ型」と呼ばれるルールがあります。

「データ型」とは、テキストデータや数値データ、さらには日付データといったように「データの種類」を示すもの。

 

 

Where の条件で演算子というものもある。

 

Whereについて

日付の条件も指定できる。

 

 

Like演算子

"テスト"を含むようなデータも取得できる。

 

 

LIKE演算子を用いる際に覚えておく必要があるのが「ワイルドカード」です。

コンピュータの世界で「ワイルドカード」とは、どんな文字列にも一致することを指す記号です。

LIKE演算子では「%」をワイルドカードとして扱います。これにより図では「プリン」を含むデータを全て取得しています。

 

 

前方一致

検索する文字のケツだけ%を指定することでプリンで始まるデータを取得することが可能。

 

 

後方一致

先ほどの反対で%を先頭に指定することでプリンで終わるデータを取得。

 

 

NOT演算子

「〇〇を含まないデータ」や「〇〇に一致しないデータ」のような条件でデータを取得したい場合は

「否定」を意味する「NOT演算子」を用います

 

 

 

NULL

なにも保存されてないデータを取得

 

 

NULLのデータを取得するためには「〜がNULLである」という意味になる、「IS NULL」を用います。

 

 

NULLではないデータの取得

「NULLではないデータ」を取得する場合は「〜がNULLでない」という意味になる「IS NOT NULL」を用います。

 

 

※注意点

「NULLのデータ」や「NULLでないデータ」を取得したい場合、図のように「=」は使うことができません。

 

複数条件データの抽出

AND演算子

AND演算子を使うと、WHEREに複数の条件を指定することができます。

「WHERE 条件1 AND 条件2」のようにすることで、条件1と条件2を共に満たすデータを検索することができます。

 

 

 

A か B どちらかを満たすデータの抽出

OR演算子

OR演算子は、AND演算子と同様に、複数の条件を扱います。

「WHERE 条件1 OR 条件2」のようにすることで、条件1または条件2のどちらかを満たすデータを検索することができます。

 

 

取得データの並べ替え order by

 

 

昇順と降順

 

「ORDER BY」の並べ方は、「昇順」か「降順」を指定します。

「昇順」は「小さい数から大きい数へ向かう順序」、

「降順」は「大きい数から小さい数へ向かう順序」です。

SQLでは

「昇順」→「ASC」、

「降順」→「DESC」と指定します。

 

 

 

 

「ORDER BY」は「WHERE」と併用することが可能です。

 

 

最大で何件取得

LIMIT

 

 

 

 

「LIMIT」も「ORDER BY」と同様に「WHERE」と併用することが可能です。

 

 

 

order by と limit の組み合わせ

こうすることでpriceが高いデータの上位5位を取得することができます。

 

 

基本構文は以上です!


お疲れ様でした。

数日前に聞いた先輩の送別会。

何だかんだで尊敬してた経理の副部長さん
なんだけども。まさか来月辞めるなんて思いもしれなかったから晴天の霹靂だったんだけども。直接話しを聞いてみるとマンネリが原因だったとの事。毎日同じ事の繰り返しに飽きたとの事。良き相談相手となってくれると思ってたのに。。
また戻って来てくれると信じて。自分が偉くなったら絶対呼び戻す。CFOとして。起業も視野に入れる??

行き帰りの電車の中で将棋ゲームをしているのだが、レベル1から5まで設定出来るゲームの中で必ずレベル3で対戦するというルールを課している。不思議な事に勝てる日もあれば、負ける日もあり、なんでだろうと思っていたがある日気がつく。脳が疲れていたり、ストレスを感じている時は負ける。何回やっても負ける。戦略的に駒を進める事が難しくなり、感情で打ってしまうからだ。そんな時は休む事にしている。例えば、脳が疲れてる判断をした夜に睡眠をしっかりと取ると、翌朝何故かすんなり勝つからだ。

眠い目をこすりながら新宿へ向かう列車に乗る。かれこれ1ヶ月半続く朝練もまだ慣れず、6時22分の電車に飛び乗る。目を覚ます為に無理矢理頭の中に音楽を流し込むが半分夢の中。7時過ぎにジムに着いてそれから約1時間汗を流す。その頃には目が醒めるのだが、やはり寝起きは辛いものだ。そもそもは先輩の不用意な一言から始まったのだが、今では運動不足が解消しつつあり何だかんだでメリットの方が多いのだと気付かされる。さあ今日もやるか。

ブログを開設しました。主に日々思う事や文章を書くツールとして利用しようと思います。なのでもしこのブログにたどり着いた方がいたとしたら、なんだこの人?と思うかもしれません。あとこのブログを書く理由として人前であがり症の自分がいて、スピーチを振られた時のネタストック帳として利用したいと思います。人前で話すのが苦手なのでまずはコンパクトに文章を書いて頭を整理して、その流れで適度な緊張感の中で話す訓練に繋げていきたいと思います。毎日文書を書いていけば必ず克服出来ると信じて。グー