DataBase vol.12
- 複数のテーブル結合を行う
- 自己結合を使う
複数のテーブル結合を行う
問題3-1
テーブルSales、Products、Categoriesを連結し、SalesをCategoryIDでグループ化、
CategoryID,CategoryName,Quantityの合計を表示しなさい。
SELECT p.CategoryID ,c.CategoryName AS "カテゴリ名" ,SUM(s.Quantity) AS "数量合計" FROM Sales AS s JOIN Products AS p ON s.ProductID = p.ProductID JOIN Categories AS c ON c.CategoryID = p.CategoryID GROUP BY c.CategoryID ;
問題4-1
テーブルCustomers、Salesを外部結合してCustomerIDごとのQuantity合計を求めて
CustomerNameと合計を表示しなさい。ただし、Salesデータが存在しないCustomerIDの合計は0を表示しなさい。
SELECT c.CustomerName, SUM( CASE WHEN s.CustomerID IS NULL THEN 0 ELSE s.Quantity END ) AS "販売数量合計" FROM Customers AS c LEFT JOIN Sales AS s ON c.CustomerID = s.CustomerID GROUP BY c.CustomerID ;
- SUMと(の間にスペースを入れたらエラーが出た。
問題4-3
テーブルPrefecturals、Customersを外部結合し、PrefecturalIDごとのCustomersレコード数を求め、
PrefecturalNameとレコード数を表示しなさい。ただしCustomersデータが存在しない場合は0を表示しなさい。
SELECT p.PrefecturalName, COUNT(c.CustomerID) AS "顧客数" FROM Prefecturals AS p LEFT JOIN Customers AS c ON p.PrefecturalID = c.PrefecturalID GROUP BY p.PrefecturalID ;
- COUNTはMySQLの場合、非NULL値をカウントする。
自己結合を使う
- 自分自身と比較するものを自己結合と言う。
SELECT p1.ProductName AS "商品名1", p2.ProductName AS "商品名2", (p1.Price+p2.Price) AS "セット価格" FROM Products AS p1, Products AS p2 WHERE p1.ProductID < p2.ProductID AND p1.ProductID <> p2.ProductID AND (p1.Price+p2.Price) >= 2500 ;
- 絶対に別名を付ける
- <>はNOTイコール