SlideShare a Scribd company logo
1 of 24
Download to read offline
演習問題
1
実践SQL
演習問題
2
環境
• VM(仮想マシン)の中にPostgreSQL(バージョン11)の環境が構築
されています。
• 環境構築の資料を参考に「axizdb_sql_lesson」のDBに接続してくださ
い。
• postgresqlにログイン済みの場合
• 未ログインの場合
3
> ¥c axizdb_sql_lesson
$ psql –U axiz –d axizdb_sql_lesson
演習問題
• 演習問題(テーブル一覧)
演習では以下のテーブルを使用します。
• 商品カテゴリ(category)
• 商品(products)
• 顧客(customer)
• 仕入先(supplier)
• 販売(sales)
• 購買(purchases)
• 商品_複数(products_munlti)
4
演習問題
• 演習問題(テーブル定義)
5
商品カテゴリ category
論理名 物理名 型 primary key
商品カテゴリID category_id integer 〇
商品カテゴリ名 category_name varchar(50)
商品 products
論理名 物理名 型 primary key
商品ID products_id integer 〇
商品名 products_name varchar(50)
商品カテゴリID category_id integer
仕入単価 p_price real
販売単価 s_price real
演習問題
• 演習問題(テーブル定義)
6
顧客 customer
論理名 物理名 型 primary key
顧客ID customer_id integer 〇
顧客名 customer_name varchar(50)
仕入先 supplier
論理名 物理名 型 primary key
仕入先ID supplier_id integer 〇
仕入先名 supplier_name varchar(50)
演習問題
• 演習問題(テーブル定義)
7
販売 sales
論理名 物理名 型 primary key
販売ID sales_id integer 〇
顧客ID customer_id integer
販売日付 sales_date date
商品ID products_id integer
販売数量 unit_sales real
購買 purchases
論理名 物理名 型 primary key
購入ID purchases_id integer 〇
仕入先ID supplier_id integer
購入日付 purchases_date date
商品ID products_id integer
購入数量 unit_purchases real
演習問題
• 演習問題(SELECT)
1. 名称の表示(結合)
2. 商品ごとの販売数(結合、集約)
3. 販売金額が1万以上の商品(結合、集約)
4. 取引履歴(集合演算)
5. 在庫数(集合演算、集約)
6. 商品の組み合わせ(結合)
7. 販売が存在するデータ(サブクエリ、結合、集約)
8. 販売が存在しないデータ(サブクエリ、結合、集約)
9. 月別の販売合計金額(結合、集約、関数)
10. ランク別の商品件数(case式、集約)
11. 縦から横(case式、max関数)
12. 月別カテゴリ別販売合計金額( case式、集約、関数)
13. 横から縦(クロス結合、case式)
14. 商品単価順(Windows関数)
15. 顧客別日付別売上ランキング(Windows関数)
16. 古いデータ(Windows関数)
8
演習問題(結合)
• 演習問題(1. 名称の表示)
• 販売(sales)のデータに顧客名、商品名、商品単価が取得できるSQL文を
作成してください。並び順は販売日付の昇順
• 対象テーブル:商品(products), 販売(sales), 顧客(customer)
9
期待する結果(資料の都合上10件のみ表示)
顧客名 商品名 販売日付 販売単価 販売個数
川上商店 りんご 2018/07/01 120 7
川上商店 みかん 2018/07/04 150 12
中山商事 りんご 2018/07/05 120 11
川上商店 ボールペン 2018/07/05 300 4
川上商店 電池 2018/07/09 400 1
川上商店 椅子 2018/07/15 2000 2
中山商事 みかん 2018/07/16 150 7
川上商店 地球儀 2018/07/19 5000 1
川上商店 りんご 2018/07/20 120 15
中山商事 ボールペン 2018/07/25 300 10
演習問題(結合、集約)
• 演習問題(2. 商品ごとの販売数)
• 販売(sales)を元に、商品ごとの販売合計個数を取得するSQL文を作成し
てください。
• 対象テーブル:商品(products), 販売(sales)
10
期待する結果
商品名 販売単価 販売個数
りんご 120 38
みかん 150 57
ボールペン 300 21
電池 400 3
コップ 700 8
椅子 2000 9
地球儀 5000 2
演習問題(結合、集約)
• 演習問題(3. 販売金額が1万円以上の商品)
• 販売(sales)を元に、販売金額が1万円以上の商品を取得するSQL文を作
成してください。
• 対象テーブル:商品(products), 販売(sales)
11
期待する結果
商品名 販売単価 販売個数 販売金額
椅子 2000 9 18000
地球儀 5000 2 10000
演習問題(集合演算)
• 演習問題(4. 取引履歴)
• 仕入と売上を同時に取得するSQL文を作成してください。
• 並び順は取引日付の昇順とする。
• 対象テーブル:販売(sales), 購買(purchases), 商品(products)
12
取引名 取引日付 商品名 数量
仕入 2018/7/1 ボールペン 50
仕入 2018/7/1 コップ 50
仕入 2018/7/1 バナナ 50
仕入 2018/7/1 椅子 50
仕入 2018/7/1 ティッシュ 50
仕入 2018/7/1 りんご 50
仕入 2018/7/1 地球儀 50
仕入 2018/7/1 電池 50
売上 2018/7/1 りんご 7
仕入 2018/7/1 みかん 50
売上 2018/7/4 みかん 12
売上 2018/7/5 ボールペン 4
売上 2018/7/5 りんご 11
期待する結果
ヒント
集合演算を使用してみよう。
演習問題(集合演算、集約)
• 演習問題(5. 在庫数)
• 商品ごとの在庫数(仕入数 – 売上数)を取得するSQLを作成してくだ
さい。
• 対象テーブル:販売(sales), 購買(purchases), 商品(products)
13
商品名 在庫数
りんご 12
みかん -7
バナナ 50
ボールペン 29
ティッシュ 50
電池 47
コップ 42
椅子 43
地球儀 49
期待する結果
ヒント
unionした結果をgroup byすると…
演習問題(結合)
• 演習問題(6. 商品の組み合わせ)
• 商品テーブル(products)から、商品の組み合わせを出力するSQLを作成
してください。(図は一部抜粋)
• 対象テーブル:商品(products)
14
商品名1 商品名2
みかん りんご
バナナ りんご
バナナ みかん
ボールペン りんご
ボールペン みかん
ボールペン バナナ
ティッシュ りんご
ティッシュ みかん
ティッシュ バナナ
ティッシュ ボールペン
期待する結果
ヒント
自己結合で結合条件を工夫してみよう。
演習問題(サブクエリ、結合、集約)
• 演習問題(7. 販売が存在するデータ)
• 一度でも販売されたことのある商品(salesにデータがある)を取得する
SQL文を作成してください。
• 対象テーブル」商品(products), 販売(sales)
15
products_id products_name category_id p_price s_price
1 りんご 1 100 120
2 みかん 1 120 150
4 ボールペン 2 260 300
6 電池 2 370 400
7 コップ 3 600 700
8 椅子 3 1700 2000
9 地球儀 3 4100 5000
期待する結果
ヒント
実現方法は1つではありません。
複数のやり方があります。
1 existsを使用する
2 inとサブクエリを使用する
3 joinとgroup by を使用する
演習問題(サブクエリ、結合、集約)
• 演習問題(8. 販売が存在しないデータ)
• 一度も販売されていない商品(salesにデータがない)を検索するSQL文を
作成してください。
• 対象テーブル:商品(products), 販売(sales)
16
products_id products_name category_id p_price s_price
3 バナナ 1 240 300
5 ティッシュ 2 180 250
期待する結果
ヒント
先ほどの問題の逆を考えましょう。
演習問題(結合、集約、関数)
• 演習問題(9. 月別の販売合計金額)
• 月単位の売上合計金額を取得するSQL文を作成してください。
• 対象テーブル:商品(products), 販売(sales)
17
売上月 売上金額
2018-07 20410
2018-08 13200
2018-09 20600
期待する結果
ヒント
to_char関数を使ってみよう。
演習問題(case式、集約)
• 演習問題(10. ランク別商品件数)
• 商品を単価の値によって分類し、その商品が何アイテムあるかをカウ
ントするSQL文を作成してください。
• 対象テーブル:商品(products)
18
ランク count
0~300 5
1000~ 2
300~1000 2
期待する結果
ヒント
case式を使用します。
case式はselect句以外でも使用できます。
演習問題(case式、max関数)
• 演習問題(11. 縦から横)
• 商品カテゴリを1レコードにまとめて取得するSQL文を作成してくださ
い。
• 対象テーブル:商品カテゴリ(category)
19
カテゴリ名
食品
日用品
雑貨
カテゴリ1 カテゴリ2 カテゴリ3
食品 日用品 雑貨
期待する結果
ヒント
case式とmax関数の合わせ技!
演習問題(case式、集約、関数)
• 演習問題(12. 月別カテゴリ別販売合計金額)
• 月単位で、カテゴリ別の売上合計金額を取得するSQL文を作成してく
ださい。
• 対象テーブル:販売(sales), 商品(products)商品
20
売上月 食品売上 日用品売上 雑貨売上
2018-07 6810 4400 9000
2018-08 3600 0 9600
2018-09 2700 2900 15000
期待する結果
ヒント
to_char関数、group by、case式、
sum関数をうまく組み合わせよう!
演習問題(クロス結合、case式)
• 演習問題(13. 横から縦)
• 以下の様に1レコードに複数の情報を持つテーブルに対して
• データを複数のレコードに分けて取得できるようなSQL文を作成して
ください。
• 対象テーブル:商品_複数(products_multi)
21
id1 name1 price1 id2 name2 price2 id3 name3 price3
1 リング 100 2 みかん 200 3 バナナ 300
id name price
1 リンゴ 100
2 みかん 200
3 バナナ 300
期待する結果
ヒント
unionした結果をgroup byすると…
演習問題(Window関数)
• 演習問題(14. 商品単価順)
• products(商品)をs_price(販売単価)の安い順にランク付けするSQL文を作
成してください。
• 対象テーブル:商品(products)
22
商品名 値段 ランク
りんご 120 1
みかん 150 2
ティッシュ 250 3
バナナ 300 4
ボールペン 300 4
電池 400 6
コップ 700 7
椅子 2000 8
地球儀 5000 9
期待する結果
ヒント
Windows関数を使用すると簡単にできる。
演習問題(Window関数)
• 演習問題(15. 顧客別日付別売上ランキング)
• 顧客・日付単位で、購売上金額のランキングを出力するSQLを作成し
てください。
• 対象テーブル:販売(sales), 商品(products), 顧客(customer)
23
顧客名 売上日付 商品名 売上金額 ランク
川上商店 2018/7/19 地球儀 4100 1
川上商店 2018/8/20 椅子 3400 2
川上商店 2018/7/15 椅子 3400 2
川上商店 2018/8/10 みかん 2400 4
川上商店 2018/9/3 ボールペン 1820 5
川上商店 2018/7/20 りんご 1500 6
川上商店 2018/7/4 みかん 1440 7
川上商店 2018/7/5 ボールペン 1040 8
川上商店 2018/7/1 りんご 700 9
川上商店 2018/7/9 電池 370 10
中山商事 2018/9/5 椅子 8500 1
中山商事 2018/8/15 コップ 4800 2
中山商事 2018/9/3 地球儀 4100 3
中山商事 2018/7/25 ボールペン 2600 4
期待する結果
ヒント
Windows関数を使用しましょう。
演習問題(Window関数)
• 演習問題(16. 古いデータ)
• 販売テーブル(sales)から、商品ごとの販売日が一番古いデータを出力
するSQLを作成してください。
• 対象テーブル:商品(products), 販売(sales)
24
商品名 売上日付
りんご 2018/7/1
みかん 2018/7/4
ボールペン 2018/7/5
電池 2018/7/9
コップ 2018/8/15
椅子 2018/7/15
地球儀 2018/7/19
期待する結果
ヒント
Windows関数を上手に使おう。

