同じテーブルの同じ列名の中で知りたい情報が2つあるときは
SQL文を2回書かなければ、と思うあなた
そんなSQL文を1つにまとめることができます。
それを副問い合わせ、selectをネストすると言います。
1つのSQLで2つの内容を求める
副問い合わせ、selectをネストする方法を解説します。
副問い合わせ、selectをネストする
実際に副問い合わせのSQL文を書いていきます。
select 列名, 列名 from テーブル名
where 列名
= (select 列名 from テーブル名);
となります。
次に実際に副問い合わせを使います。
スマホが家に持ち込む危険性を知っていますか?
家に帰宅したら手洗いうがい、
マスクをする以前に大事なことです。
しかし手を洗った後にスマホを必ず触りますよね?
ではそのスマホはキレイですか?
この危険性に気づけたあなたはこちら
が必要なこともわかりますよね?
実際にselectをネストする
例えばこのようなテーブルがあります。
テーブル名;プレゼント
購入日 | 品目 | 費用 |
2020/07/15 | 靴 | 18000 |
2020/07/14 | 髪飾り | 5000 |
このテーブルから最大の費用に関する品目と費用を知りたい
この項目の少ないテーブルでは一目みれば最大の費用と品目はわかりますが、
実際にはより膨大なデータ量をSQLで取り扱います。
その中の一部だと考えてください。
ここで最大の費用と品目を知るためにSQLを入力していくと
select max(費用), 品目 from プレゼント where 費用 = ,,,,,
となります。
それはどうしてかwhere 費用 =の先に入力する値は
max(費用)の値だからです。
しかしまだwhereにたどり着くまでにmaxの処理は終わっていません。
無理やりmax(費用)と入力するとエラーが出てしまいます。
それを回避するためには、
select max(費用) from プレゼント;
select 品目,費用 from プレゼント where 費用 = (1つ目のSQLで出た数値);
と入力することでエラーを回避できます。
しかしこれではSQL文を二度書く手間に。
そこでこの副問い合わせを使用すると
select 品目, 費用 from プレゼント
where 費用 = (select max(費用) from プレゼント);
と入力することで1つのSQLにできました。
まとめ
副問い合わせの基本的な部分に触れていきました。