有一个关于商品供应及顾客订单的数据库。其中包括四个表,表中信息如下: 供应表
apply
(
id
、
name
、
sid
、
price
) 说明:
id
供应厂家编号,
name
供应厂家名称,
sid
商品编号,
price
商
品价格。 顾客表
customers
(
gid
、
name
、
address
、
balance
) 说明:
gid
顾客编号,
address
地
址,
balance
余额。 订单表
orders
(
sid
、
gid
、
date
) 说明:
sid
商品编号,
gid
顾客编号,
date
订单日期。 商品表
goods
(
sid
、
name
、
count
) 说明:
sid
商品编号,
name
商品名称,
count
商品数量 写出
SQL
完成如下操作的
SQL
语句:
1)
查询出
2008-8-8
这一天顾客的订单信息,要求包括顾客姓名、商品名称及订单日期
.
2)
将商品表中商品编号为
'204'
的商品名称更改为百事可乐
3)
将顾客表上余额不足
1000
元的,将其订单日期延后
10
天
4)
删除订单表中商品编号为
102
的订单记录
5)
将商品表中没有顾客订购的商品信息删除
学生答案:
1.select*fromcustomerswherecustomers.gid=orders.gidanddate="2008-8-8"
2.updategoodssetsid=’
百事可乐
’wheresid=’204’;
3.selectbalanceDATE_ADD(NOW(),INTERVAL10day)fromcustomerswherebalance<1000;
4.deletefromorderswheresid=’102’;
10
已知进销存数据库
Jxcxt
包含如下数据表:
1
)商品表:商品
id(
自增
1),
商品名称
,
单位
,
单
价
,
商品状态
2
)库存表:库存
id(
自增
1),
商品
id,
库存数量 请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
:
1
、创建以上两个表的
SQL
语句;
2
、在商品表上创建一个触发器
(
名字自定
),
当删除商品时自动删除该商品在库存表中的记录。
学生答案:
1> CREATETABLE
商品表
(
商品
idINTNOTNULLAUTO_INCREMENTPRIMARYKEY,
商品
名称
VARCHAR(20)NOTNULL,
单位
VARCHAR(10),
单价
DOUBLE,
商品状态
VARCHAR(10));
2> CREATETABLE
库存表
(
库存
idINTNOTNULLAUTO_INCREMENTPRIMARYKEY,
商品
idINTNOTNULL,
库存数量
INT,FOREIGNKEY(
商品
id)REFERENCES
商品表
(
商品
id));2>CREATETRIGGERdelChainBEFOREDELETEON
商品表
FOREACHROWDELETEFROM
库存表
WHERE
商品
id=old.
商品
id;
10
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
:
1
、创建以上三个表的
SQL
语句;
2
、创建视图
V_
选课
,
其中包含这些字段
:
选课
id,
学号
,
姓名
,
课程名
,
成绩;
3
、查询张三的数据开发技术课程的成绩。
学生答案:
1.
学生表:
CREATETABLEstudent(xsidINTPRIMARYKEY,xhVARCHAR(13),xmVARCHAR(5),zyVARC
HAR(10),njCHAR(2),xmpysxVARCHAR(5))CHARSET=utf8;
课程表:
CREATETABLEcourse(kcidINTPRIMARYKEY,kcmcVARCHAR(9),xfSMALLINT)CHARSET
=utf8;
选课表:
CREATETABLEsc(xkidINTPRIMARYKEY,xsidINT,kcidINT,gradeDOUBLE(3,2),FOREIGNKE
Y(xsid)REFERENCESstudent(xsid),FOREIGNKEY(kcid)REFERENCEScourse(kcid))CHARSE
T=utf8;
2.CREATEVIEWv_
选课
ASSELECTs.xkid,st.xh,st.xm,c.kcmc,s.gradeFROMscsINNERJOINstudentstONs.xsid=st.xsidIN
NERJOINcoursecONc.kcid=s.kcid;
10
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩 系
统已建有
getstrpy(p_name VARCHAR(100))
用户自定义函数。 请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
: 1
、创建以上三个表的
SQL
语句;
2
、创建一个存储过程(名
字自定),实现学生表的插入,姓名拼音缩写需要调用
getstrpy
函数实现。
学生答案:
CREATEDATABASExkglxt;CREATETABLE
学生表
(
学生
idCHAR(4)PRIMARYKEY,
学号
CHAR(4),
姓名
CHAR(4),
专业
CHAR(4),
年级
CHAR(4),
姓名
拼音缩写
CHAR(8))CHARSET=utf8;CREATETABLE
课程表
(
课程
idCHAR(4)PRIMARYKEY,
44
45
课程名称
CHAR(10),
学分
CHAR(4))CHARSET=utf8;CREATETABLE
选课表
(
选课
idCHAR(4)PRIMARYKEY,
学生
idCHAR(4),
课程
idCHAR(4),
成绩
INT,FOREIGNKEY(
学生
id)REFERENCES
学生表
(
学生
id),FOREIGNKEY(
课程
id)REFERENCES
课程表
(
课程
id))CHARSET=utf8;SELECT
学号
,
姓名
,
专业
,
年级
FROM
学生表
,
课程表
WHERE
学分
>=100;
7
已知选课管理系统
Xkglxt
包含如下数据表和自定义函数
(
函数已定义好可直接使用
)
:
1
)学
生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓名拼音缩写
2
)自定义函数拼音缩写查询
: pysx('
中文
字符串
')
返回 该中文字符串的拼音缩写 请完成如下操作的
SQL
语句
,
表名和列名必须和
上面的一致
:
1
、创建选课管理系统数据库以及学生表的
SQL
语句;
2
、在学生表上创建一个触发器
(
名字自定
),
当新增学生时自动处理姓名拼音缩写。
学生答案:
1
、
CREATEDATABASEXkglxtCHARSETutf8;CREATETABLE
学生
(
学生
idINTPRIMARYKEY,
学号
INT,
专业
VARCHAR(30),
年纪
INT,
姓名
VARCHAR(30),
姓名拼音缩写
VARCHAR(30));
2DELIMITER$$CREATETRIGGERmytriggerAFTERINSERTON
学生
FOREACHROWBEGININSERTINTO
学生
(
姓名拼音缩写
)VALUES(pysx(new.
姓
名
));END$$DELIMITER;
10
已知产品销售数据库
cpxs
包含如下数据表:
1
)产品表:产品编号,产品名称,价格,库
存量。
2
)销售商表:客户编号,客户名称,地区,负责人,电话。
3
)产品销售表:销售
日期,产品编号,客户编号,数量,销售额。 写出
SQL
完成如下操作的
SQL
语句:
1.
写出产品表的建表语句
2.
向产品表中插入如下记录:
0001
空调
3000 200 0002
冰箱
2500 300
3.
将产品表中每种商品价格打八折后进行显示
4.
查找价格在
2000
到
2900
之间的产品名称。
5.
在产品销售表上创建
“
冰箱
”
产品表的视图
bxcp
学生答案:
1
、
CREATETABLE
产品表
(
产品编号
char(4)PRIMARYKEY,
产品名称
VARCHAR(20)NOTNULL,
价格
float(7,2),
库存量
int(5));CREATETABLE
销售商表
(
客户编号
char(5)PRIMARYKEY,
客户名称
VARCHAR(20)NOTNULL,
地区
VARCHAR(10),
负责人
VARCHAR(10),
电话
VARCHAR(11));CREATETABLE
产品销售表
(
销售日期
date,
产品编号
char(4),
客户编号
char(5),
数量
int,
销售额
float(8,2));
2
、
insertinto
产品表
values(’0001’,’
空调
’,3000,200);insertinto
产品表
values(’0002’,’
冰
箱
’,2500,300);
3
、
update
产品表
set
价格
=
价格
*0.8;
4
、
select
产品名称
from
产品表
where
价格
between2000and2900;5
、
createviewbxcpasselect*from
产品表
where
产品名称
=
冰箱
withcheckoption;
10
已知进销存数据库
Jxcxt
包含如下数据表:
1
)商品表:商品
id,
商品名称
,
单位
,
单价
,
商品
状态
2
)库存表:库存
id,
商品
id,
库存数量 请完成如下操作的
SQL
语句
,
表名和列名必须
和上面的一致
:
1
、创建以上两个表的
SQL
语句;
2
、创建一个存储过程(名字自定),实现商品表的的插入,需要判断当前商品名称是否存
在。
学生答案:
CREATEDATABASEJxcxt;CREATETABLE
商品表
(
商品
46
idCHAR(4)PRIMARYKEYAUTO_INCREMENT,
商品名称
CHAR(4),
单位
CHAR(4),
单价
INT,
商品状态
CHAR(4))CHARSET=utf8;CREATETABLE
库存表
(
库存
idCHAR(4)PRIMARYKEYAUTO_INCREMENT,
商品
idCHAR(4),
库存数量
INT,FOREIGNKEY(
商品
id)REFERENCES
商品表
(
商品
id))CHARSET=utf8;CREATEVIEWV_
库存
(
库存
id,
商品名称
,
单位
,
库存数量
,
库存金额)
ASSELECT*FROM(
商品表,库存表
)WITHCHECKOPTION;
10
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
:
1
、创建以上三个表的
SQL
语句;
2
、创建一个存储过程(名字自定),实现选课表的插入,需要判断当前课程
id
和学生
id
是否存在。
学生答案:
CREATEDATABASExkglxt;CREATETABLE
学生表
(
学生
idCHAR(4)PRIMARYKEY,
学号
CHAR(4),
姓名
CHAR(4),
专业
CHAR(4),
年级
CHAR(4),
姓名拼音缩写
CHAR(8))CHARSET=utf8;CREATETABLE
课程表
(
课程
idCHAR(4)PRIMARYKEY,
课程名称
CHAR(10),
学分
CHAR(4))CHARSET=utf8;CREATETABLE
选课表
(
选课
idCHAR(4)PRIMARYKEY,
学生
idCHAR(4),
课程
idCHAR(4),
成绩
INT,FOREIGNKEY(
学生
id)REFERENCES
学生表
(
学生
id),FOREIGNKEY(
课程
id)REFERENCES
课程表
(
课程
id))CHARSET=utf8;
SELECT
学号
,
姓名
,
专业
,
年级
FROM
学生表
,
课程表
,
选课表
WHERE
成绩
<60
;
10
有一个关于商品供应及顾客订单的数据库。其中包括四个表,表中信息如下: 供应表
apply
(
id
、
name
、
sid
、
price
) 说明:
id
供应厂家编号,
name
供应厂家名称,
sid
商品编号,
price
商
品价格。 顾客表
customers
(
gid
、
name
、
address
、
balance
) 说明:
gid
顾客编号,
address
地
址,
balance
余额。 订单表
orders
(
sid
、
gid
、
date
) 说明:
sid
商品编号,
gid
顾客编号,
date
订单日期。 商品表
goods
(
sid
、
name
、
count
) 说明:
sid
商品编号,
name
商品名称,
count
商品数量
1)
从供应表中查询全体供应厂商的基本信息
2)
从顾客表中查询地址在
"
长春
"
的顾客的顾客编号、顾客姓名及余额
.
3)
从商品表中查询以
"
可乐
"
两个字结尾的商品名称及数量,并按商品数量降序排序
4)
从订单表中查询购买商品编号为
"101"
商品的顾客编号及订单日期
.
5)
向商品表中追加一条纪录
(204,
可口可乐
,900
)
6)
从商品表中查询最多商品数量、最少商品数量及商品总数量的记录信息
学生答案:
1
、
select*fromapply;
2
、
selectgid,name,balancefromcustomerswhereaddress="
长春
";
3
、
selectname,countfromgoodswherenamelike"%
可乐
"orderbycountdesc;
4
、
selectgid,datefromorderswheresid=101;
5
、
insertintogoodsvalues(204,"
可口可乐
",900);
6
、
selectmax(count),min(count),sum(count)fromgoods;
10
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
: 1
、创建以上三个表的
SQL
语
句;
2
、创建一个存储过程(名字自定),实现课程表的插入,需要判断当前课程名称的课
程是否存在。
学生答案:
1. CREATETABLE`temp`.`
学生表
`(`
学生
id`VARCHAR(20),`
学号
`VARBINARY(20),`
姓名
`VARCHAR(20),`
专业
`VARCHAR(20),`
年级
`VARCHAR(20),`
姓名拼音缩写
`VARCHAR(10))CHARSET=utf8;CREATETABLE`temp`.`
课程表
`(`
课程
id`VARCHAR(20),`
课程名称
`VARCHAR(20),`
学分
`VARCHAR(20))CHARSET=utf8;
2. CREATETABLE`temp`.`
选课表
`(`
选课
id`VARCHAR(20),`
学生
id`VARCHAR(20),`
课程
id`VARCHAR(20),`
成绩
`VARCHAR(20))CHARSET=utf8;2.SELECT`
学生表
`.`
学号
`,`
学生
表
`.`
姓名
`,`
学生表
`.`
专业
`,`
学生表
`.`
年级
`FROM`
学生表
`,`
选课表
`,`
课程表
`WHERE`
学
生表
`.`
学生
id`=`
选课表
`.`
学生
id`AND`
课程表
`.`
课程
id`=`
选课表
`.`
课程
id`AND`
课程表
`.`
课程名称
`="
数据库原理
";
8
已知选课管理系统
Xkglxt
包含如下数据表和自定义函数
(
函数已定义好可直接使用
)
:
1
)学
生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓名拼音缩写
2
)自定义函数拼音缩写查询
: pysx('
中文
字符串
')
返回 该中文字符串的拼音缩写 请完成如下操作的
SQL
语句
,
表名和列名必须和
上面的一致
:
1
、创建选课管理系统数据库以及学生表的
SQL
语句;
2
、在学生表上创建一个触发器
(
名字自定
),
当修改学生表的姓名时自动处理姓名拼音缩写
学生答案:
1
、
CREATEDATABASEXkglxtCHARSETutf8;CREATETABLE
学生
(
学生
idINTPRIMARYKEY,
学号
INT,
专业
VARCHAR(30),
年纪
INT,
姓名
VARCHAR(30),
姓名拼音缩写
VARCHAR(30));
2`DELIMITER$$CREATETRIGGERmytriggerAFTERINSERTON
学生
FOREACHROWBEGININSERTINTO
学生
(
姓名拼音缩写
)VALUES(pysx(new.
姓
名
));END$$DELIMITER;
8
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
: 1
、创建以上三个表的
SQL
语
句;
2
、在课程表上创建一个触发器
(
名字自定
)
。
,
当删除课程信息时自动删除该课程的选课
信息。
学生答案:
1
、
1
、
CREATETABLE
学生
(
学生
idINTPRIMARYKEY,
学号
INT,
姓名
VARCHAR(30),
专业
VARCHAR(30),
年纪
INT,
姓名拼音缩写
VARCHAR(10))CHARSETutf8;CREATETABLE
课程
(
课程
idINTPRIMARYKEY,
课程名称
VARCHAR(30),
学分
INT)CHARSETutf8;CREATETABLE
选课
(
选课
idINTPRIMARYKEY,
学生
idINT,
课程
idINT,
成绩
INT)CHARSETutf8;
2
、
DELIMITER$$CREATETRIGGERmytriggerAFTERDELETEON
课程
FOREACHROWBEGINDELETEFROM
选课
WHERE
选课
.
课程
id=old.
课程
id
;
END$$DELIMITER;
8
已知进销存数据库
Jxcxt
包含如下数据表:
1
)商品表:商品
id(
自增
1),
商品名称
,
单位
,
单价
,
商品状态
2
)库存表:库存
id(
自增
1),
商品
id,
库存数量
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
:
47
48
1
、创建以上两个表的
SQL
语句;
2
、在商品表上创建一个触发器
(
名字自定
),
当新增商品时自动在库存表中插入该商品的库存
信息
(
库存数量为
0)
。
学生答案:
1)
createtable
商品表
(
商品
idintnotnullauto_increment,
商品名称
varchar(255),
单位
varchar(10),
单
价
int,
商品状态
varchar(10),primarykey(
商品
id))charsetutf8;createtable
库存表
(
库存
idintnotnullauto_increment,
商品
idint,
库存数量
int,foreignkey(
商品
id)references
商品表
(
商品
id),primarykey(
库存
id))charsetutf8;
2)delimiter$$createtrigger
增商品触库存
afterinserton
商品表
foreachrowbegininsertinto
库存表
values(null,new.
商品
id,0);end$$
10
已知选课管理系统
Xkglxt
包含如下数据表:
1
)学生表
:
学生
id,
学号
,
姓名
,
专业
,
年级
,
姓
名拼音缩写
2
)课程表
:
课程
id,
课程名称
,
学分
3
)选课表
:
选课
id,
学生
id,
课程
id,
成绩
请完成如下操作的
SQL
语句
,
表名和列名必须和上面的一致
:
1
、创建以上三个表的
SQL
语句;
2
、创建一个存储过程(名字自定),实现学生表的插入,需要判断当前学号的学生是否存
在。
学生答案:
1>CREATETABLE
学生表
(
学生
idINTNOTNULLPRIMARYKEY,
学号
VARCHAR(20)NOTNULL,
姓名
VARCHAR(10)NOTNULL,
专业
VARCHAR(20),
年级
VARCHAR(10),
姓名拼音缩写
VARCHAR(10));CREATETABLE
课程表
(
课程
idINTNOTNULLPRIMARYKEY,
课程名称
VARCHAR(20),
学分
FLOAT);CREATETABLE
选课
表
(
选课
idINTNOTNULLPRIMARYKEY,
学生
idINTNOTNULL,
课程
idINTNOTNULL,
成绩
FLOAT,FOREIGNKEY(
学生
id)REFERENCES
学生表
(
学生
id),FOREIGNKEY(
课程
id)REFERENCES
课程表
(
课程
id));2>DELIMITER$$CREATEPROCEDUREisInsert(id1INT,id2INT,id3INT,gradeFLOAT)BEGI
NIF((SELECTCOUNT(*)FROM
课程表
,
学生表
WHERE
学生表
.
学生
id=id2AND
课程表
.
课程
id=id
3)<>0)THENINSERTINTO
选课表
VALUES(id1,id2,id3,grade);ENDIF;END$$DELIMITER;
10
四、计算题
1、按照要求,完成以下操作。
(
1)、建立一个通信录数据库,要求需要有以下三个表:
lxrenb(联系人表)其字段为(联系人编号、姓名、联系电话、家庭地址),
thjlb(通话记录表)其字段为(通话记录编号、联系人编号、通话开始时间、通
知结束时间、通话类别、通话状态),
dxjlb(短信记录表)其字段为(短信记录编号、联系人编号、接发时间、短信内
49
容、短信类别)。
请在 SQL SERVER 下建立这个数据库,数据库名为:TXLSJK。字段名以及字段数
据类型可自拟。
(
2)、在联系人表中插入以下 5 条记录:
(
1,朱红敏,15857455696,河南洛阳市中学路 1 号)
(
2,张丽花,18953991767,河南洛阳市武汉路 2 号)
(
3,梁宝莉,13752317719,河南洛阳市大学路 3 号)
(
4,王君志,13057676112,河南洛阳市大学路 4 号)
(
5,李保江,13752309239,河南洛阳市大学路 5 号)
(
3)、在短信记录表中插入以下一条记录
(
1,1,当前系统时间,你的书已到请速来领取,1)
(
4)、更新联系人编号为 4 的联系人电话为 13938801001
(
5)、依据联系人表和通话记录表建立视图:v_lxren_thjlb(联系人编号、姓
名、通话类别、通话状态)
答:(
1)create table lxrenb(
id int NOT NULL,name varchar(20) NOT NULL,tel
varchar(11),address varchar(255),primary key(id))
---同上
(
2)insert into lxrenb
(id, name, tel, address) values(1,’ 朱
红敏’,’ 15857455696’,’ 河南洛阳市中学路 1 号’)
---同上
(
3)insert into dxjlb
(
4)update lxrenb set ... where
(
5)CREATE VIEW v_lxren_thjlb (联系人编号、姓名、通话类别、通话状
态) AS
SELECT ... WHERE ...
2、学生选课系统,主要表有:学生基本信息表 steudents(学号 sid、姓名 sname、
性别 ssex、专业 spro、出生年月 sbirthday 等),选课表 courses_
selection
(学
50
号 sid、课程号 cid、分数
score
),课程表 courses(课程号 cid、课程名 cname、
所属专业
professional
、学分
credits
)要求:
写出 SQL 语句。
1) 查询所有选 SQL 课程的学生学号,姓名和专业。
2) 删除所有选择数学的同学的选课记录。
3) 查询有哪些课程没有被任何同学报选。
答:
(
1) select … from
(
2) delete table_name where
(
3) select … from courses where cid not in
(select cid from
courses_
selection
)