1. 程式人生 > 其它 >資料庫實驗 綜合測試

資料庫實驗 綜合測試

《資料庫原理實驗》測試題

請認真閱讀要求,完成以下任務。

在SQL SERVER 中建立該教學資料庫,命名為"CGS_"+自己的學號,並按照表1-表4模式說明的屬性用SQL語句建立四個基本表(表名加學號),設定主碼和外部碼,然後從給定的EXCEL 表(CGS.Xls)中匯入例項資料(建議分批匯入,避免外來鍵衝突)

程式碼倉庫:https://github.com/SKPrimin/HomeWork/tree/main/SQLSever/5LastTest

  1. 給出建立基本表的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),
);

  1. 匯入資料,插入自己的資料

資料庫中例項資料見表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條自己的購物記錄

  1. 用SQL語言完成下列任務,每一小題完成之後立即截圖,截圖中必須包含資料庫名、SQL語句以及執行結果。(50分)
  1. 查詢"家居"類價格介於500至2000之間(包括500和2000)的商品資訊
--1)	查詢“家居”類價格介於至之間(包括和)的商品資訊
SELECT * FROM G168
WHERE CATEGORY = '家居' AND PRICE BETWEEN 500 AND 2000;
  1. 查詢從事行業以"計算"開頭且與本人同性別(本人男性則查詢男性,本人女性則查詢女性)的客戶資訊
--2)	查詢從事行業以“計算”開頭且與本人同性別
--(本人男性則查詢男性,本人女性則查詢女性)的客戶資訊
SELECT * FROM C168
WHERE CPROF LIKE '計算%' AND CSEX = '男';
  1. 查詢自己的購物記錄(以客戶代號為查詢條件,顯示結果表頭為:姓名,商品名稱,商家名稱,單價,數量,總價)
--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
  1. 查詢單次交易數量大於所有交易平均數量的客戶姓名
--4)	查詢單次交易數量大於所有交易平均數量的客戶姓名
SELECT CNAME FROM C168
WHERE CNO IN(

    SELECT CNO FROM CGS168
    WHERE QTY >= (
        SELECT AVG(QTY)
        FROM CGS168
    )
)
  1. 查詢商品"茶几"銷量前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
)
  1. 查詢使用者王蒙沒有購買的商品資訊
--6)	查詢使用者王蒙沒有購買的商品資訊
SELECT * FROM G168
WHERE GNO !=ALL
(
    SELECT GNO FROM CGS168
    WHERE CNO IN(
        SELECT CNO FROM C168
        WHERE CNAME = '王蒙'
    )
)
  1. 將自己購買商家"10001"的"沙發"的購物記錄插入銷售記錄表中,購買數量為5(應該在插入語句中利用查詢給出"沙發"的商品代號);
--7)	將自己購買商家“”的“沙發”的購物記錄插入銷售記錄表中,
---購買數量為(應該在插入語句中利用查詢給出“沙發”的商品代號);
INSERT 
INTO CGS168(CNO,GNO,SNO,QTY)
SELECT '192168',GNO,'10001',5 FROM G168
WHERE GNAME='沙發'
  1. 刪除客戶"王蒙"的購物資訊
--8)	刪除客戶“王蒙”的購物資訊
DELETE 
FROM CGS168
WHERE CNO IN (
    SELECT CNO 
    FROM C168
    WHERE CNAME='王蒙'
)
  1. 將所有使用者購買的"茶几"的數量調整為原先的2倍;
--9)	將所有使用者購買的“茶几”的數量調整為原先的倍;
UPDATE CGS168
SET QTY = QTY*2
WHERE GNO IN(
    SELECT GNO FROM G168
    WHERE GNAME='茶几'
)

可以看到"茶几"的數量調整為原先的2倍

  1. 建立一個從事計算機行業的客戶購買"茶几"的檢視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='計算機')