閱讀以下說明,回答問題1至問題4,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
某商場客戶-商品數(shù)據(jù)庫中各關(guān)系模式如下:
客戶(客戶號, 姓名, 性別, 年齡)
商品(商品號, 名稱, 型號, 品牌, 單價, 庫存)
銷售(流水號, 客戶號, 商品號, 數(shù)量, 日期)
采購(商品號,數(shù)量)
其中:
1)一種品牌的同一名稱商品可以有多個型號,商品的庫存有大于等于0約束;
2)銷售表記錄每一筆銷售,每銷售一件商品,其庫存都要做相應(yīng)的修改。
現(xiàn)假定已經(jīng)建立了該數(shù)據(jù)庫及上述四個基本表。
【問題1】(5分)
(1) 客戶關(guān)系中的年齡取值在15歲到60歲之間(包含15歲和60歲),增加該約束的SQL語句如下,請將空缺部分補充完整。
ALTER TABLE 客戶 ADD CONSTRAINT
CONSTRAINT con_age CHECK ( (a) )
(2) 如下用SQL語句創(chuàng)建的暢銷商品視圖包含商品號、商品名稱、型號、品牌和銷售量,該視圖中商品的銷售量大于等于1000件。請將空缺部分補充完整。
CREATE VIEW 暢銷商品 (b)
AS
SELECT 商品.商品號, 名稱, 型號, 品牌, 銷售量
FROM 商品, ( SELECT 商品號, (c) AS 銷售量
FROM 銷售
GROUP BY 商品號
HAVING SUM(數(shù)量) > = 1000 ) AS 商品銷售量
WHERE (d) ;
(3) 將視圖暢銷商品的查詢權(quán)限賦予銷售經(jīng)理李華,請將空缺部分補充完整。
GRANT (e) ON TABLE 暢銷商品TO 李華;
【問題2】 (3分)
查詢購買“新飛”品牌的任一型號“冰箱”的客戶姓名及購買日期。實現(xiàn)該查詢的SQL語句如下,請將空缺部分補充完整。
SELECT 姓名, 日期
FROM (f)
WHERE (g) AND 商品號 (h) (
SELECT 商品號 FROM 商品
WHERE 品牌 = ’新飛’ AND 名稱 = ’冰箱’ )
【問題3】 (3分)
實現(xiàn)銷售業(yè)務(wù)的嵌入式SQL代碼段(嵌入C語言)如下,假設(shè)銷售表的流水號由系統(tǒng)自動生成。請將空缺部分補充完整。
……
EXEC SQL BEGIN DECLARE SECTION;
/* 銷售:商品號,客戶號,數(shù)量,日期 */
char pno[6]; char cno[6];
int quantity; char date[10];
EXEC SQL END DECLARE SECTION;
……
EXEC SQL CONNECT TO DEFAULT;
EXEC SQL SET TRANSACTION ISOLATION LEVELSERIALIZABLE;
EXEC SQL INSERT INTO 銷售(商品號,客戶號,數(shù)量,日期)
VALUES( (i) );
EXEC SQL UPDATE 商品 SET 庫存 = (j) WHERE 商品號= :pno;
if(SQLCA.SQLCODE != 0){
printf("商品%s庫存不滿足本次購買數(shù)量,交易失?。?, pno);
EXEC SQL ROLLBACK WORK;
} else{
EXEC SQL (k) ;
}
EXEC SQL DISCONNECT CURRENT;
……
【問題4】 (4分)
對商品表增加最小庫存屬性;若修改某商品的庫存時,使得庫存值小于或等于其最小庫存值,則向采購表插入一條記錄,要求采購的數(shù)量是該商品最小庫存值的兩倍再加上10。下面是完成該功能的SQL語句,請將空缺部分補充完整。
ALTER TABLE 商品 (l) ;
CREATE TRIGGER 采購-trigger AFTER (m)
REFERENCING NEW ROW AS nrow
FOR EACH ROW
WHEN (n)
BEGIN
INSERT INTO 采購
VALUES( (o) )
END