投稿

5月22日(金)3コマ目

イメージ
今日、やったこと case式(以前からのつづき) 今日のホワイトボード case式はselect句以外でも使える。 関数内にcase式 case式の結果を使って関数が動く。 図 関数内にcase式 実行順序は以下の順。 ①case式で性別列の値から集計用人数を生成 図 case式で性別列から集計用人数を生成 ②case式で生成した集計用人数の総和をsum()で計算 図 case式で生成した集計用人数の総和を計算 group by句にcase式 case式の結果でグループ化。 図 group by句にcase式 実行順序は以下の順。 ①case式で給与列の値からxx円台を生成 図 case式で給与列の値からxx円台を生成 ②case式で生成したxx円台でグループ化、各グループの行数をカウント 図 xx円台でグループ化、行数カウント [練習問題]case 問1~問4 case式確認時に使った従業員マスタテーブルは削除。 3つのテーブル作成は以下のとおり。 問5、問6 以前使った 商品マスタテーブル 売上データテーブル を使ってください。 次回は 練習問題の解説。  

5月12日(火)4コマ目

イメージ
今日、やったこと [確認テスト 解説]確認テスト1 今日のホワイトボード [確認テスト 解説]確認テスト1 前回やった確認テストの解説。 問1 「贔屓店舗名」列はない。「店舗名」列に命名した別名。 顧客IDの昇順で並び替えを忘れている人がちょこちょこ。 図 問1 正解例 問2 顧客マスタを自己結合する問題。 図 問2 正解例 以下でも表示は同じですが、以前からちょこちょこ言っていたテーブルの別名と使われ方が一致しません。テーブルの別名と使われ方が一致しないのは×です。 図 問2 テーブルの別名と使われ方が一致しない 問3 贔屓顧客がいない店は、店舗マスタが全行出力されるように顧客マスタと外部結合すると、顧客マスタの列がnullになっている。 図 問3 ① 贔屓顧客がいない店は この結合結果に顧客マスタの列がnullな行を検索すればいい。 図 問3 正解例 nullか否かは is null 。 問4 ちょっと難しいが、問2の応用。 問2は被紹介者(紹介される側)と紹介者(紹介する側)の組み合わせ。 問4では逆に紹介者(紹介する側)と被紹介者(紹介される側)の組み合わせ。 まずは問2のselect句の紹介者と被紹介者を入れ替えると以下のように、この人が紹介したお客さんのようになる。 図 問2のselect句を入れ替え 紹介者がいない人は不要なので、外部結合ではなく、等価結合に変更。 図 外部結合 -> 等価結合 で紹介者がいない顧客を出力しない 紹介者でグループ化、各グループの行数がその人が紹介したお客さんの人数。 図 紹介者でグループ化、行数をカウント 次回は caseのつづき。  

5月8日(金)3コマ目

イメージ
今日、やったこと [確認テスト]確認テスト1 CASE 今日のホワイトボード 単純CASE式と検索CASE式の違い 図 単純CASE式と検索CASE式 単純CASE式は式と比較値が一致する、しないに対して、検索CASE式は条件式が使える。 よって、 単純CASE式でできることは検索CASE式でもできる 検索CASE式でできることの一部は単純CASE式ではできない となる。 単純CASE式 式が比較値と一致すれば、値を返す。 どの比較値とも一致しないときは、(あれば)else以降のデフォルト値を返す。 もし、"else デフォルト値"がなければ、nullを返す。 図 単純CASE式 検索CASE式 when以降の条件式を評価し、OKなら値を返す。 どの条件式もOKにならないときは、(あれば)else以降のデフォルト値を返す。 もし、"else デフォルト値"がなければ、nullを返す。 図 検索CASE式 次回は CASE式のつづき。

4月28日(火)3コマ目

