こんにちは!
PHPのLaravelやJavaScriptでWeb開発をしているフリラーンスエンジニアのファドと申します!
こちらの記事はSQL教材の第3回目の記事になります。
その他のSQL教材を学習したい方は下記リンクから直接教材へ飛ぶことができます。
HAVING
HAVINGの説明の前に以下のコードを実行してください。
SELECT
*
FROM
db_test.test01
HAVING
code = "001";
お気づきかもしれませんが、HAVINGはWHEREと同じ動きをします。
ただ、実行されるタイミングが違います。
SQLの命令文は以下の順番で実行されます
①WHERE
↓
②GROUP BY
↓
③HAVING
このため,GROUP BYを使わない処理では
WHERE,HAVINGを使い分けなくても問題ないですが、
GROUP BYを使う場合は使い分けていきましょう。
以下のSQL文を実行してみましょう!
SELECT
code,
COUNT(code) AS code_count
FROM
db_test.test01
GROUP BY
code
HAVING
code_count > 1;
画像のようにカラムがcodeで、カウント数が1よりも大きいデータのカウント数が表示されていればOKです!
★検索ワード
・SQL HAVING 使い方
CASE
CASEは条件分岐を行うための命令です。
使い方は以下のとおりです!
SELECT
*,
CASE
WHEN 条件式 THEN 条件を満たしたら表示する内容
WHEN 条件式 THEN 条件を満たしたら表示する内容
ELSE 条件を満たしていなかったら表示する内容
END
FROM
DB名.テーブル名;
CASEの後にWHENで条件を書いて、THENでその条件に当てはまったものを出力します。
また、ELSEは他の条件全てに当てはまらなかったときに出力する処理を書きます。
最後にENDで閉じます。
ちなみにWHENの条件はいくつ書いてもOKです。
参考例①
SELECT
*,
CASE
WHEN age >= 40 THEN "ベテラン"
WHEN age <= 25 THEN "若手"
ELSE "その他"
END
FROM
db_test.test01;
ASで名前を付けてあげると見やすいですね。
参考例②
SELECT
*,
CASE
WHEN age >= 40 THEN "ベテラン"
WHEN age <= 25 THEN "若手"
ELSE "その他"
END AS "区分"
FROM
db_test.test01;
★検索ワード
・SQL CASE 使い方
SUM
こちらのSUMも関数です。
カラムの数値の合計値を取得できます。
※数値カラムのみ使用可能
使い方は以下のとおりです!
SELECT
SUM(カラム名)
FROM
テーブル名;
参考例
-- 年齢の合計値を取得
SELECT
SUM(age)
FROM
db_test.test01;
★検索ワード
・SQL SUM 使い方
AVG
こちらのAVGも関数です。
カラムの数値の平均値を取得できます。
※数値カラムのみ使用可能。
使い方は以下のとおりです!
SELECT
AVG(カラム名)
FROM
テーブル名;
参考例
-- 年齢の平均値を取得
SELECT
AVG(age)
FROM
db_test.test01;
★検索ワード
・SQL AVG 使い方
MAX,MIN
これらの関数MAXとMINは
MAXはカラムの数値の最大値、MINは最小値を取得できます。
※数値カラムのみ使用可能。
使い方はそれぞれ以下のとおりです!
SELECT
MAX(カラム名)
FROM
テーブル名;
SELECT
MIN(カラム名)
FROM
テーブル名;
参考例
SELECT
MAX(age)
FROM
db_test.test01;
SELECT
MIN(age)
FROM
db_test.test01;
★検索ワード
・SQL MAX 使い方
・SQL MIN 使い方
ORDER BY
ORDER BYは指定したカラムを対象に昇順(または降順)に並び替えることができます。
昇順(ASC)、降順(DESC)を指定可能
使い方はそれぞれ以下のとおりです!
SELECT
カラム名
FROM
テーブル名
ORDER BY
カラム名 ASC;
SELECT
カラム名
FROM
テーブル名
ORDER BY
カラム名 DESC;
参考例
SELECT
*
FROM
db_test.test01
ORDER BY
age ASC;
SELECT
*
FROM
db_test.test01
ORDER BY
age DESC;
サブクエリ
SQL文を実行した結果を、さらに別のSQL文に利用することができます。
この時、SQL文のなかにSQL文を書くことになります。これを、サブクエリといいます。
今回は全体の平均年齢以上の人だけを表示するSQL文を例に挙げてみましょう!
順序だてて考えていくと、
①全体の平均年齢を出す
② ①の結果を条件式にしてレコード取得
つまり①のクエリがサブクエリになります。
では、実際にSQL文を見てみましょう!
SELECT
*
FROM
db_test.test01
WHERE
age >= (
SELECT
AVG(age)
FROM
db_test.test01
);
上記のSQL文の()内の部分SELECT AVG(age) FROM db_test.test01
が平均年齢を出している箇所になります。
そして、こちらの箇所がサブクエリと呼ばれる箇所です。
()内のSQL文の実行結果は23.0000
です。
これは、test01のageカラムの平均値が23であるということを示しています。
サブクエリの箇所で行われている処理が理解できたところで、実際にSQL文を実行してみましょう!
画像のように、test01テーブルの中からageの値が平均値以上(23以上)のデータのみ取得できていればOKです!
★検索ワード
・SQL ORDER BY 使い方
INNER JOIN
INNER JOINとは複数のテーブル同士のデータを取得し、結合を行い、データを取得したりする際に使用します。
言葉ではわかりづらいかと思いますので実際に使用してみましょう!
使い方は以下のとおりです!
SELECT
取得するカラム
FROM
DB名.テーブルA
INNER JOIN DB名.テーブルB ON Aの対象カラム = Bの対象カラム;
以下のSQL文を実行してみましょう!
SELECT
*
FROM
db_test.test01
INNER JOIN db_test.test02 ON db_test.test01.code = db_test.test02.code;
画像のようにデータが取得できていればOKです!
何が起こっているのかを詳しく説明していきます!
まず、SELECT * FROM db_test.test01
でtest01テーブルのデータをすべて取得しています。
次にINNER JOIN db_test.test02
でdb_test.test02テーブルのデータをSELECT文で取得したtest01テーブルと同じように取得しています。
最後に、ON db_test.test01.code = db_test.test02.code
でtest01テーブルとtest02テーブルのcode
カラムの値が同じもの同士を結合しています。
上記の例では、test01テーブルとtest02テーブルのすべてのデータを取得していますが、
指定したカラムだけを取得することもできます。
SELECT
test01.id,
name,
test01.code,
occupation
FROM
db_test.test01
INNER JOIN db_test.test02 ON db_test.test01.code = db_test.test02.code;
上記のSQL文を実行すると下記画像のように表示されます。
★検索ワード
・SQL INNER JOIN 使い方
LEFT(RIGHT) JOIN
LEFT(RIGHT) JOINもINNER JOIN同様に複数のテーブルのデータ同士を結合し取得するために使用されます。
まずは使用してみましょう!
使い方は以下のとおりです!
SELECT
取得するカラム
FROM
DB名.テーブルA LEFT(RIGHT)
JOIN DB名.テーブルB ON Aの対象カラム = Bの対象カラム;
まずはLEFT JOINを実行しましょう!
こちらでは、idが6
のnameがコジロウ
のnameカラムのデータが表示されます。
SELECT
*
FROM
db_test.test01
LEFT JOIN db_test.test02 ON db_test.test01.code = db_test.test02.code;
画像のようにデータが取得できていればOKです!
次に、RIGHT JOINを実行しましょう!
こちらでは、idが6
のnameがコジロウ
のnameカラムのデータは表示されていません。
SELECT
*
FROM
db_test.test01
RIGHT JOIN db_test.test02 ON db_test.test01.code = db_test.test02.code;
なんとなく違いはわかっていただけたかと思います。
では、詳しく説明していきます。
まず、LEFT JOIN, RIGHT JOINは、LEFT OUTER JOIN, RIGHT OUTER JOINの省略系です。
LEFTであろうと、RIGHTであろうと、OUTER JOINという属性のクエリです。
OUTER JOINとは、複数のテーブルがあり、それを結合する際、優先テーブルを1つ決め、そこにある情報は全て表示しながら、他のテーブル情報に対になるデータがあれば表示する(ない場合はNULLで補完表示)。
という機能となります。
よって、先程のSQL文を実行した際にnameがコジロウ
のnameカラムのデータがLEFT JOINを使用した際には表示され、RIGHT JOINを使用した際には表示が行われなかったのです。
そして、LEFT, RIGHTは、そのテーブルが優先テーブルなのかを決めるために使っています。
★検索ワード
・SQL LEFT JOIN 使い方
・SQL RIGHT JOIN 使い方
・SQL OUTER JOIN 使い方
SQLの実行順序
SQLの実行される順序について説明していきます。
HAVINGとWHEREの説明でも少し触れましたが、以下がSQLの実行順序です。
1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE または WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
意図しない動きがあった時はこの順序が関係しているかもしれませんので、チェックしましょう。
★検索ワード
・SQL 実行順序
おめでとうございます!
SQLの教材を最後までお読みいただき、ありがとうございました!
次は学習した内容の確認としてSQLの課題に挑戦してみましょう!
SQL課題
さあ、これまでの学習の成果を存分に発揮させましょう!
プログラミング学習サポートについて
「独学で挫折した。。。」
「一人でのプログラミング学習がしんどい。。。」
「未経験からエンジニア転職をしたいけど何をしたら良いかわからない。。。」
このような悩みをお持ちの方向けに、本教材作成者のファドがMENTAという学習サイトにてあなたのプログラミング学習とエンジニア転職を徹底サポートいたします!
サポート価格はなんと1日あたりたったの約300円!
教材で分からない箇所のサポートはもちろんのこと、本サイトで公開しているすべての課題の解答も公開しております。
また、MENTAで学習を終わらせていただいた方限定で懇意にしていただいている企業さんを紹介することもあります!
なお、サポート内容の詳細は下記の通りです。
- 目標設定
- マインドセット
- オリジナル教材見放題
- オリジナル課題見放題
- オリジナル課題の解答見放題
- 課題コードレビュー
- 教材への無制限質問
- 課題への無制限質問
- ポートフォリオ作成アドバイス
- 褒めのコーチング
いくつかのプランを用意させていただいておりますので、下記より一度ご覧ください!
コメント