1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 新・SQL入門編04ドリル(言語選択)
  4. 問題一覧 MySQL編
  5. ウルトラ注文履歴 MySQL編

新・SQL入門編04ドリルのサムネイル
ウルトラ注文履歴 MySQL編(paizaランク D 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

※ この問題集は、動画講座『新・SQL入門編4: テーブルの結合を理解しよう』で学習した内容について反復して練習できるドリルです。分からないことがあれば、動画に戻って復習してみてください。

注文履歴がordered テーブルに、注文内容がordered_menu テーブルに、メニューがmenu テーブルに保存されています。
テーブルの形式は次の通りです。

ordered

#カラム名データ型内容
1ordered_id整数 (int)注文の通し番号
2datetime日時(datetime)注文が行われた日時
3bill整数(int)注文の合計金額



ordered_menu
#カラム名データ型内容
1ordered_id整数 (int)注文の通し番号
2menu_id整数 (int)メニュー番号
3num整数(int)メニューの注文数
4sum整数 (int)小計



menu
#カラム名データ型内容
1menu_id整数 (int)メニュー番号
2category_id整数 (int)カテゴリ番号
3name文字列 (varchar)メニュー名
4price整数 (int)価格



それぞれのテーブルのデータが一部欠損してしまいました。
この3つのテーブルを以下の条件で結合して、すべてのレコードを取得してください。
- 残っている注文履歴に対して、注文内容が1件以上残っているレコードのみ取得する。
- 対応する注文履歴が消えてしまった注文内容や、対応する注文内容がすべて消えてしまった注文履歴は取得しない。
- 注文内容に対し、対応するメニューが消えてしまった場合は、そのメニューはNULLとして出力する。


ヒント


・どのテーブルをどのように結合するか考える必要があります。
FROM テーブル名1 INNER JOIN テーブル名2 ON 条件: 条件テーブル名1テーブル名2を内部結合する
FROM テーブル名1 RIGHT OUTER JOIN テーブル名2 ON 条件: 条件テーブル名1テーブル名2を右外部結合する
FROM テーブル名1 LEFT OUTER JOIN テーブル名2 ON 条件: 条件テーブル名1テーブル名2を左外部結合する
・JOIN句を続けて書くことで3つ以上のテーブルを結合できる

入力例1
ordered テーブル
ordered_iddatetimebill
12021-12-17 9:31200
22021-12-17 9:46250
32021-12-17 10:91050
.........
ordered_menu テーブル
ordered_idmenu_idnumsum
1141200
2211250
381350
............
menu テーブル
menu_idcategory_idnameprice
11ハンバーガー200
21チーズバーガー250
31チキンバーガー300
............
出力例1
ordered_id datetime bill ordered_id menu_id num sum menu_id category_id name price
1 2021-12-17 09:31:00 200 1 14 1 200 NULL NULL NULL NULL
3 2021-12-17 10:09:00 1050 3 8 1 350 8 1 ダブルチーズバーガー 350
3 2021-12-17 10:09:00 1050 3 15 2 300 NULL NULL NULL NULL
...

問題一覧へ戻る

ページの先頭へ戻る