閱讀下列說(shuō)明,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】某網(wǎng)上書(shū)店后臺(tái)數(shù)據(jù)庫(kù)的部分關(guān)系模式如下:
會(huì)員(會(huì)員編號(hào),用戶(hù)名,密碼,姓名,地址,郵編,電話(huà),消費(fèi)額,積分)
圖書(shū)(圖書(shū)編號(hào),類(lèi)型名稱(chēng),圖書(shū)名稱(chēng),作者,出版社,出版日期,ISBN,價(jià)格)
訂單(訂單編號(hào),用戶(hù)名,銷(xiāo)售額,訂購(gòu)日期,出貨日期)
訂單明細(xì)(訂單明細(xì)編號(hào),訂單編號(hào),圖書(shū)編號(hào),數(shù)量)
【問(wèn)題1】(3分)
下面是創(chuàng)建訂單關(guān)系的SQL語(yǔ)句,訂單編號(hào)唯一識(shí)別一個(gè)訂單,用戶(hù)名為訂購(gòu)圖書(shū)的會(huì)員用戶(hù)名,且不能為空。要求訂購(gòu)日期不能大于出貨日期。請(qǐng)將空缺部分補(bǔ)充完整。
CREATE TABLE 訂單(
訂單編號(hào) CHAR(6) (a),
用戶(hù)名 VARCHAR(40) NOT NULL (b)
銷(xiāo)售額 FLOAT ,
訂購(gòu)日期 DATE NOT NULL ,
出貨日期 DATE (c)) ;
【問(wèn)題2】(10分)
請(qǐng)完成下列查詢(xún)的SQL語(yǔ)句。
(1)查詢(xún)名稱(chēng)中包含“數(shù)據(jù)庫(kù)”的圖書(shū)的圖書(shū)名稱(chēng),作者,出版社和出版日期。
SELECT (d)
FROM 圖書(shū)
WHERE 圖書(shū)名稱(chēng)(e) ;
(2)查詢(xún)提供銷(xiāo)售(圖書(shū)表中有)但沒(méi)有銷(xiāo)售過(guò)(沒(méi)在訂單明細(xì)表中出現(xiàn))的圖書(shū)名稱(chēng)和出版社。
SELECT 圖書(shū)名稱(chēng), 出版社
FROM圖書(shū)
WHERE NOT EXISTS (
SELECT (f)
FROM訂單明細(xì)
WHERE (g) ) ;
(3)查詢(xún)訂購(gòu)圖書(shū)數(shù)量最多的會(huì)員名及其訂購(gòu)的數(shù)量。
SELECT 用戶(hù)名, (h)
FROM訂單, 訂單明細(xì)
WHERE (i)
GROUP BY 用戶(hù)名
HAVING (j)
( SELECT SUM(數(shù)量)
FROM 訂單, 訂單明細(xì)
WHERE 訂單.訂單編號(hào) = 訂單明細(xì).訂單編號(hào)
GROUP BY 用戶(hù)名) ;
(4)為了統(tǒng)計(jì)會(huì)員的購(gòu)買(mǎi)行為信息,實(shí)施有意義的客戶(hù)關(guān)懷策略,查詢(xún)會(huì)員的平均訂購(gòu)間隔時(shí)間,考慮多次購(gòu)買(mǎi)圖書(shū)和一次購(gòu)買(mǎi)圖書(shū)的情況(其中,DATEDIFF 函數(shù)表示兩個(gè)日期之間的天數(shù))。
SELECT 用戶(hù)名, CASE WHEN(k)
THEN DATEDIFF(MAX(訂購(gòu)日期), MIN(訂購(gòu)日期)) / (l)
ELSE DATEDIFF (CURRENT_TIMESTAMP, MIN(訂購(gòu)日期))
END AS AVG_GAP
FROM 訂單
(m) ;
【問(wèn)題3】(2分)
會(huì)員訂購(gòu)圖書(shū)后,將本次訂購(gòu)的銷(xiāo)售額累加到該會(huì)員的消費(fèi)額中,并按照本次訂單的銷(xiāo)售額計(jì)算積分累加到該會(huì)員的積分中(每20元增加1個(gè)積分,不足20元不計(jì)入積分)。下面用觸發(fā)器實(shí)現(xiàn)該需求,請(qǐng)?zhí)畛淇杖辈糠帧?br />CREATE TRIGGER 會(huì)員積分_TRIGGER AFTER (n)
REFERENCING NEW ROW AS NROW
BEGIN
UPDATE 會(huì)員
SET 消費(fèi)額 = 消費(fèi)額 + NROW.銷(xiāo)售額, (o)
WHERE 用戶(hù)名 = NROW.用戶(hù)名
END