More Related Content

Similar to 2019年度 若手技術者向け講座 SQL演習

Beginners guidetoconceptualmodelingbyuml
Beginners guidetoconceptualmodelingbyumlBeginners guidetoconceptualmodelingbyuml
Beginners guidetoconceptualmodelingbyumlHirohideYazaki
 
データベース技術 3(Database_3)
データベース技術 3(Database_3)データベース技術 3(Database_3)
データベース技術 3(Database_3)Yuka Obu
 
ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報yoyamasaki
 
2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックス2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックスkeki3
 
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできる
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできるTECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできる
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできるQlikPresalesJapan
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
MySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL WorkbenchMySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL Workbenchyoyamasaki
 
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介Mitsuru Katoh
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ聡 中川
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Shotaro Suzuki
 

Similar to 2019年度 若手技術者向け講座 SQL演習 (10)

Beginners guidetoconceptualmodelingbyuml
Beginners guidetoconceptualmodelingbyumlBeginners guidetoconceptualmodelingbyuml
Beginners guidetoconceptualmodelingbyuml
 
データベース技術 3(Database_3)
データベース技術 3(Database_3)データベース技術 3(Database_3)
データベース技術 3(Database_3)
 
ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報
 
2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックス2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックス
 
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできる
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできるTECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできる
TECHTALK 20200715 分析データをセルフサービスで準備ーデータマネージャーでもっとできる
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
MySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL WorkbenchMySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL Workbench
 
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介
Notes クライアント上のすべての項目を一括管理、変更も可能なクライアント管理ツール「panagenda MarvelClient」のご紹介
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5
 

