資料庫實驗 綜合測試
《資料庫原理實驗》測試題
請認真閱讀要求,完成以下任務。
在SQL SERVER 中建立該教學資料庫,命名為"CGS_"+自己的學號,並按照表1-表4模式說明的屬性用SQL語句建立四個基本表(表名加學號),設定主碼和外部碼,然後從給定的EXCEL 表(CGS.Xls)中匯入例項資料(建議分批匯入,避免外來鍵衝突)。
程式碼倉庫:https://github.com/SKPrimin/HomeWork/tree/main/SQLSever/5LastTest
- 給出建立基本表的SQL語句和執行結果截圖。
CREATE TABLE C168 ( CNO CHAR(9), CNAME CHAR(8), CSEX CHAR(2), CAGE TINYINT, CPROF CHAR(10), PRIMARY KEY(CNO), ); CREATE TABLE G168 ( GNO CHAR(6), GNAME CHAR(12), CATEGORY CHAR(10), PRICE MONEY , PRIMARY KEY(GNO), ); CREATE TABLE S168 ( SNO CHAR(5), SNAME CHAR(12), SCITY CHAR(10), PRIMARY KEY(SNO), ); CREATE TABLE CGS168 ( CNO CHAR(9), GNO CHAR(6), SNO CHAR(5), QTY TINYINT , PRIMARY KEY(CNO,GNO,SNO), FOREIGN KEY(CNO) REFERENCES C168(CNO), FOREIGN KEY(GNO) REFERENCES G168(GNO), FOREIGN KEY(SNO) REFERENCES S168(SNO), );
- 匯入資料,插入自己的資料
資料庫中例項資料見表5-表8,在EXCEL文件 "CGS.Xls" 中用四個同名的SHEET給出,請用"匯入資料"功能將資料匯入到相應基本表中。
表5 客戶表C資料
CNO CNAME CSEX CAGE CPROF
P20160101 李猛 女 20 經濟
P20160421 王蒙 女 19 經濟
E20160123 張鬆 男 21 計算機
E20160120 李志 男 23 計算機
E20160119 孫紅 女 19 計算機
F20160201 陳曉 女 20 文化
F20160202 李山 男 21 文化
F20160203 陳燕 女 20 文化
表6 商品表G資料
GNO GNAME CATEGORY PRICE
SF-001 沙發 家居 2000
SF-002 開心果 美食 50
CJ-110 茶几 家居 200
CJ-201 核桃 美食 60
CJ-221 辦公桌 家居 800
YZ-122 椅子 家居 200
YZ-201 衣櫃 家居 1200
YZ-202 烤鴨 美食 300
表7 商家表S資料
SNO SNAME SCITY
10001 顧家 北京
11001 全友 北京
10002 芝華士 上海
12001 沃隆 上海
15001 三隻松鼠 上海
13001 良品鋪子 南京
12002 華豐 南京
15002 紅蘋果 南京
表8 銷售記錄表CGS資料
CNO GNO SNO QTY
P20160101 CJ-110 10002 100
P20160101 YZ-122 11001 90
P20160421 CJ-110 10002 86
P20160421 YZ-201 10001 95
P20160421 YZ-202 10001 98
E20160123 YZ-122 11001 101
E20160123 YZ-201 10001 93
E20160123 CJ-110 10002 63
E20160120 CJ-110 10002 105
E20160119 CJ-110 10002 82
E20160119 CJ-201 10001 75
F20160203 CJ-110 10002 92
F20160203 CJ-201 12001 90
F20160203 YZ-201 10001 85
請每位同學匯入資料後,在C(客戶表)表中插入一條自己的個人資訊,另外在CGS(銷售記錄)表中插入2條自己的購物記錄(注意商品程式碼一定不要用'SF-001',商家程式碼自己選擇,數量自己決定,但必須在50-150之間)。分別截圖展示此時四個基本表中的資料(可以互動式開啟表,也可以用SQL語句查詢表)。
C168表
已插入一條自己的個人資訊
G168表
S168表
CGS168
已插入2條自己的購物記錄
- 用SQL語言完成下列任務,每一小題完成之後立即截圖,截圖中必須包含資料庫名、SQL語句以及執行結果。(50分)
- 查詢"家居"類價格介於500至2000之間(包括500和2000)的商品資訊
--1) 查詢“家居”類價格介於至之間(包括和)的商品資訊
SELECT * FROM G168
WHERE CATEGORY = '家居' AND PRICE BETWEEN 500 AND 2000;
- 查詢從事行業以"計算"開頭且與本人同性別(本人男性則查詢男性,本人女性則查詢女性)的客戶資訊
--2) 查詢從事行業以“計算”開頭且與本人同性別
--(本人男性則查詢男性,本人女性則查詢女性)的客戶資訊
SELECT * FROM C168
WHERE CPROF LIKE '計算%' AND CSEX = '男';
- 查詢自己的購物記錄(以客戶代號為查詢條件,顯示結果表頭為:姓名,商品名稱,商家名稱,單價,數量,總價)
--3) 查詢自己的購物記錄(以客戶代號為查詢條件,顯示結果表頭為:姓名,商品名稱,商家名稱,單價,數量,總價)
SELECT CNAME,GNAME,SNAME,PRICE,QTY,PRICE*QTY AS SUMPRICE
FROM C168,G168,S168,CGS168
WHERE CGS168.CNO = '192168' AND CGS168.CNO=C168.CNO AND CGS168.GNO=G168.GNO AND CGS168.SNO=S168.SNO
- 查詢單次交易數量大於所有交易平均數量的客戶姓名
--4) 查詢單次交易數量大於所有交易平均數量的客戶姓名
SELECT CNAME FROM C168
WHERE CNO IN(
SELECT CNO FROM CGS168
WHERE QTY >= (
SELECT AVG(QTY)
FROM CGS168
)
)
- 查詢商品"茶几"銷量前3的銷售記錄對應的客戶姓名、從事行業、商家名稱和銷售數量,按銷量從高到低顯示
--5) 查詢商品“茶几”銷量前的銷售記錄對應的
--客戶姓名、從事行業、商家名稱和銷售數量,按銷量從高到低顯示
SELECT CNAME,CPROF,SNAME,QTY
FROM C168,S168,CGS168
WHERE CGS168.CNO=C168.CNO AND CGS168.SNO=S168.SNO AND
QTY IN(
SELECT TOP 3 QTY
FROM CGS168
ORDER BY QTY DESC
)
- 查詢使用者王蒙沒有購買的商品資訊
--6) 查詢使用者王蒙沒有購買的商品資訊
SELECT * FROM G168
WHERE GNO !=ALL
(
SELECT GNO FROM CGS168
WHERE CNO IN(
SELECT CNO FROM C168
WHERE CNAME = '王蒙'
)
)
- 將自己購買商家"10001"的"沙發"的購物記錄插入銷售記錄表中,購買數量為5(應該在插入語句中利用查詢給出"沙發"的商品代號);
--7) 將自己購買商家“”的“沙發”的購物記錄插入銷售記錄表中,
---購買數量為(應該在插入語句中利用查詢給出“沙發”的商品代號);
INSERT
INTO CGS168(CNO,GNO,SNO,QTY)
SELECT '192168',GNO,'10001',5 FROM G168
WHERE GNAME='沙發'
- 刪除客戶"王蒙"的購物資訊
--8) 刪除客戶“王蒙”的購物資訊
DELETE
FROM CGS168
WHERE CNO IN (
SELECT CNO
FROM C168
WHERE CNAME='王蒙'
)
- 將所有使用者購買的"茶几"的數量調整為原先的2倍;
--9) 將所有使用者購買的“茶几”的數量調整為原先的倍;
UPDATE CGS168
SET QTY = QTY*2
WHERE GNO IN(
SELECT GNO FROM G168
WHERE GNAME='茶几'
)
可以看到"茶几"的數量調整為原先的2倍
- 建立一個從事計算機行業的客戶購買"茶几"的檢視CGS_CSCJ,通過檢視查詢顯示結果。
--10) 建立一個從事計算機行業的客戶購買"茶几"的檢視CGS_CSCJ,通過檢視查詢顯示結果。
CREATE VIEW CGS_CSCJ AS SELECT *
FROM CGS168
WHERE
GNO IN(
SELECT GNO FROM G168
WHERE GNAME='茶几')
AND CNO IN (SELECT CNO FROM C168
WHERE CPROF='計算機')