摘要:2013上半年數(shù)據(jù)庫(kù)系統(tǒng)工程師考試真題及答案解析下午卷 試題二 閱讀以下說(shuō)明,根據(jù)要求回答下列問(wèn)題。 [說(shuō)明] 某航空公司要開(kāi)發(fā)一個(gè)訂票信息處理系統(tǒng),該系統(tǒng)的部分關(guān)系模式如下:
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)工程師考試網(wǎng)絡(luò)課堂
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)工程師歷年真題題庫(kù)
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)工程師考試大綱教材
2013上半年數(shù)據(jù)庫(kù)系統(tǒng)工程師考試真題及答案解析
下午卷
試題二
閱讀以下說(shuō)明,根據(jù)要求回答下列問(wèn)題。
[說(shuō)明]
某航空公司要開(kāi)發(fā)一個(gè)訂票信息處理系統(tǒng),該系統(tǒng)的部分關(guān)系模式如下:
航班(航班編號(hào),航空公司,起飛地,起飛時(shí)間,目的地,到達(dá)時(shí)間,票價(jià))
折扣(航班編號(hào),開(kāi)始日期,結(jié)束日期,折扣)
旅客(身份證號(hào),姓名,性別,出生日期,電話,VIP折扣)
購(gòu)票(購(gòu)票單號(hào),身份證號(hào),航班編號(hào),搭乘日期,購(gòu)票金額)
有關(guān)關(guān)系模式的屬性及相關(guān)說(shuō)明如下:
4、航班表中的起飛時(shí)間和到達(dá)時(shí)間不包含日期,同一航班不會(huì)在一天出現(xiàn)兩次及兩次以上;
5、各航空公司會(huì)根據(jù)旅客出行淡旺季適時(shí)調(diào)整機(jī)票的折扣,旅客購(gòu)買機(jī)票的購(gòu)票金額計(jì)算公式為:票價(jià)×折扣×VIP折扣,其中旅客的VIP折扣與該旅客已購(gòu)買過(guò)的機(jī)票的購(gòu)票金額總和相關(guān),在旅客每次購(gòu)票后被修改。VIP折扣值的計(jì)算由函數(shù)float vip_value(char[18]身份證號(hào))完成。
根據(jù)以上描述,回答下列問(wèn)題。
4、請(qǐng)將如下創(chuàng)建購(gòu)票關(guān)系的SQL語(yǔ)句的空缺部分補(bǔ)充完整,要求指定關(guān)系的主鍵、外鍵,以及購(gòu)票金額大于零的約束。
CREATE TABLE 購(gòu)票(
購(gòu)票單號(hào) CHAR(15) ______,
身份證號(hào) CHAR(18),
航班編號(hào) CHAR(6),
搭乘日期 DATE,
購(gòu)票金額 FLOAT ______, ______, ______, );
5、(1)身份證號(hào)為210000196006189999的客戶購(gòu)買了2013年2月18日CA5302航班的機(jī)票,購(gòu)票單號(hào)由系統(tǒng)自動(dòng)生成。下面的SQL語(yǔ)句將上述購(gòu)票信息加入系統(tǒng)中,請(qǐng)將空缺部分補(bǔ)充完整。
INSERT INTO 購(gòu)票(購(gòu)票單號(hào),身份證號(hào),航班編號(hào),搭乘日期,購(gòu)票金額)
SELECT '201303105555','210000196006189999','CA5302','2013/2/18',
______
FROM 航班,折扣,旅客
WHERE ______ AND 航班.航班編號(hào)='CA5302' AND
AND '2013/2/18' BETWEEN 折扣.開(kāi)始日期 AND 折扣.結(jié)束日期
AND 旅客.身份證號(hào)='210000196006189999';
(2)需要用觸發(fā)器來(lái)實(shí)現(xiàn)VIP折扣的修改,調(diào)用函數(shù)vip_value()來(lái)實(shí)現(xiàn)。請(qǐng)將如下SQL語(yǔ)句的空缺部分補(bǔ)充完整。
CREATE TRIGGER VIP_TRG AFTER ______ ON ______
RE FERENCING new row AS nrow
FOR EACH row
BEGIN
UPDATE 旅客
SET ______
WHERE ______;
END
6、請(qǐng)將如下SQL語(yǔ)句的空缺部分補(bǔ)充完整。
(1)查詢搭乘日期在2012年1月1日至2012年12月31日之間,且合計(jì)購(gòu)票金額大于等于10000元的所有旅客的身份證號(hào)、姓名和購(gòu)票金額總和,并按購(gòu)票金額總和降序輸出。
SELECT 旅客.身份證號(hào),姓名,SUM(購(gòu)票金額)
FROM 旅客,購(gòu)票
WHERE ______
GROUP BY ______;
ORDER BY ______;
(2)經(jīng)過(guò)中轉(zhuǎn)的航班與相同始發(fā)地和目的地的直達(dá)航班相比,會(huì)享受更低的折扣。查詢從廣州到北京,經(jīng)過(guò)一次中轉(zhuǎn)的所有航班對(duì),輸出廣州到中轉(zhuǎn)地的航班編號(hào)、中轉(zhuǎn)地、中轉(zhuǎn)地到北京的航班編號(hào)。
SELECT ______
FROM 航班航班1,航班 航班2
WHERE ______;
參考答案及解析
4、PRIMARY KEY(或NOT NULL UNIQUE)
CHECK(購(gòu)票金額>0)
FOREIGN KEY (身份證號(hào)) REFERENCES 旅客(身份證號(hào))
FOREIGN KEY (航班編號(hào)) REFERENCES 航班(航班編號(hào))
在創(chuàng)建“購(gòu)票”關(guān)系模式的SQL語(yǔ)句時(shí),由于屬性“購(gòu)票單號(hào)”為“購(gòu)票”關(guān)系模式的主鍵,即不能為空且標(biāo)識(shí)一條數(shù)據(jù)記錄,因此空缺處需要填入“PRIMARY KEY(或NOT NULL UNIQUE,或NOT NULL PRIMARY KEY)”對(duì)該屬性進(jìn)行主鍵約束。
結(jié)合題干給出的關(guān)鍵信息“購(gòu)票金額大于零”可知,空缺處應(yīng)填入“CHECK(購(gòu)票金額>0)”對(duì)屬性“購(gòu)票金額”進(jìn)行約束。
由于屬性“身份證號(hào)”、“航班編號(hào)”是“購(gòu)票”關(guān)系模式的外鍵,因此空缺處需要使用FOREIGN KEY對(duì)這兩個(gè)屬性進(jìn)行外鍵約束,即應(yīng)填入“FOREIGN KEY(身份證號(hào))REFERENCES旅客(身份證號(hào))”、“FOREIGN KEY(航班編號(hào))REFERENCES航班(航班編號(hào))”。
5、票價(jià)*折扣*VIP折扣
航班.航班編號(hào)=折扣.航班編號(hào)
INSERT
購(gòu)票
VIP折扣=vip_value(nrow.身份證號(hào))
旅客.身份證號(hào)=nrow.身份證號(hào)
(1)基于題干給出的關(guān)鍵信息“旅客購(gòu)買機(jī)票的購(gòu)票金額計(jì)算公式為:票價(jià)×折扣×VIP折扣”可知,(空缺處對(duì)應(yīng)填入INSERT INTO語(yǔ)句中“購(gòu)票金額”的計(jì)算公式,即“票價(jià)*折扣*VIP折扣”。
結(jié)合題干給出的“其中旅客的VIP折扣與該旅客已購(gòu)買過(guò)的機(jī)票的購(gòu)票金額總和相關(guān),在旅客每次購(gòu)票后被修改”等關(guān)鍵信息可知,該SELECT查詢語(yǔ)句中將涉及到“航班”、“折扣”兩個(gè)關(guān)系模式,因此空缺處應(yīng)對(duì)這二者進(jìn)行關(guān)聯(lián),即應(yīng)填入“航班.航班編號(hào)=折扣.航班編號(hào)”。
(2)使用T-SQL語(yǔ)句來(lái)創(chuàng)建觸發(fā)器的基本語(yǔ)句如下。
create trigger trigger_name on {table_name | view_name} {for | After | Instead of}
[insert,update,delete] as sql_statement
在“購(gòu)票”關(guān)系模式中插入一條數(shù)據(jù)記錄時(shí),觸發(fā)器應(yīng)能夠自動(dòng)執(zhí)行,因此需要?jiǎng)?chuàng)建基于INSERT類型的觸發(fā)器,即空缺處應(yīng)依次填入“INSERT”、“購(gòu)票”。
根據(jù)題干給出的“VIP折扣值的計(jì)算由函數(shù)float vip_value(char[18]身份證號(hào))完成”等關(guān)鍵信息可知,空缺處應(yīng)填入的觸發(fā)器執(zhí)行動(dòng)作是“VIP折扣=vip_value(nrow.身份證號(hào))”。
空缺處應(yīng)添加表的連接條件——“旅客.身份證號(hào)=nrow.身份證號(hào)”。
6、旅客.身份證號(hào)=購(gòu)票.身份證號(hào) AND
搭乘日期 BETWEEN '2012/1/1' AND '2012/12/31'
旅客.身份證號(hào),姓名 HAVING SUM(購(gòu)票金額)>=10000
SUM(購(gòu)票金額) DESC
航班1.航班編號(hào),
航班1.目的地,
航班2.航班編號(hào)
航班1.起飛地='廣州' AND 航班2.目的地='北京' AND
航班1.目的地=航班2.起飛地;
(1)查詢搭乘日期在2012年1月1日至2012年12月31日之間,且合計(jì)購(gòu)票金額大于等于10000元的所有旅客的身份證號(hào)、姓名和購(gòu)票金額總和,并按購(gòu)票金額總和降序輸出。
SELECT 旅客.身份證號(hào),姓名,SUM(購(gòu)票金額)
FROM 旅客,購(gòu)票
WHERE 旅客.身份證號(hào)=購(gòu)票.身份證號(hào) AND
搭乘日期 BETWEEN '2012/1/1' AND '2012/12/31'
GROUP BY 旅客.身份證號(hào),姓名 HAVING SUM(購(gòu)票金額)>=10000;
ORDER BY SUM(購(gòu)票金額) DESC;
(2)經(jīng)過(guò)中轉(zhuǎn)的航班與相同始發(fā)地和目的地的直達(dá)航班相比,會(huì)享受更低的折扣。查詢從廣州到北京,經(jīng)過(guò)一次中轉(zhuǎn)的所有航班對(duì),輸出廣州到中轉(zhuǎn)地的航班編號(hào)、中轉(zhuǎn)地、中轉(zhuǎn)地到北京的航班編號(hào)。
SELECT 航班1.航班編號(hào),航班1.目的地,航班2.航班編號(hào)
FROM 航班航班1,航班航班2
WHERE 航班1.起飛地='廣州' AND 航班2.目的地='北京' AND
航班1.目的地=航班2.起飛地
相關(guān)鏈接:
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試知識(shí)點(diǎn)分析與真題詳解(第4版)
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試歷年試題分析與解答(第4版)
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試下午知識(shí)點(diǎn)精講與考前必練
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試考前串講
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬(wàn)道題
已有25.02萬(wàn)小伙伴參與做題