DataBase vol.11
- 複数のテーブルの結合を行う(1)続き
- 外部結合を使う
複数のテーブルの結合を行う(1)続き
問題2-1
テーブルSalaryとEmployeesを結合してEmployeeName、PayDate、Amountを
EmployeeID昇順で表示しなさい。
SELECT e.EmployeeID ,e.EmployeeName ,PayDate ,Amount FROM Salary AS s ,Employees AS e WHERE s.EmployeeID = e.EmployeeID ORDER BY e.EmployeeID ,PayDate ;
問題2-3
テーブルSalesとProductsを結合し、SalesをProductIDでグループ化、Quantityの合計が
300以上のデータについてQuantity合計、ProductID、ProductNameを表示しなさい。
SELECT p.ProductID ,p.ProductName ,SUM(s.Quantity) AS "数量合計" FROM Sales AS s ,Products AS p WHERE s.ProductID = p.ProductID GROUP BY s.ProductID HAVING SUM(s.Quantity) >= 300 ;
問題3-3
テーブルSales、Customers、CustomerClassesを結合し、CustomerClassIDでグループ化、
Quantityの最大値、CustomerClassID、CustomerClassNameを表示しなさい。
- 翻訳:法人と個人毎に売り上げた最大数量を求めなさい。
SELECT MAX(s.Quantity) AS "最大数量" ,cc.CustomerClassID ,cc.CustomerClassName AS "顧客クラス名" FROM Sales AS s ,Customers AS c ,CustomerClasses AS cc WHERE c.CustomerClassID = cc.CustomerClassID AND s.CustomerID = c.CustomerID GROUP BY cc.CustomerClassID ;
- 何を出したいかを意識して描くこと。
- 命名規則を意識する。
外部結合を使う
片方にしか値が入っていないものがある場合に結合を行いたい場合に使う。
- 先ほどの結合方法だと双方に値がないものはスルーされる。
LEFT OUTER JOIN
- OUTERがあってもなくてもよい。
- あってもなくてもくっつける
- 結合相手が居ない場合はNULLがでる。
- 数値を演算するものの場合、NULLを0として扱う処理が必要。
- 絶対に出さなければならない部分を大元にする。
Products //大元
LEFT JOIN
Sales //子
ON (条件)
User
ID | Name |
---|---|
1 | obt |
2 | araki |
3 | enomoto |
4 | fukata |
User_Mail
ID | User_ID | Mail_Add |
---|---|---|
1 | 1 | obt@example.com |
2 | 1 | obata@example.com |
3 | 2 | araki@example.com |
4 | 2 | ark@example.com |
5 | 4 | fukata@example.com |
6 | 4 | fkt@example.com |
の場合(LEFT JOIN部分のみ)
User AS U LEFT JOIN User_Mail AS UM ON (U.ID = UM.User_ID)