More from keki3

Computer terminology
Computer terminologyComputer terminology
Computer terminologykeki3
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programmingkeki3
 
2019年度 若手技術者向け講座 デザインパターン 演習問題
2019年度 若手技術者向け講座 デザインパターン 演習問題2019年度 若手技術者向け講座 デザインパターン 演習問題
2019年度 若手技術者向け講座 デザインパターン 演習問題keki3
 
2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターンkeki3
 
2019年度 若手技術者向け講座 リファクタリング
2019年度 若手技術者向け講座 リファクタリング2019年度 若手技術者向け講座 リファクタリング
2019年度 若手技術者向け講座 リファクタリングkeki3
 
2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UMLkeki3
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向keki3
 
Wakatemukekouza2019 web
Wakatemukekouza2019 webWakatemukekouza2019 web
Wakatemukekouza2019 webkeki3
 
2019 若手技術者向け講座 DB設計
2019 若手技術者向け講座 DB設計2019 若手技術者向け講座 DB設計
2019 若手技術者向け講座 DB設計keki3
 
2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQLkeki3
 
2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能keki3
 
2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画keki3
 
2018年度 若手技術者向け講座 デザインパターン
2018年度 若手技術者向け講座 デザインパターン2018年度 若手技術者向け講座 デザインパターン
2018年度 若手技術者向け講座 デザインパターンkeki3
 
