ウルトラ注文履歴 MySQL編(paizaランク D 相当)
問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
問題
下記の問題をプログラミングしてみよう!
※ この問題集は、動画講座『新・SQL入門編4: テーブルの結合を理解しよう』で学習した内容について反復して練習できるドリルです。分からないことがあれば、動画に戻って復習してみてください。
注文履歴がordered テーブルに、注文内容がordered_menu テーブルに、メニューがmenu テーブルに保存されています。
テーブルの形式は次の通りです。
ordered
# | カラム名 | データ型 | 内容 |
---|
1 | ordered_id | 整数 (int) | 注文の通し番号 |
2 | datetime | 日時(datetime) | 注文が行われた日時 |
3 | bill | 整数(int) | 注文の合計金額 |
ordered_menu
# | カラム名 | データ型 | 内容 |
---|
1 | ordered_id | 整数 (int) | 注文の通し番号 |
2 | menu_id | 整数 (int) | メニュー番号 |
3 | num | 整数(int) | メニューの注文数 |
4 | sum | 整数 (int) | 小計 |
menu
# | カラム名 | データ型 | 内容 |
---|
1 | menu_id | 整数 (int) | メニュー番号 |
2 | category_id | 整数 (int) | カテゴリ番号 |
3 | name | 文字列 (varchar) | メニュー名 |
4 | price | 整数 (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_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
...
問題一覧へ戻る