一、关系运算
1、设有两个关系R(A,B)和S(B,C),请写出与下面关系代数表达式等价的SQL语句。πB(R) -πB(σc=`C56`(S))
2、已知关系R、S如下所示,以表的形式给出下列运算结果。
(1)σX=Z(R ╳ S)
已知关系模式如下:
学生:S(Sno,Sname,Ssex,Sage,Sdept) 对应学生的学号,姓名,性别,年龄,系;
课程:C(Cno,Cname,Tname) 对应课程的课程号,课程名,授课教师名字;
学生选课:SC(Sno,Cno,Grade)对应学生选修课程的成绩。
3、检索至少选修两门课程的学生学号及姓名。
4、查询王力同学不学课程的课程名。
5、查询既选修了课程1也选修了课程2的学生学号。
6、检索全部学生都选修的课程的课程号与课程名。
7、查询刘宏老师所授课程的每门课程的学生平均成绩。
8、为“三建”工程项目建立一个供应情况视图,包括SNO、PNO、QTY。
sql触发器级联删除
9、试修改Student表结构,实现学生性别取值为‘男’,‘女’的约束。
答案:
1、
SELECT  B
FROM R
WHERE    B NOT IN
(SELECT    B
FROM S
WHERE C=`C56`);
2、(bebb,cccc) ,(ccc)
3、检索至少选修两门课程的学生学号及姓名。
select sno,sname  from student  where sno in
(select sno  from sc
group by sno
having count(*)>=2);
4、查询王力同学不学课程的课程名。
SELECT  CNAME  FROM  C
WHERE NOT EXISTS
(SELECT*
FROM SC
WHERE SC.CNO=C.CNO AND SNO =
(SELECT SNO FROM STUDENT WHERE SNAME=’王力’));
5、查询既选修了课程1也选修了课程2的学生学号。
SELECT Sno
FROM SC
WHERE Cno='1' AND Sno IN
(SELECT Sno
FROM SC
WHERE Cno='2');
6、检索全部学生都选修的课程的课程号与课程名。
select cno,cname  from course  where not exists
(select *  from student where not exists
(select * from sc  where sno=student.sno and cno=courseo));
7、查询刘宏老师所授课程的每门课程的学生平均成绩。
select cno,avg(grade) 平均成绩
from sc
where cno in
(select cno
from course
where Tname='刘宏')
group by cno;
8、为三建工程项目建立一个供应情况视图V-SPJ,包括SNO、PNO、QTY。
CREATE  VIEW V-SPJ
AS  SELECT  SNO ,PNO ,QTY  FROM SPJ WHERE JNO =
(SELECT JNO FROM J WHERE JNAME = ' 三建 ')
9、实现性别是‘男’或‘女’的Check约束.
ALTER TABLE Student  ADD CONSTRAINT Ssex_check CHECK (Ssex in ('男','女'));
二、
1、对于nvarchar数据类型,下列说法正确的是
A. 最多可以存储长度为8000个汉字的数据
B. 最多可以存储长度为4000个汉字的数据
C. 最多可以存储长度为2000个汉字的数据
D. 存储数据的大小没限制
2、“图书”表中价格列是一个定点小数,小数点前3位,小数点后保留1位。下列类型中最合适的是
A. numeric(3,1)
B. numeric(4,1)
C. numeric(5,1)
D. float
3、对存储的字段(均为6位数字),最适宜的数据类型是
B.char(6)
C.varchar(6)
D.nvarchar(6)
4、某字段的数据类型为nchar(8),存储字符串“database”占用的字节数为
A.4
B.16
C.2
D.8
5、有某存储成绩信息的字段,需存储的数据为“优”、“良”、“中”、“差”,则最适宜该字段的数据类型是
A.char(1)
C.varchar(1)
D.nvarchar(1)
6、设某字段的数据类型为nchar(10),存储字符串“演算法”占用的字节数是
A.10
B.20
C.6
D.3
7、查询电话字段开头字符串为”800”的记录,正确的SQL条件是:where 电话 like
A.’800%_’
B.’800?’
C.’800%’
D.’[800]%’
8、已知一个数据表的结构如下,表名为“Product”。
列名数据类型长度备注描述
ProductID        char        12      主键商品编号
ProductName var  char        50      商品名称
ProductPrice      float              商品价格
ProductMemo      Varchar      50      备注
由于供应商对商品的批发价格进行调整,现需对现行商品价格进行调整,规则如下:原价格小于10元上
调8%,原价格大于30元上调6%,其它上调7%,请编写一段SQL脚本完成上述功能。UPDATE  Product  SET  ProductPrice =
CASE
WHEN ProductPrice < 10 THEN ProductPrice*1.08
WHEN ProductPrice > 30 THEN ProductPrice*1.06
ELSE ProductPrice*1.07
END
11、设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept),
课程表:Course(Cno,Cname,Credit,Semester),
选课表:SC(Sno,Cno,Grade)
针对以上各表,用SQL语句完成以下操作。
修改高等数学的考试成绩,修改规则如下:如果是计算机系学生,则加10分;如果是信息管理系学生则加5分;如果是数学系学生则分数不变。
update sc set grade = grade + case sdept
when '计算机系' then 10
when '信息管理系' then 5
when '数学系' then 0 end
from sc join student s on s.sno = sc.sno
join course c on co = sco
where cname = '高等数学'
12、为描述教师对课程的授课情况,设计了三张表:教师表、课程表和授课表,各表结构如下:教师表:
教师号:普通编码定长字符型,长度为8,主码。
教师名:普通编码定长字符型,长度为10,不允许空。
职称:普通编码定长字符型,长度为8,取值范围为:{讲师,副教授,教授}。
所在部门:普通编码定长字符型,长度为20,默认值为“计算机学院”。
课程表:
课程号:普通编码定长字符型,长度为6,主码。
课程名:普通编码定长字符型,长度为20,不允许空。
学分:整型,允许空,取值范围为1~10。
学期:整型,允许空。
授课表:
教师号:普通编码定长字符型,长度为8,不允许空。外键,引用“教师表”的“教师号”
课程号:普通编码定长字符型,长度为6,不允许空。外键,引用“课程表”的“课程号”
授课学期:普通编码定长字符型,长度为10,不允许空。
授课时数:整型。
其中(教师号,课程号,授课学期)为主码。
写出创建“教师表”、“课程表”和“授课表”的SQL语句,要求在创建表时定义表中的全部约束。
Create table 教师表(
教师号 char(8) primary key,
教师名 char(10) not null,
职称 char(8) check(职称 in ('讲师','副教授','教授')),
所在部门 char(20) default '计算机学院')
go
Create table 课程表(
课程号 char(6) primary key,
课程名 char(10) not null,
学分 int check(学分 between 1 and 10),
学期 int )
go
Create table 授课表(
教师号 char(8) not null,
课程号 char(6) not null,
授课学期 char(10) not null,
授课时数 int,
primary key(教师号,课程号,授课学期),
foreign key(教师号) references 教师表(教师号),
foreign key(课程号) references 课程表(课程号))
三、
1、已知"图书"表结构如下:
条码码(char(5),主键),
书名(varchar(50)),
状态(char(1)),取值为1、2、3,分别表示:可借、不可借、已借。
写出创建满足如下要求的视图(v_book):查询书名中包含“数据库”的图书,显示:条形码、书名和状态,要求状态用对应的中文含义显示。
create view vw_book  as
select 条码号,书名,case when 状态='1' then '可借'
when 状态='2' then '不可借'
when 状态='3' then '已借' end
from 图书 where 书名 like '%数据库%';
2、已知商品表、订单表、订单细节表、顾客表的结构如下所示:
商品表:商品编号(char(5),主键),商品名称(varchar(50),非空),单价(numeric(10,2),非空),库存数量(int,取值大于等于10)。
顾客表:顾客编号(char(5),主键),顾客姓名(varchar(50)),(char(6),每位的取值均为0-9数字)。
订单表:订单编号(char(10),主键),下单日期(date,非空),顾客编号(char(5),外键,引用顾客表的顾客编号)。
订单细节:订单编号(char(10),主键。外键,引用订单表的订单编号),商品编号(char(5),主键。外键,引用商品表的商品编号),数量(int,默认值为1)。