イメージ
今日、やったこと [練習問題]いろいろな結合 [練習問題 解説]いろいろな結合 今日のホワイトボード [練習問題 解説]いろいろな結合 正解例をあげておきます。 問1 図 問1 正解例 xx月中の条件は下図のように何種類か書き方があるが、月末が年、月で変わるため、翌月1日未満が便利(だと思う)。 図 条件「xx月中」 問2 問1からテーブル数が増えた。 図 問2 正解例 問3 1件の売上に対して、 伝票番号 処理日 顧客 担当者 は1対1の関係になる。 よって、伝票番号列だけでグループ化しても、伝票番号列、処理日列、顧客名列、担当者名列の組み合わせでグループ化しても、できるグループは同じ。 図 問3 正解例 問4 売上利益はグループ毎の値。よって、「売上利益が50000以上」はグループに対する条件。 select句でsum(数量*(卸単価 - 仕入単価))に別名”売上利益”を設定している。 売上利益は グループに対する条件(having句) 並び替え(order by句) で使われている。 select句で指定した別名はorder by句では利用可だが、having句では利用できない。 order by句で別名”売上利益”を使うと 図 問4 正解例(select句の別名はorder by句でも使える) having句で別名”売上利益”を使うと 図 問4 having句ではselect句の別名は使えない 問5 自己結合。 図 問6 正解例 以下は テーブルの別名に対して、テーブルの使われ方が一致しない 。 テストでは×にします 。 図 問6 テーブルの別名と使われ方が一致しない => ダメ 上司がいない人(MGR_ID列がnull => 上司テーブルに結合できる行がない)も出力するなら、外部結合。 部下テーブルを全行出力させる。 図 問5 上司がいない人も出力したい => 外部結合 問6 売上のない商品 = 売上データテーブルに登場しない。 結合相手がないデータも出力するには、外部結合。 〇left join 図 問6 正解例 left join版 〇right join 図 問6 正解例 rightjoin版 問7 あまり何も考えずにやってみると以下のようなかんじ。 図 なにも考えずにやってみると 商品数は10だが、検索結果は10行ではない。 ダメ...

4月24日(金)3コマ目

イメージ
今日、やったこと 外部結合 [練習問題]いろいろな結合 今日のホワイトボード いままでの結合では いままでの結合では、結合相手がない行は出力されない。  結合相手がいない = 結合条件を満たさない行  上司のいない太郎さんは出力されない。 図 結合相手がいない行は出力されない 図 結合相手がいない行は出力されない 結合相手がない行も出力したい -> 外部結合 今回の上司のいない太郎さんや、商品マスタテーブルと売上データテーブルを結合して、売り上げ一覧を出力する場合、売り上げがない商品(売上データテーブルに登場しない)も出力したい場合など、結合相手がない行も出力したいときには外部結合を使う。 外部結合は   left join    左側テーブルは結合相手がいない行も出力   right join  右側テーブルは結合相手がいない行も出力 の2種類ある。 図 外部結合(left join、right join) 〇left joinで外部結合 全行出力したい部下テーブルは left join の 左側 に指定。 図 left joinで結合 -> 左側テーブルは全行出力 〇right joinで外部結合 全行出力したい部下テーブルは right join の 右側 に指定。 図 right joinで結合 -> 右側テーブルは全行出力 [練習問題]いろいろな結合 最後の問7はちょっと難しいかも。 select文はDBでどんな順番で処理されるか、その結果どのようになるかを考えてください。 図 select文の処理順序 次回は 練習問題のつづき。 そのあと、練習問題の解説をします。 次々回にテストをします。

4月17日(金)3コマ目

イメージ
今日、やったこと いろいろな結合 等価結合(inner join) 非等価結合 自己結合 今日のホワイトボード DB接続、不要なテーブルを削除 1年次に作ったテーブルを削除。 図 SQLPlusでオラクルDBに接続、不要なテーブルを削除 等価結合 今までfrom句に複数テーブルを指定したときにwhere句に書いた結合条件は指定列の値が等しい行同士を結合する等価結合。 これからはinner joinを使って、from句に結合条件を書く。 図 等価結合(inner joinを使う) 2つのテーブルの場合は以下のとおり。 図 inner joinで等価結合 3つのテーブルの場合は以下のように、結合した結果にさらに結合のイメージ。 図 3つのテーブルをinner joinで結合 結合後、where句に検索条件で検索。 図 from句のinner joinで結合して、where句の検索条件で検索 非等価結合 結合条件は値の等しい行同士を結合だけではない。 条件として成立するなら、等価演算子以外の条件でも可。 図 非等価結合 自己結合 1つのテーブルに異なる別々の別名をつけて、あたかも2つのテーブルがあるようにして、結合することもできる。 図 自己結合 以下は従業員テーブルに上司、部下と別々の別名をつけて、2つのテーブルを結合する。 図 自己結合 部下テーブルは部下情報、上司テーブルは上司情報として扱っている。 自己結合のダメな例 以下は別名と使われ方が一致しない。 図 別名と使われ方が一致しない 下図の左側はダメな例。右側は好ましい。 図 自己結合ダメな例(左側)、好ましい例(右側) 次回は 外部結合 練習問題