BLOG

【プログラマー 研修 Java】 あおの記録6



こんにちは、あおです\(^0^)/





今日講師から「お昼を食べないのか」と聞かれました。お腹が空かないわけではないのですが、

毎時間ずっとジュースを飲んでいるため、あまりご飯を食べたいという気持ちにならなくて…。



心配していただきましたが、ほんとに栄養失調で倒れたらどうしよう(笑)。

こんな毎日多量のジュースを飲んでいるが、大丈夫なのだろうか…。



なんか落ち着かないんですよね、飲み物が近くにないと…。

タバコ中毒に似ているんでしょうか…。

私はタバコの臭いが嫌いなのでタバコは吸わないのですが(笑)。













そういえば昨日、家に帰る途中とある出来事が起こりまして。












いつも通りスーパーで買い物をした後帰り道を歩いていると…。













女性「こんばんわぁ~」



夜道で急に声をかけられて、私は思わずハッとしました。



携帯をいじってたからなおさらびっくりしましたが…。






なんだろうと思って話を聞いたら…。

























営業でした。






女性「テレビで紹介された商品を売ってるんですけど、お1ついかがですかぁ~」



自分「そうなんですね…。いあーーまぁ、大丈夫かな((;’∀’))」



女性「甘いのとかお好きじゃないですか?チョコとか生クリームが入っているんですけど~」



自分「ごめんなさい、自分甘いのは好きじゃないんですよ。チョコとか嫌いなので…。」



女性「いちご味もあるんですよ~」



自分「いちごはもっと嫌いです…。そもそも甘い食べ物は買わないんですよ。」



女性「ならチーズケーキとかどうですか?このチーズケーキは甘くなくて美味しいですよ!」



自分「まぁ、食べれなくはないですが…。」



女性「良かったら見ていってくださーい」



そういって女性は台車の中からメニューを取り出し、私に差し出してきた。









自分「(てかほんと甘いの多いな………。えっチーズケーキ1200円するじゃん、たかっ!!!)」






女性「どうですか?人気の商品も多くて…。売り切れてしまったのも多いんですよ」



自分「へぇーそうなんですね…。まぁチーズケーキ買ってもなぁ…。」



女性「誕生日の方とかいらっしゃったりしませんか?1ヶ月以上日持ちするので~」



自分「あっ、自分が一昨日誕生日でした…。」



女性「おめでとうございます!ケーキ食べましたか?」



自分「いや、ケーキ買う機会もなかったので…。」



女性「なら是非とも(*’ω’*)甘くないのでオススメですよぉ~」













自分「…はい、…じゃあ1つください。」



女性「ありがとうございます!」













こうして買う気がなかったチーズケーキを買ってしまいました(・・ ; )



まぁ見知らぬ私に声かけて頑張ってたし、寒い中サジェストしてくれたからと…。


こんな経験は人生初めてです…。












1000円もあればおいしいお刺身買えたのに(><)



ネタになったからよしとしよう(笑)。


チーズはめっちゃ好きなので!せっかくの機会だったし、大事に食べたいと思います(^0^)/






雑談はここまで!本日の研修内容を書いていきます。



◆本日の内容

 
 今日はJavaの課題「7.テーブル結合」をメインに学習しましたが、前回のブログでお伝えした通り、

「副問い合わせ」を記載したいと思います。


今日は主に以下の内容を学習いたしました

 ・グループ化
 ・副問い合わせ
 ・テーブル結合


◆所感


 副問い合わせはほんと難しかったです…。そもそも副問い合わせと聞いて、イメージしづらい言葉で…。


 今までSQLではSELECTで目的とする列を指定していましたが、なんとこのSELECTを2度以上

使うという…。そしてより細かく指定するのに用いるときに使います。


 簡単なイメージでいうとSELECT文に対して更にSELECT文を用いる感じです。



~売上記録・返品記録~


 

SELECT * FROM test.products;
INSERT INTO test.products
VALUES
(1,"りんご",200,0),
(2,"バナナ",150,0),
(3,"みかん",100,0),
(4,"ぶどう",250,0),
(5,"スーパードライ",300,1),
(6,"ミルクティー",100,1);


/* データの消去 */
SELECT * FROM test.products;
TRUNCATE TABLE test.products;


/*売れてない商品名一覧の抽出*/
SELECT product_name
FROM
	products