2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UMLkeki3
 
2018年度 若手技術者向け講座 オブジェクト指向01
2018年度 若手技術者向け講座 オブジェクト指向012018年度 若手技術者向け講座 オブジェクト指向01
2018年度 若手技術者向け講座 オブジェクト指向01keki3
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリングkeki3
 
2018年度 若手技術者向け講座 DB設計・正規化
2018年度 若手技術者向け講座 DB設計・正規化2018年度 若手技術者向け講座 DB設計・正規化
2018年度 若手技術者向け講座 DB設計・正規化keki3
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理keki3
 
2018年度 若手技術者向け講座 実行計画
2018年度 若手技術者向け講座 実行計画2018年度 若手技術者向け講座 実行計画
2018年度 若手技術者向け講座 実行計画keki3
 
2018年度 若手技術者向け講座 インデックス
2018年度 若手技術者向け講座 インデックス2018年度 若手技術者向け講座 インデックス
2018年度 若手技術者向け講座 インデックスkeki3
 

More from keki3 (20)

Computer terminology
Computer terminologyComputer terminology
Computer terminology
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programming
 
2019年度 若手技術者向け講座 デザインパターン 演習問題
2019年度 若手技術者向け講座 デザインパターン 演習問題2019年度 若手技術者向け講座 デザインパターン 演習問題
2019年度 若手技術者向け講座 デザインパターン 演習問題
 
2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン
 
2019年度 若手技術者向け講座 リファクタリング
2019年度 若手技術者向け講座 リファクタリング2019年度 若手技術者向け講座 リファクタリング
2019年度 若手技術者向け講座 リファクタリング
 
2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向
 
Wakatemukekouza2019 web
Wakatemukekouza2019 webWakatemukekouza2019 web
Wakatemukekouza2019 web
 
2019 若手技術者向け講座 DB設計
2019 若手技術者向け講座 DB設計2019 若手技術者向け講座 DB設計
2019 若手技術者向け講座 DB設計
 
2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL
 
2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能
 
2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画
 
