羅德興老師的教學歷程檔案 - 107-2 資料庫管理系統 - 1. DB SQL (期中複習作業) |
|
|
1. DB SQL (期中複習作業)一、期中複習作業一 請建立一個 資料庫test2
1. 列出 SP 資料表(Relation)中S# 2. 列出 SP 資料表中,各P#(產品編號)之供應量加總。 3. 列出 供應商之供應總金額加總(為P#之供應量*成本價Cost)大於10,000者之供應商。 4. 按供應商 由大到小排序,列出 SP 資料表中所有資料列。 5. 因為 Relation (資料表) SP 中,有一個tuple (記錄) 之 S#為 3,參考到S relation (資料表) 中為 null (缺`值)的`, 故不合referential integrity (參考完整性),請寫SQL更正此一情形。 6. 列出 P 資料表中,未被訂購者的P#(產品編號)與Cost(單價)。 7. 下列SQL可完成什麼? SELECT SP.S#,SUM(qty*cost) AS Total FROM SP , P WHERE SP.P#=P.P# GROUP BY SP.S# ORDER BY Total DESC 8. 列出有訂購30號產品者(P#=30)的S# 與addr(住址)。 9. 列出供應總金額加總為前三名者的S#,P#,qty,cost,與供應總金額加總。 10. 列出 未有訂購產品 的廠商編號與地址。 SQL 測驗參考解答 -- DB SQL 測驗練習 on 2018/10/01 DROP DATABASE IF EXISTS test0; CREATE DATABASE test0; USE test0; -- 利用 AUTO_INCREMENT 自動累加,給該筆記錄一個獨一無二的編號,像是給它一個ID,或是一個Index等等,自動從一開始設定的值 (預設是1) 一直累加上去。 CREATE TABLE supplier ( id int NOT NULL AUTO_INCREMENT, addr varchar(255), PRIMARY KEY (id) ); CREATE TABLE product ( p varchar(255) NOT NULL, cost int, PRIMARY KEY (p) ); CREATE TABLE sp ( s int NOT NULL, p varchar(255) NOT NULL, qty int, PRIMARY KEY (s,p) ); INSERT INTO supplier (addr) VALUES ('TAIPEI'), ('宜蘭'); INSERT INTO product (p, cost) VALUES(10, 210), (20,300), (30,105), (40,90); INSERT INTO sp (s, p, qty) VALUES (1,10,50), (1,30,20), (2,30,10), (2,20,20), (3,10,10); 1. SELECT S# FROM SP 2. -- SP 資料表中,各P#(產品編號)之供應量加總 SELECT P#,SUM(qty) AS '供應量加總' FROM SP GROUP BY P# -- 3 列出 供應商之供應總金額加總(為P#之供應量*成本價Cost)大於10,000者之供應商。USE test0; SELECT s, SUM(qty*cost) AS Total FROM sp JOIN product pp ON sp.p = pp.p GROUP BY s HAVING SUM(qty*cost) > 10000 ORDER BY Total DESC; --4.按供應商 由大到小排序,列出 SP 資料表中所有資料列 SELECT * FROM SP ORDER BY S# DESC --5.因為 Relation SP 中,有一個tuple之 S#為3,參考到S relation 中為null, --故不合referential integrity,請寫SQL更正此一情形。 - 先檢查 USE test0; SELECT * FROM sp WHERE s NOT IN (SELECT id FROM supplier); - 再刪除 USE test0; DELETE FROM sp WHERE s NOT IN (SELECT id FROM supplier); SELECT P.P#,SUM((qty*cost)) AS Total,COUNT(*) AS 筆數 FROM SP JOIN P ON P.P#=SP.P# GROUP BY P.P# 6. -- 列出 product 資料表中,未被訂購者的P#(產品編號)與Cost(單價)。 USE test0; SELECT * FROM product WHERE p NOT IN (SELECT DISTINCT p FROM sp); 7.自己想吧! -- 下列SQL可完成什麼? SELECT sp.s, SUM(qty*cost) AS Total FROM sp, product WHERE sp.p = product.p GROUP BY sp.s ORDER BY Total DESC; 8. -- 8. 列出有訂購 30 號產品者 (p#=30) 的id 與 addr(住址)。 SELECT id, addr AS '住址' FROM supplier WHERE id IN (SELECT s FROM sp WHERE p = '30'); 9. SELECT TOP 3 *,qty*cost AS Total FROM SP JOIN P ON SP.P# = P.P# ORDER BY Total DESC -- 9. 列出供應總金額加總為前三名者的S#,P#,qty,cost,與供應總金額加總。 -- 先列出供應總金額加總為前三名者的S#,P#,qty,cost,與供應總金額加總。 USE test0; CREATE TABLE temp2 SELECT s, sp.p, qty, cost, qty*cost AS total FROM sp JOIN product ON sp.p = product.p ORDER BY total DESC LIMIT 3; -- 再列出前項供應總金額加總。 SELECT SUM(total) FROM temp2; -- 10.列出 未有訂購產品 的廠商編號與地址。 USE test0; SELECT * FROM supplier ss WHERE ss.id NOT IN (SELECT sp.s FROM sp);
|
|
中華科技大學數位化學習歷程 - 意見反應 |