WHERE
	product_code
NOT IN
(
	SELECT 
		product_code
	FROM
		sales
)
;


/* 返品されてしまった商品名一覧の確認方法 */
SELECT product_name
FROM
	products
WHERE
	product_code
IN
(
	SELECT
		product_code
	FROM
		sales
	WHERE
		sale_type = -1
)
;


/* スーパードライの売れた本数 */
SELECT product_code, product_name, 
(
	SELECT
		SUM(sale_count)
	FROM
		sales
	WHERE
		sale_date
    BETWEEN
		"2019-06-01"
	AND
		"2019-08-31"
) AS total
FROM
	products
WHERE
	product_code = 5
;


/* 返品を考慮した売上数量 */
SELECT product_code,
(
	CASE
		sale_type
	WHEN
		-1
	THEN
		-sale_count
	ELSE
		sale_count
	END
) AS sale_count_tmp
FROM
	sales;

SELECT product_code, SUM(sale_count_tmp) AS total_count
FROM
(	SELECT product_code,
(
	CASE 
		sale_type
	WHEN 
		-1
	THEN 
		sale_count * -1
	ELSE 
		sale_count
	END
) AS sale_count_tmp
FROM
	sales
) AS dm
GROUP BY
	product_code
ORDER BY
	total_count desc;

 

SELECT * FROM test.sales;
INSERT INTO test.sales
VALUES
(200,2,1,"2020-02-10",1),
(300,3,3,"2020-02-10",1),
(400,4,3,"2020-02-10",1),
(500,5,20,"2019-07-07",1),
(600,5,40,"2019-08-01",1),
(700,5,30,"2019-10-01",1),
(800,6,70,"2020-02-01",1),
(900,6,5,"2020-02-02",-1);

 


 上記の通り、SELECTの中でSELECTを使っていますが、これが副問い合わせです。私も初めて見たとき

混乱していてよくわからなかったのですが、一つ一つ落ち着いて見ていけば、何をしているかわかります。


 例えば17行目の”売れてない商品名一覧の抽出”では、いつも通りテーブルの指定やカラムの指定は

問題ないと思います。副問い合わせと NOT IN を組み合わせることによってsalesテーブルに

product_codeの値がないものを指定しています。 今回の場合、以下のような出力になります。



                product_name
              ——————————————
                  りんご



 また、33行目の”返品されてしまった商品名一覧の確認方法”ではWHEREで条件を指定していてsalesテーブルの

product_codeの値が一致したものを指定しています。 今回の場合、以下のような出力になります。



                product_name
              ——————————————
                 ミルクティー



 また、51行目の”スーパードライの売れた本数”では、6月~8月と問題文にて指定があったのでWHEREで条件を

指定しつつさらにBETWEENで日にちのどっからどこまでを指定しました。カウント数にはtotal というカラム名を

つけました。外側ではスーパードライを指定するため、ここでもWHEREを使います。 今回の場合、以下のような

出力になります。



             SUM(entry_exit)| product_name   |  total
            —————————————————————————————
                5   | スーパードライ  |   60



 また、72行目の”返品を考慮した売上数量”ではsale_count_tmpというカラムを作っています。

sale_countの値がマイナスであれば返品の記録であり、逆にプラスであれば売上の記録である。

このことをCASE式にて条件を指定しています。そしてsale_count_tmpにて各値を表示しています。

あとはSUMを使って返品を考慮した売上数量を表しています。 今回の場合、以下のような出力になります。




               product_code |  sale_count_tmp
              —————————————————————
                  2    |     1
                  3    |     3
                  4    |     4
                  5    |    20
                  5    |    40
                  5    |    30
                  6    |    70
                  6    |    -5


               product_code |   total_count
              —————————————————————
                  5    |    90
                  6    |    65
                  3    |     3
                  4    |     3
                  2    |     1



◆一言

 
 今回、副問い合わせについてブログを記載しました。SELECT文をSELECTで指定するという文字だけだと

何を意味しているのかわかりづらかったです。ただ実際にテーブルを作って記述していくと、どこで何を指定して

いるのかを考えながらできたのでよかったです。



次回は「Java課題」について記載したいと思っております。





では皆さん、次回のブログまでさようなら(*’ω’*)


BLOGトップへ戻る