2018年度 若手技術者向け講座 デザインパターン
2018年度 若手技術者向け講座 デザインパターン2018年度 若手技術者向け講座 デザインパターン
2018年度 若手技術者向け講座 デザインパターン
 
2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML
 
2018年度 若手技術者向け講座 オブジェクト指向01
2018年度 若手技術者向け講座 オブジェクト指向012018年度 若手技術者向け講座 オブジェクト指向01
2018年度 若手技術者向け講座 オブジェクト指向01
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
2018年度 若手技術者向け講座 DB設計・正規化
2018年度 若手技術者向け講座 DB設計・正規化2018年度 若手技術者向け講座 DB設計・正規化
2018年度 若手技術者向け講座 DB設計・正規化
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
2018年度 若手技術者向け講座 実行計画
2018年度 若手技術者向け講座 実行計画2018年度 若手技術者向け講座 実行計画
2018年度 若手技術者向け講座 実行計画
 
2018年度 若手技術者向け講座 インデックス
2018年度 若手技術者向け講座 インデックス2018年度 若手技術者向け講座 インデックス
2018年度 若手技術者向け講座 インデックス
 

2019年度 若手技術者向け講座 SQL演習

  • 4. 演習問題 • 演習問題(テーブル一覧) 演習では以下のテーブルを使用します。 • 商品カテゴリ(category) • 商品(products) • 顧客(customer) • 仕入先(supplier) • 販売(sales) • 購買(purchases) • 商品_複数(products_munlti) 4
  • 5. 演習問題 • 演習問題(テーブル定義) 5 商品カテゴリ category 論理名 物理名 型 primary key 商品カテゴリID category_id integer 〇 商品カテゴリ名 category_name varchar(50) 商品 products 論理名 物理名 型 primary key 商品ID products_id integer 〇 商品名 products_name varchar(50) 商品カテゴリID category_id integer 仕入単価 p_price real 販売単価 s_price real
  • 6. 演習問題 • 演習問題(テーブル定義) 6 顧客 customer 論理名 物理名 型 primary key 顧客ID customer_id integer 〇 顧客名 customer_name varchar(50) 仕入先 supplier 論理名 物理名 型 primary key 仕入先ID supplier_id integer 〇 仕入先名 supplier_name varchar(50)
  • 7. 演習問題 • 演習問題(テーブル定義) 7 販売 sales 論理名 物理名 型 primary key 販売ID sales_id integer 〇 顧客ID customer_id integer 販売日付 sales_date date 商品ID products_id integer 販売数量 unit_sales real 購買 purchases 論理名 物理名 型 primary key 購入ID purchases_id integer 〇 仕入先ID supplier_id integer 購入日付 purchases_date date 商品ID products_id integer 購入数量 unit_purchases real
  • 8. 演習問題 • 演習問題(SELECT) 1. 名称の表示(結合) 2. 商品ごとの販売数(結合、集約) 3. 販売金額が1万以上の商品(結合、集約) 4. 取引履歴(集合演算) 5. 在庫数(集合演算、集約) 6. 商品の組み合わせ(結合) 7. 販売が存在するデータ(サブクエリ、結合、集約) 8. 販売が存在しないデータ(サブクエリ、結合、集約) 9. 月別の販売合計金額(結合、集約、関数) 10. ランク別の商品件数(case式、集約) 11. 縦から横(case式、max関数) 12. 月別カテゴリ別販売合計金額( case式、集約、関数) 13. 横から縦(クロス結合、case式) 14. 商品単価順(Windows関数) 15. 顧客別日付別売上ランキング(Windows関数) 16. 古いデータ(Windows関数) 8
  • 9. 演習問題(結合) • 演習問題(1. 名称の表示) • 販売(sales)のデータに顧客名、商品名、商品単価が取得できるSQL文を 作成してください。並び順は販売日付の昇順 • 対象テーブル:商品(products), 販売(sales), 顧客(customer) 9 期待する結果(資料の都合上10件のみ表示) 顧客名 商品名 販売日付 販売単価 販売個数 川上商店 りんご 2018/07/01 120 7 川上商店 みかん 2018/07/04 150 12 中山商事 りんご 2018/07/05 120 11 川上商店 ボールペン 2018/07/05 300 4 川上商店 電池 2018/07/09 400 1 川上商店 椅子 2018/07/15 2000 2 中山商事 みかん 2018/07/16 150 7 川上商店 地球儀 2018/07/19 5000 1 川上商店 りんご 2018/07/20 120 15 中山商事 ボールペン 2018/07/25 300 10
  • 10. 演習問題(結合、集約) • 演習問題(2. 商品ごとの販売数) • 販売(sales)を元に、商品ごとの販売合計個数を取得するSQL文を作成し てください。 • 対象テーブル:商品(products), 販売(sales) 10 期待する結果 商品名 販売単価 販売個数 りんご 120 38 みかん 150 57 ボールペン 300 21 電池 400 3 コップ 700 8 椅子 2000 9 地球儀 5000 2
  • 11. 演習問題(結合、集約) • 演習問題(3. 販売金額が1万円以上の商品) • 販売(sales)を元に、販売金額が1万円以上の商品を取得するSQL文を作 成してください。 • 対象テーブル:商品(products), 販売(sales) 11 期待する結果 商品名 販売単価 販売個数 販売金額 椅子 2000 9 18000 地球儀 5000 2 10000
  • 12. 演習問題(集合演算) • 演習問題(4. 取引履歴) • 仕入と売上を同時に取得するSQL文を作成してください。 • 並び順は取引日付の昇順とする。 • 対象テーブル:販売(sales), 購買(purchases), 商品(products) 12 取引名 取引日付 商品名 数量 仕入 2018/7/1 ボールペン 50 仕入 2018/7/1 コップ 50 仕入 2018/7/1 バナナ 50 仕入 2018/7/1 椅子 50 仕入 2018/7/1 ティッシュ 50 仕入 2018/7/1 りんご 50 仕入 2018/7/1 地球儀 50 仕入 2018/7/1 電池 50 売上 2018/7/1 りんご 7 仕入 2018/7/1 みかん 50 売上 2018/7/4 みかん 12 売上 2018/7/5 ボールペン 4 売上 2018/7/5 りんご 11 期待する結果 ヒント 集合演算を使用してみよう。
  • 13. 演習問題(集合演算、集約) • 演習問題(5. 在庫数) • 商品ごとの在庫数(仕入数 – 売上数)を取得するSQLを作成してくだ さい。 • 対象テーブル:販売(sales), 購買(purchases), 商品(products) 13 商品名 在庫数 りんご 12 みかん -7 バナナ 50 ボールペン 29 ティッシュ 50 電池 47 コップ 42 椅子 43 地球儀 49 期待する結果 ヒント unionした結果をgroup byすると…
  • 14. 演習問題(結合) • 演習問題(6. 商品の組み合わせ) • 商品テーブル(products)から、商品の組み合わせを出力するSQLを作成 してください。(図は一部抜粋) • 対象テーブル:商品(products) 14 商品名1 商品名2 みかん りんご バナナ りんご バナナ みかん ボールペン りんご ボールペン みかん ボールペン バナナ ティッシュ りんご ティッシュ みかん ティッシュ バナナ ティッシュ ボールペン 期待する結果 ヒント 自己結合で結合条件を工夫してみよう。
  • 15. 演習問題(サブクエリ、結合、集約) • 演習問題(7. 販売が存在するデータ) • 一度でも販売されたことのある商品(salesにデータがある)を取得する SQL文を作成してください。 • 対象テーブル」商品(products), 販売(sales) 15 products_id products_name category_id p_price s_price 1 りんご 1 100 120 2 みかん 1 120 150 4 ボールペン 2 260 300 6 電池 2 370 400 7 コップ 3 600 700 8 椅子 3 1700 2000 9 地球儀 3 4100 5000 期待する結果 ヒント 実現方法は1つではありません。 複数のやり方があります。 1 existsを使用する 2 inとサブクエリを使用する 3 joinとgroup by を使用する
  • 16. 演習問題(サブクエリ、結合、集約) • 演習問題(8. 販売が存在しないデータ) • 一度も販売されていない商品(salesにデータがない)を検索するSQL文を 作成してください。 • 対象テーブル:商品(products), 販売(sales) 16 products_id products_name category_id p_price s_price 3 バナナ 1 240 300 5 ティッシュ 2 180 250 期待する結果 ヒント 先ほどの問題の逆を考えましょう。
  • 17. 演習問題(結合、集約、関数) • 演習問題(9. 月別の販売合計金額) • 月単位の売上合計金額を取得するSQL文を作成してください。 • 対象テーブル:商品(products), 販売(sales) 17 売上月 売上金額 2018-07 20410 2018-08 13200 2018-09 20600 期待する結果 ヒント to_char関数を使ってみよう。
  • 18. 演習問題(case式、集約) • 演習問題(10. ランク別商品件数) • 商品を単価の値によって分類し、その商品が何アイテムあるかをカウ ントするSQL文を作成してください。 • 対象テーブル:商品(products) 18 ランク count 0~300 5 1000~ 2 300~1000 2 期待する結果 ヒント case式を使用します。 case式はselect句以外でも使用できます。
  • 19. 演習問題(case式、max関数) • 演習問題(11. 縦から横) • 商品カテゴリを1レコードにまとめて取得するSQL文を作成してくださ い。 • 対象テーブル:商品カテゴリ(category) 19 カテゴリ名 食品 日用品 雑貨 カテゴリ1 カテゴリ2 カテゴリ3 食品 日用品 雑貨 期待する結果 ヒント case式とmax関数の合わせ技!
  • 20. 演習問題(case式、集約、関数) • 演習問題(12. 月別カテゴリ別販売合計金額) • 月単位で、カテゴリ別の売上合計金額を取得するSQL文を作成してく ださい。 • 対象テーブル:販売(sales), 商品(products)商品 20 売上月 食品売上 日用品売上 雑貨売上 2018-07 6810 4400 9000 2018-08 3600 0 9600 2018-09 2700 2900 15000 期待する結果 ヒント to_char関数、group by、case式、 sum関数をうまく組み合わせよう!
  • 21. 演習問題(クロス結合、case式) • 演習問題(13. 横から縦) • 以下の様に1レコードに複数の情報を持つテーブルに対して • データを複数のレコードに分けて取得できるようなSQL文を作成して ください。 • 対象テーブル:商品_複数(products_multi) 21 id1 name1 price1 id2 name2 price2 id3 name3 price3 1 リング 100 2 みかん 200 3 バナナ 300 id name price 1 リンゴ 100 2 みかん 200 3 バナナ 300 期待する結果 ヒント unionした結果をgroup byすると…
  • 22. 演習問題(Window関数) • 演習問題(14. 商品単価順) • products(商品)をs_price(販売単価)の安い順にランク付けするSQL文を作 成してください。 • 対象テーブル:商品(products) 22 商品名 値段 ランク りんご 120 1 みかん 150 2 ティッシュ 250 3 バナナ 300 4 ボールペン 300 4 電池 400 6 コップ 700 7 椅子 2000 8 地球儀 5000 9 期待する結果 ヒント Windows関数を使用すると簡単にできる。
  • 23. 演習問題(Window関数) • 演習問題(15. 顧客別日付別売上ランキング) • 顧客・日付単位で、購売上金額のランキングを出力するSQLを作成し てください。 • 対象テーブル:販売(sales), 商品(products), 顧客(customer) 23 顧客名 売上日付 商品名 売上金額 ランク 川上商店 2018/7/19 地球儀 4100 1 川上商店 2018/8/20 椅子 3400 2 川上商店 2018/7/15 椅子 3400 2 川上商店 2018/8/10 みかん 2400 4 川上商店 2018/9/3 ボールペン 1820 5 川上商店 2018/7/20 りんご 1500 6 川上商店 2018/7/4 みかん 1440 7 川上商店 2018/7/5 ボールペン 1040 8 川上商店 2018/7/1 りんご 700 9 川上商店 2018/7/9 電池 370 10 中山商事 2018/9/5 椅子 8500 1 中山商事 2018/8/15 コップ 4800 2 中山商事 2018/9/3 地球儀 4100 3 中山商事 2018/7/25 ボールペン 2600 4 期待する結果 ヒント Windows関数を使用しましょう。
  • 24. 演習問題(Window関数) • 演習問題(16. 古いデータ) • 販売テーブル(sales)から、商品ごとの販売日が一番古いデータを出力 するSQLを作成してください。 • 対象テーブル:商品(products), 販売(sales) 24 商品名 売上日付 りんご 2018/7/1 みかん 2018/7/4 ボールペン 2018/7/5 電池 2018/7/9 コップ 2018/8/15 椅子 2018/7/15 地球儀 2018/7/19 期待する結果 ヒント Windows関数を上手に使おう。