① 、查询7号课程没有考试成绩的学员学号,temp1钦定大小为5MB

【序言:学期最终,整理了和睦那一个学期学习数据库做的陶冶题,也是让投机复习了三次。有不当的话希望大佬可以批评指正,不胜感谢】

1,通过命令行形式打开sqlplus
2,执行登录命令
sqlplus scott/scott@192.168.248.129/orcl
3拓展sqlplus命令测试

SQL 练习题答案

① 、修改数据库

Set time on
Set pagesize 数字
Set linesizes 数字
Set pause on/off

 

(1)给db_temp数据库添加一个数据文件文件db_temp1内定大小为5MB,最大文件大小为100mb,自动递增大小为1MB,存储路径为d:\。

Describe命令  查看表或视图结构 也足以desc

一、补充作业一、

 

设有三个关系:

               S(SNO, SNAME, AGE, SEX,Sdept)

               SC(SNO, CNO, GRADE)

               C(CNO, CNAME, TEACHER)

试用关系代数表达式表示下列查询:

 

1、查询学号为S3学生所学课程的课程名与任课教师名。

  

2、查询至少选修LIU老师所教课程中一门课的女生姓名。

3、查询WANG同学不学的课程的课程号。

4、查询至少选修两门课程的学生学号。

5、查询选修课程中包含LIU老师所教全部课程的学生学号。

补充作业二、

 

三个关系同上,试用SQL语言表示下列查询:

 

1、  查询门门课程都及格的学生的学号

方法1:

提示:根据学号分组,就得到每个学生所有的课程成绩,在某个学生这一组成绩里,如果他所有的课程成绩都大于60分则输出该组学生的学号

Select sno frome sc group by sno having(min(grade)>=60)

 

2、查询既有课程大于90分又有课程不及格的学生的学号

自身连接:

Select sno from sc where grade >90 and sno in (select sno from sc where grade<60)

 

3、查询平均分不及格的课程号和平均成绩

Select cno , avg(GRADE) from sc group by cno having avg(grade)<60

查询平均分及格的课程号和课程名

Select C.cno , Cname from SC,C where C.cno=SC.cno group by C.cno having avg(grade)>=60

 

4、找出至少选修了2号学生选修过的全部课程的学生号

提示:不存在这样的课程y,学生2选修了y,而学生x没有选。

SELECT DISTINCT Sno

   FROM SC as SCX

   WHERE NOT EXISTS

      (SELECT *

       FROM SC as SCY

       WHERE SCY.Sno =‘2’AND NOT EXISTS

                               (SELECT *

                                  FROM SC SCZ

                          WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno))



5、求各门课程去掉一个最高分和最低分后的平均分

第一步,求所有成绩的平均分(去掉一个最高分和最低分)

select   avg(GRADE)   from   SC       where   GRADE   not   in (select   top   1   GRADE   from   SC order   by   GRADE)     and     GRADE   not   in (select   top   1   GRADE   from   SC order   by   GRADE   desc)  

第二步,将所有成绩按各门课程的课程号CNO分组

SELECT CNO avg(GRADE)   from   SC       where   GRADE   not   in (select   top  1  GRADE   from   SC order   by   GRADE)     and     GRADE   not   in (select   top  1  GRADE   from   SC order   by   GRADE   desc) group by CNO

运用连串存储进程sp_helpdb查看db_temp数据库系统音讯

Show 查六柱预测应参数 如:show parameter,show user,show error等

 

Alter database db_temp

Add file

(name=’db_temp1’,filename=’d:\ db_temp1.ndf’,size=5,filegrowth=1,maxsize=100)

Sp_helpdb db_temp

Get命令 把1个sql脚本文件内容放入缓冲区

 一 、查询7号课程没有考试成绩的学习者学号。

 

用系统编制程序编制命令
在SQL*PLUS中运作操作系统缺省的文本编辑程序(EDIT)
命令为:edit或者ed

    Select sno fromsc where cno=’7′ and
grade is null

(2)给db_temp数据库添加三个日志文件db_temp1-log文件,内定大小为5MB,最大文件大小为不限量大小,自动递增大小为百分之十,存储路径为d:\。

将缓存中的sql语句保存到文件中:SAVE 文件名【具体途径】
查看缓存sql:list

 

1 Alter database db_temp
2 
3 Add log file
4 
5 (name=’ db_temp1-log’,
6 
7 filename=’d:\ db_temp1-log.ldf’,size=5,filegrowth=10%,maxsize=unliminted)

推行文书中的sql语句:
START my.sql
@ my.sql

 二 、查询7号课程战表在捌拾陆分以上或伍拾陆分以下的学习者学号。

 

清空缓冲区:clear buffer
格式化命令:column
column sal format $999,999.00
如:
SQL> select ename, sal from emp
  2
SQL> /

Select sno from sc where cno=’7′ and grade
not between 60and 90

 

ENAME               SAL

 

(3)给db_temp数据库添加一文书组 hh,利用体系存储进程sp_helpdb查看db_temp数据库系统消息


 三 、查询课程名以“数据”多少个字开首的装有课程的课程号和课程名。

1 Alter database db_temp

3 Add filegroup hh

SMITH           $800.00
ALLEN         $1,600.00
WARD          $1,250.00
JONES         $2,975.00
MARTIN        $1,250.00
BLAKE         $2,850.00
CLARK         $2,450.00

Select cno,cname from c where cname like
‘数据%’

 

重置为默许值:clear columns;
将显示屏上的情节写入到文件中
spool fileName
完工写入
spool off

 

 

3.Oracle查询
1) 查询EMP表,突显部门号为10的有着雇员的NAME 、JOB、SALA福睿斯Y和
DEPTNO,并以岗位降序、薪俸升序进行排序。
select ename,job,sal,deptno from emp where deptno=10 order by job desc ,
sal asc

 肆 、查询每种学生拥有科目的平分战绩,输出学生学号和平均战表。

 (4)、 给db_temp数据库添加一数据文件db_temp2(该文件属性自定)到hh组

2) 从EMP表中查询全部雇员的NAME和资助(SALAHighlanderY+COMM),并处理null行。
select ename,(sal+nvl(comm,0)) from emp

    Select sno,avg(grade)from sc group by
sno

Alter database db_temp

Add file

(name=’db_temp2’,filename=’d:\ db_temp2.ndf’,size=5,filegrowth=1,maxsize=100) to filegroup hh

3) 计算30号部门的总人数、人均薪水、最高报酬和最低薪资。
select count(*) totle,avg(sal),max(sal),min(sal) from emp where
deptno=30

 五 、查询每门学科的选修人数,输出课程号和选修人数。

 

4)
查询种种部门种种工种的平均薪俸、逐个单位的平均薪给和具有员工的平均报酬。
select deptno,job,avg(sal) from emp group by rollup(deptno,job);

    Selectcno,count(*) from sc group by
cno

 (3)修改db_temp数据库中的数据文件db_temp1,之后拔取序列存储进度sp_helpdb查看db_temp数据库系统消息

5)
查询各类部门中相继工种的平均薪俸、每种机关的平均薪酬、各个工种的平均薪俸和具有职工的平均薪资。
select deptno,job,avg(sal) from emp group by cube(deptno,job);

 ⑥ 、查询选修7号课程的学员的学号、姓名、性别。

 

6)
查询EMP,展现一九九九年未来参与工作人员的NAME、JOB和HIREDATE,并以工作日期的升序举行排序。
select * from emp where hiredate>’1-JAN-99′;

    Selects.sno,sname,ssex from s,sc where
s.sno=sc.sno and cno=’7′

Alter database db_temp

Modify file

(name= db_temp1,size=10,maxsize=500)—修改了该数据库中的db_temp1文件,修改了该文件的大小和最大大小

7) 查询名字以“S”开首的有着员工:
select *from emp where ename like ‘S%’;

    或: Select sno,sname,ssex from s
where sno in

 

8) 让员工姓名右对齐显示
col ename jus left

              ( Select sno from sc where
cno=’7′ )

(4)删除db_temp数据库中3个数据文件db_temp1,三个日记文件db_temp1-log

9) 突显姓名只有八个字母组成的职工音信
select *from emp where ename like ‘_____’
或者
select *from emp where length(ename)=5

 柒 、查询选修7号课程的学员的平均年龄。

Alter database db_temp

remove file db_temp1



Alter database db_temp

Remove  file db_temp1-log

10) 查询在当月尾数第肆日入职的职工音讯
select *from emp where hiredate = last_day(hiredate)-2

    Selectavg(sage) from s,sc where
s.sno=sc.sno and cno=’7′

 

2) 对各表中的数据开展不一致规格的询问;
a)查询全部学生的学号和姓名
select sno,sname from student;

    或: Select avg(sage) from s where sno
in

(7)
删除文件组hh

b)查询全部学生的详尽记录
select *from student;

              (Select sno from sc where
cno=’7′ )

 

c)查询全部选修过课程的学生学号
select distinct sno from sc;
或者
select sno from student where sno in (select sno from sc);

 八 、查询有30名上述学生选修的课程号。

Alter database db_temp

Remove filegroup  hh

d)查询考试有不及格的学员学号
select sno from sc where nvl(grade,0) <60;

    Select cno fromsc group by cno having
count(*)>30

 

e)查询不是音信系(IS)、计算机系(CS)的学员性别、年龄、系别
select ssex,sage,sdept from student where sdept not in(‘is’,’cs’);

 九 、查询于今未曾考试不及格的学生学号。

 

f)查询选修了4号课的学习者学号和实绩,结果按成绩降序排列
select sc1.sno,sc1.grade from sc sc1,sc sc2 where sc2.cno=4 and
sc1.sno=sc2.sno;

    Select distinctsno from sc where sno
not in

(8)用SQL命令删除数据库db_temp

g)查询每种课程号和呼应的选课人数
select cno,count(sno) from sc group by cno;

         ( Select sno from sc where
grade<60 )

Drop database db_temp

h)查询总结机系(CS)的学生姓名、年龄、系别
select sname,sage,sdept from student where sdept=’cs’

    或: Select sno from sc group by sno
havingmin(grade)>=60

 

i)查询年龄18-20岁的学习者学号、姓名、系别、年龄;
select sno,sname,sage,sdept from student where sage between 18 and 20

⑩ 、查询全数考试成绩的平分分相同的学习者学号分组

 

j)查询姓刘的学员情状
select *from student where sname like ‘刘%’

二、

贰 、管理数据表

k)查询既选修1号课程,又选修2号课程的学童学号和成绩
select sno,grade from sc where cno = 1 and cno in(select sno from sc
where cno=2);

 壹 、找出选修课程号为C2的学童学号与成就。

一 、附加数据库temp-db
,并运用存储进程 sp_renamedb ‘愿数据库名’,‘新数据库名’   ,
将该数据库重命名为stu

l)查询学生的人名和落地年份(今年贰零零壹年)
select sname,2017-sage born from student;

Select sno,grade from sc where
cno=’C2′

 sp_renamedb  'temp-db ' ,’ stu’

m)查询没有成绩的学童学号和科目号
select s.sno,c.cno from student s,course c where (s.sno,c.cno) not
in(select sno,cno from sc);

 

 

n)查询总战绩大于200分的学员学号
select sno from sc group by sno having sum(grade)>200;

 ② 、找出选修课程号为C4的学生学号与姓名。

 

o)查询每门学科不及格学生人数
select cno ,count(sno) from sc where nvl(grade,0)<60 group by
cno【不及格分组】

    Selects.sno,sname from s,sc where
s.sno=sc.sno and cno=’C4′

贰 、利用存储进程sp_rename ‘原表名’,’新表名’  ,依次将该stu数据库的student 重命名为s,
 course重命名为c  ,s-c 重命名为sc    

p)查询不及格课程超过3门的学员学号
select sno from (select sno,cno from sc where nvl(grade,0)<60) r
group by sno having count(r.cno)>3

    注意本题也得以用嵌套做

   sp_rename ' student' ,’ s’  

sp_rename 'course' ,’ c’  

sp_rename ' s-c ' ,’ sc’      

q)查询年龄在10到1柒岁之间的学童音信
select *from student where sage>=10 and sage<=19;
select *from student where sage between 10 and 19;【between and
包涵三头】

思想本题改为“找出选修课程号为C4的学员学号、姓名与成就”后仍可以用嵌套做吧?

 

r)查询全体学生意况,按所在系升序排列,同二个系的学童按年龄降序排列
select *from student order by sdept asc,sage desc;

 

            

s)查询选了1号课程的学员平均成绩
select cno, avg(grade) avgGrade from sc where cno=1 group by cno;

 三 、找出选修课程名为 Maths
的学员学号与姓名。

3.运用sql
命令在stu数据库中,分别按以下须求补充多少个关系,设置对应表的主键,外键和自律关系。
                 

t)查询选了3号课程的学童的万丈分
select max(grade) from sc where cno=3;

    Selects.sno,sname from s,sc,c

                            T表

u)查询各种同学的总成绩
select sno, count(grade) from sc group by sno;

    where  s.sno=sc.sno and c.cno=sc.cno
andcname=’Maths’

列名

数据类型

约束

TNO

Varchar(20)

主键,并只能以T开头

tn

Varchar(20)

非空

sex

Char(2)

age

tinyint

30-65

prof

Varchar(50)

只能是教授,副教授,讲师,助教

sal

money

 

comm

smallmoney

 

dept

Varchar(50)

计算机

复杂查询
内容和主要步骤:
1)实验一中的数据为底蕴

留意本题也得以用嵌套做

                            Tc 表

2) 对各表中的数据进行不一样口径的连天查询和嵌套查询;

 

列名

(1)?查询每一种学生及其选课意况;
select * from sc;

 肆 、找出选修课程号为C2或C4的学生学号。

数据类型

(2)?查询每门课的直接先修课
select a.cno,b.cpno from course a,course b where a.cpno=b.cno;

    Select distinctsno from sc where cno
in (‘C2′,’C4’)

约束

(3)?将STUDENT,SC进行右连接
select *from student right join sc on student.sno=sc.sno;

或: Select distinct sno from sc where
cno=’C2′ or cno=’C4′

备注

(4)?查询有不及格的学生姓名和所在系
select sname,sdept from student where sno in (select distinct sno from
sc where nvl(grade,0)<60);

 

tno

(5)?查询全体成绩为完美无缺(大于八十六分)的学生姓名
select sname from student where sno in (select distinct sno from sc
where nvl(grade,0)>90);

 ⑤ 、找出选修课程号为C2和C4的学习者学号。

Varchar(20)

(6)?查询既选修了2号课程又选修了3号课程的学习者姓名、学号;
 select sname,sno from student where sno  in (select sno from sc where
cno = 3 and cno in(select sno from sc where cno=2));

    Select sno fromsc where cno=’C2′ and
sno in

外键

(7)?查询和刘晨同一年龄的学童
select *from student where sname<>’刘晨’ and sage in (select sage
from student where sname=’刘晨’);

         ( Select sno from sc where
cno=’C4′ )

Tno+cno

(8)?选修了学科名为“数据库”的学员姓名和年龄
select sname,sage from student  where sno in(select sno from sc where
cno in(select cno from course where cname=’数据库’))

    注意本题也得以用一而再做

主键

(9)?查询其余系比IS系任一学员年龄小的学生名单
select sname from student where sdept<>’is’ and sage < (select
max(sage) from student where sdept=’is’)

思考:Select distinct sno from sc where
cno=’C2′ andcno=’C4’正确吗?

cno

(10)?查询其余系中比IS系全体学员年龄都小的学生名单
select sname from student where sdept<>’is’ and sage < (select
min(sage) from student where sdept=’is’)

 

Char(8)

(11)?查询选修了方方面面课程的学童姓名
 select sname from student where sno in(select sno from sc group by sno
having count(cno) = (select count(cno)from sc))

 六 、找出不学C2课程的学员姓名和年龄。

外键

(12)?查询总计机系学生及其性别是男的学员
select *from student where sdept=’cs’ and ssex=’男’

    Selectsname,sage from s where sno not
in

                            User表

(13)?查询选修课程1的学生汇集和选修2号课程学员汇集的差集
select *from sc where cno=’1′ and sno not in(select sno from sc where
cno=’2′)

         ( Selectsno from sc where
cno=’C2′ )

列名

数据类型

约束

备注

ID

INT

主键

标识列,自动增长,种子为1,增量为1

Username

Varchar(20)

不能重复

 

password

Varchar(50)

非空

 

(14)?查询李丽同学不学的学科的学科号
select cno from course where cno not in(select cno from sc where sno in
(select sno from student where sname=’李丽’))

    或: Select sname,sage from s where
not exists

Create table  t

(TNO Varchar(20) primary key  check (tno like 't%'),

tn Varchar(20) not null,

sex Char(2) default '男',

age tinyint check (age between 30 and 65),

prof Varchar(50)  constraint xx check (prof in ('教授','副教授','讲师','助教' )),

sal money,

comm smallmoney,

dept Varchar(50) default '计算机') 



create table tc 

(tno Varchar(20) foreign key references t(tno),

cno Char(8) foreign key references c(cno)

primary key (tno,cno) )

create table [user]

(id int identity(1,1) primary key,

Username Varchar(20),

password Varchar(50)

)

(15)?查询选修了3号课程的学习者平均年龄
select avg(sage) from student where sno in(select sno from sc where
cno=3)

              (Select * from sc where
sno=s.sno and cno=’C2′ )

 

(16)?求每门学科学生的平分成绩
select cno ,avg(grade) from sc group by cno;

 

4.给s表添加手机号列,家庭住址列,身份证号须要手机号只好是-9之间的字符,且长度为位,

(17)?统计每门课程的学员选修人数(当先二位的才总括)。
务求输出课程号和选修人数,结果按人口降序排列,若人数相同,按学科号升序排列
select cno ,count(sno) from sc group by cno having count(sno)>3 order
by count(sno) desc,cno asc;

 柒 、找出选修了数据库学科的具有学员姓名。(同3)

家园住址不可以为空,身份证号须要不可以为空,且无法重复 

(18)?查询学号比刘晨大,而年龄比她小的学童姓名。
select a.sname from student a,(select sno,sname,sage from student where
sname=’刘晨’) b where a.sno>all b.sno and a.sage<all b.sage;

    Select snamefrom s,sc,c

alter table s 

add tel char(11) check (tel like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),

addr varchar(50) not null,

sfzh varchar(20) not null unique

(19)?求年龄大于女校友平均年龄的男同学姓名和年龄
select sname,sage from student where sage  > (select avg(sage) from
student where ssex=’女’);

where  s.sno=sc.snoand c.cno=sc.cno and
cname=’数据库’

 

(20)?求年龄大于全部女校友年龄的男同学姓名和年龄
select sname,sage from student where sage  >all (select sage from
student where ssex=’女’);

 

 

(21)?查询至少选修了95002选修的上上下下学科的学童号码
考虑:首先查找学号为95002的校友的课程号集合,然后搜索sc中颇具学号在该集合中的选课音讯,【此时该选课新闻均为95002选过的科目消息】记为
msg
然后从msg中以学号举办分组,然后选出cno个数和95002选课个数相同的学号,该学号就是最少选修了95002选修的全数课程的学生学号
select sno from sc where sno<>95002
and
cno in (select cno from sc where sno=95002)
group by sno
having
count(cno)=(select count(cno) from sc where sno=95002)

 捌 、找出数据库课程不及格的女人姓名。

⑤ 、给s表添加一唯一约束到姓名列,一私下认同约束到姓别列,须求专擅认同值为“男”

(22)?查询95001和95002五个学生都选修的课程的音信
select cno from sc where sno =95001 and cno in (select cno from sc where
sno=95002);

    连接:Select sname from s,sc,c

alter table s 

add unique(sn),

default '男' for sex

更新查询难题:
1)    应用INSE途睿欧T,UPDATE,DELETE语句进行更新操作;
a)    插入如下学生记录(学号:95030,姓名:李莉,年龄:18)
insert into student (sno,sname,sage) values (95030,’李莉’,18)

         where  s.sno=sc.sno
andc.cno=sc.cno and cname=’数据库’

 

b)    插入如下选课记录(95030,1)
insert into sc (sno,cno) values(95030,1)

                and grade<60 and
ssex=’女’

6.删减t表中的prof列上的约束

c)    总括机系学生年龄改成20
update student set sage=20  where sdept=’cs’;

    嵌套:Select sname from s where
ssex=’女’ and  sno in

alter table t

drop constraint xx 

d)    数学系全数学生战绩改成0
update sc set grade = 0
where sno in (select sno from student where sdept=’ma’)

               (Select sno from sc where
grade<60 and cno in

 

e)    把低于总平均成绩的女校友成绩提升肆分
update sc set grade = grade+5 where sno in (select sno from student
where ssex=’女’ and grade < (select avg(grade) from sc))

                     ( Select cno from c
where cname=’数据库’ )

七 、删除s表与sc 表之间的涉嫌,再经过命令重新建立其涉及

f)    修改2号课程的实绩,若战表小于柒十分进步5%,成绩当先75时增加%1
update sc set  grade = grade+grade*0.05 where grade<75
update sc set grade=grade+grade*0.01 where grade>75

               )

alter table sc

drop constraint 外键约束的名称 



alter table sc 

add foreign key (sno) references s(sno)

4)(七个语句完结,注意顺序)
g)    删除95030学员音信
delete student where sno=95030

 

 

h)    删除SC表中无战绩的记录
delete sc where grade is null;

 玖 、找出各门课程的平均战绩,输出课程名和平均战绩。

 

i)    删除张艺馨的选课记录
delete sc where sno in (select sno from student where sname=’张娜’)

    Selectcname,avg(grade) from
sc,c

三 、表单查询

j)    删除数学系全体学生选课记录
delete sc where sno in (select sno from student where sdept=’ma’)

    wherec.cno=sc.cno  group by
c.cno,cname

1.查询全部学生的学号和人名

k)    删除不及格的学习者选课记录
delete sc where grade <60

沉凝本题也足以用嵌套做吧?

select sno,Sn from s

l)  
 查询每一门学科成绩都不止等于八十几分的学童学号、姓名和性别,把值送往另3个已经存在的基本表STU(SNO,SNAME,SSEX)中
create table stu as (select sno,sname,ssex from student where sno
in(select sno from sc where sno not in(select distinct sno from sc where
grade<80)))

 

 

m)    把持有学生学号和科目号连接追加到新表中
create table newTable as select * from student,sc;

拾、找出各类学生的平分成绩,输出学生姓名和平均成绩。

2.查询考试有不及格的学生学号,若有多门不及格,相同的学号只体现一个。

n)    全部学生年龄增1
update student set sage=sage+1;

    Selectsname,avg(grade) from
s,sc

select distinct sno from Sc where score<60

o)  
 总结3门之上课程不及格的学习者把相应的学生姓名、系别追加到其余壹个表中
create table failT as select sname,sdept from student where sno
in(select sno from sc where grade<60 group by sno having
count(cno)>=3)

    wheres.sno=sc.sno group by
s.sno,sname

 

沉凝本题也可以用嵌套做吗?

3.查询年龄在20岁以下的具有女孩子的人名和性别

 

select Sn,sex from s where age<20 and sex='女'

1一 、找出至少有三十多个学生选修的教程名。

 

    Select cnamefrom c where cno in

4.查全体第四个字为小或晓的学童学号和姓名

         ( Selectcno from sc group by cno
having count(*)>=30 )

select sno,Sn from s where Sn like '_[小晓]%'

小心本题也可以用一而再做

 

 

5.查全数不姓王的学童姓名

1② 、找出选修了不少于3门课程的学员姓名。

select Sn from s where Sn not like '王%'

    Select snamefrom s where sno in

 

         ( Selectsno from sc group by sno
having count(*)>=3 )

6.查总计机系,自动化系的学生姓名和性别

专注本题也得以用延续做

select Sn,sex from s where dept in ('计算机','自动化')

 

 

1三 、找出各门课程的大成均不小于捌拾柒分的学童姓名。

7.查所怀有学生的全名及出生年份,并为对应列给别名

   Select snamefrom s,sc where
s.sno=sc.sno

select Sn,year(GETDATE()) 出生年份 from s 

         group bys.sno,sname having
min(grade)>=90

 

方法二:

8.查询姓王或李的学生姓名和所在系

Select sname from s where sno not
in

select Sn,dept from s where Sn like '[王李]%'

         ( Selectsno from sc where
grade<90 )

 

借使有一门不低于八十九分就会输出该学员学号

9.查询所有选了课的学童学号,需求选了多门课的学习者学号只显示一遍

 

select distinct sno from Sc

1肆 、找出数据库课程成绩不小于该门课程平均分的学习者姓名。

 

    Select snamefrom s,sc,c

10.询问分数为80,九十多分的学童选课记录

    where  s.sno=sc.sno and sc.cno=c.cno
and cname=’数据库’ and grade>

select * from Sc where score in (80,90)

         ( Selectavg(grade) from
sc,c

 

           where sc.cno=c.cnoand
cname=’数据库’

11.查询以’编’开首的,且尾数第①个为’原’的课程消息

         )

select * from C where cn like '编%原__%'

1伍 、找出各种系科男女学生的平均年龄和食指。

 

    Selectsdept,ssex,avg(sage),count(*)
from s group by sdept,ssex

12.询问薪给在一千–三千元之间(含一千,2000)的总计机系教授的消息

1六 、找出总括机系(JSJ)课程平均分最高的学生学号和人名。

select * from t where sal between 1000 and 2000

    Selects.sno,sname from s,sc where
s.sno=sc.sno and sdept=’JSJ’

 

    group bys.sno,sname

④ 、函数使用

    havingavg(grade) >=ALL

壹 、统计c2
课程的缺考学生人数

         ( Selectavg(grade) from
s,sc

select count(sno) from sc
where cno='c2' and score is null

           wheres.sno=sc.sno and
sdept=’JSJ’

 

           group bys.sno

② 、查询选了课的学习者人数

         )

select count(distinct sno) from sc 

1柒 、(补充)查询每门科目标及格率。

 

    本题可以分三步做:

③ 、查询s1同学的总分,平均分,最高分,最低分,已经最高分和压低分之间的差值

   

select sum(score),avg(score),max(score),
min(score),max(score)-min(score)
from sc where sno='s1'

    第叁步:得到每门课的选修人数

 

     createview  v_all(cno,cnt)

④ 、查询刘伟的总收入,要求输出教授号,总收入

         as selectcno, count(*) from sc
group by cno

select tno,sal+comm 总收入 from t
where tn='刘伟'

select tno,sum(sal+comm)总收入 from t
where tn='刘伟'
group by tno 

    第①步:拿到每门课及格人数

 

     createview 
v_pass(cno,cnt_pass)

伍 、总括sc表中每门课程的补考人数,需要出示课程号,补考人数

         as selectcno, count(*) from sc
where grade>=60 group by cno

select cno,count(sno)补考人数
from sc
where score<60 or score is null
group by cno 

   
第③步:每门课的合格人数/每门课选修人数

 

     selectv_all.cno, cnt_pass*100/cnt 
from  v_all, v_pass

⑥ 、查询每门课程的平均分和最高分

     where v_all.cno = v_pass.cno

select avg(score),max(score) from sc
group by cno 

 

 

1⑧ 、查询平均分不及格的学童的学号,姓名,平均分。

柒 、总结汉子和女子的人口,突显性别和人数,并按人口升序排。

    Selectsc.sno,sname,avg(grade) from
student,sc

select sex,count(sno) from s

group by sex
order by count(sno) asc 

    wherestudent.sno=sc.sno

 

    group bysc.sno,sname

⑧ 、查询每一个学生所选课程的平分分,并各自为那两列取别名为学号,平均分。

    havingavg(grade)<60

select sno 学号,avg(score)平均分
from sc
group by sno 

沉凝本题也足以用嵌套做吧?

 

 

玖 、查询选修了c2课程的学员学号与成就,按成绩降序排列。

1玖 、查询平均分不及格的学生人数。

select sno,score
from sc
where cno='c2'
order by score desc 

    Select count(*)from student

 

    where sno in

十 、查询各系分歧职衔的男女助教的人数

         ( selectsno from sc group by sno
having avg(grade)<60 )

select sno,score
from sc
where cno='c2'
order by score desc 

    上面是1个卓绝的错误

 

Select count(*) from sc group by sno
havingavg(grade)<60

1① 、查询选修了2门课上述课程的学童的学号和总战绩,按总成绩降序排序。

那是各个学生有几门不及格的数目

select sno,sum(score)
from sc
group by sno
having count(cno)>2

 

 

三、

1② 、查询平均分在七十分及以上的科目号;

 壹 、查询薪酬在一千到三千元以内的男性业务员的全名和办公编号。

select cno from sc
group by cno
having avg(score)>=75

    SelectYname,Ono from YWY

 

    where Salarybetween 1000 and 3000 and
Ysex=’男’

1叁 、查询电脑系收入超过九千的园丁的园丁名

 ② 、查询各样办公室的业务员人数,输出办公室编号和相应的人数。

select tn from t
where dept='计算机'
group by tn
having sum(sal+comm)>8000

select tn from t
where dept='计算机'
and comm+sal>8000

    SelectOno,count(*) from YWY group by
Ono

 

 三 、查询各个客户在贰零零壹年三月选购的总金额,输出客户号和对应的总金额。

1肆 、查询统计机系,电子系教师职称的导师人数

    SelectKno,sum(Fmoney) from FP

select count(tno) from t
where (dept='计算机'or dept='电子')
and prof='讲师'
group by dept

select count(tno)
from t group by dept,prof  having
((dept='计算机'or dept='电子')and prof='讲师')

    where Fdatebetween ‘2002.5.1’ and
‘2002.5.31’

 

    group by Kno

贰 、多表查询

 ④ 、查询2003年二月购买次数当先两次的全数客户号,且按客户号升序排序。 

① 、连接查询

    Select Kno fromFP

(1)from
表1,表2… where 连接条件–内连接

(2)表1
join 表2 on 连接条件join 表3 on                 连接条件
…..–内接连

 (3)表1
left|rightjoin 表2 on 屡次三番条件 left|rightjoin 表3 on
          连接条件 …..–外连接

    where Fdatebetween ‘2002.5.1’ and
‘2002.5.31’

内接连:突显满足再而三条件的元祖
外接连:突显知足两次三番条件的元祖,以及左表或右表不满意一而再条件的元祖

    group by Kno

***s,sc

    havingcount(*)>5


    order by KnoASC

from s,sc
where s.sno=sc.sno

s join sc
on s.sno=sc.sno –内连接

========================================
s,sc
s left
join sc on s.sno=sc.sno –左外连接

 五 、查询各办公室男性和女性业务员的平均薪俸。

sc right
join s on s.sno=sc.sno–右外连接

    SelectOno,Ysex,avg(Salary) from YWY
group by Ono,Ysex

壹 、查询选了课的学生学号,姓名
s,sc

 六 、查询二零零二年三月曾经在王海亮业务员手中进货过商品的客户号、

select s.sno,sn from s,sc where s.sno=sc.sno
 select s.sno,sn
 from s join sc on s.sno=sc.sno

            客户姓名和联系电话。

 

    SelectKno,Kname,Phone from KH where
Kno in

贰 、查询没有选课的学员学号和姓名s,sc

         ( SelectKno from FP

select s.sno,sn
 from s left join sc on s.sno=sc.sno
where cno is null

           whereFdate between ‘2002.5.1’
and ‘2002.5.31’ and Yno in

 

                      ( Select Yno from
YWY where Yname=’王海亮’ )

 三 、查询选了数据库课程的学习者姓名s,sc,c

         )

select sn  
from s,sc,c where s.sno=sc.sno and sc.cno=c.cno and cn='数据库'

select sn
from
s join sc on s.sno=sc.sno join c on c.cno=sc.cno
where cn='数据库'

    注意本题也得以用再而三做

 

 柒 、查询全体薪资比1538号业务员高的业务员的数码、姓名和薪俸。

④ 、查询刘伟所教课程的课程名 c,t,tc

    SelectYno,Yname,Salary from YWY where
Salary >

select cn from t,tc,c where t.tno=tc.tno
and tc.cno=c.cno and tn='刘伟'

         ( SelectSalary from YWY where
Yno=’1538′ )

 

 八 、查询全数与1538号业务员在同三个办公的别的业务员的数码和人名。

五 、查询各个学员姓名,选课门数 s
sc

    SelectYno,Yname from YWY where
Yno!=’1538′ and Ono in

select sn,count(cno)
from
s left join sc on s.sno=sc.sno
group by sn 

         ( SelectOno from YWY where
Yno=’1538′ )

 

 ⑨ 、查询销售总金额最高的业务员的号子。

六 、查询跟赵亦在同两个系的学生姓名 s
s

    Select Yno fromFP group by Yno having
sum(Fmoney) >=ALL

select x.sn
from s x,s y where x.dept=y.dept  and y.sn='赵亦' and x.sn<>'赵亦'

         ( Selectsum(Fmoney) from FP group
by Yno )

 

拾、查询全部业务员的编号、姓名、薪给以及薪资比她高的别的业务员的平均薪俸。

 
柒 、查询比钱尔大的学习者姓名 s,s

    应用自连接

select x.sn
from s x,s y where x.age>y.age  and y.sn='钱尔'

   
SelectY1.Yno,Y1.Yname,Y1.Salary,avg(Y2.Salary)

 

    from   YWY Y1, YWY Y2

五、查询

    where  Y1.Salary < Y2.Salary

(1)、连接查询:

    group by  Y1.Yno  

一 、查询李力先生所教课程的课程名

 

select cn from C,t,tc where t.tno=tc.tno and C.cno=sc.cno and tn='李力'

四、

 

 ① 、找出各种班级的班级代码、学生人数、平均战绩。

贰 、查询电脑系选了数据库课程的学生姓名

    SelectBJDM,count(*),avg(CJ) from SC
group by BJDM

select sn from s,sc,c where S.sno=sc.sno and c.cno=sc.cno and dept='计算机' and cn='数据库'

 贰 、找出各个学员的班级代码、学生姓名、考试科目数、总成绩。

 

    SelectBJDM,XSXM,count(*),sum(CJ) from
SC

③ 、查询选了c1或c2课程的学生学号,姓名

    group byBJDM,BNXH,XSXM

select s.sno,sn from s,sc where s.sno=sc.sno and cno in ('c1','c2')

 3、输出一张表格,每位学生对应一条记下,包蕴字段:

 

         
班级代码、学生姓名、语文成绩、数学战绩、外语成绩。

④ 、查询教了总结机系学生且职称为教学的助教的人名,职称,薪金

   
SelectSC1.BJDM,SC1.XSXM,SC1.CJ,SC2.CJ,SC3.CJ

select sn,prof,sal from t,tc,sc,s where t.TNO=tc.tno and sc.cno=tc.cno and s.sno=sc.sno
and dept='计算机' and prof='教授'

    from  SC SC1, SC SC2, SC SC3

 

    whereSC1.BJDM=SC2.BJDM and
SC1.BNXH=SC2.BNXH and

五 、查询各系的平分成绩需要出示系别,平均战绩,并按平均成绩降序排序。

         SC2.BJDM=SC3.BJDM and
SC2.BNXH=SC3.BNXH and

select dept,AVG(score) from s,sc where s.sno=sc.sno group by dept
order by AVG(score) desc 

          SC1.KM=’语文’ and SC2.KM=’数学’
and SC3.KM=’外语’

 

 肆 、输出一张表格,有实绩低于伍拾陆分的每人学生对应一条记下,包含字段:

⑥ 、查询平均成绩在八十多分以上的科目号,课程名

         
班级代码、学生姓名、最低战绩。

select c.cno,cn from c,sc where c.cno=sc.cno group by c.cno
having AVG(score)>80

    SelectBJDM,XSXM,min(CJ) from SC

 

    where  CJ<60 group by
BJDM,BNXH,XSXM

七 、查询跟刘伟职称相同且薪水一样的名师的姓名,职称,薪资

    或:  SelectBJDM,XSXM,min(CJ) from
SC

select x.tn,x.prof,x.sal from t x,t y where x.prof=y.prof and x.sal=y.sal and y.tn='刘伟'
and x.tn<>'刘伟'

          group byBJDM,BNXH,XSXM

 

          havingmin(CJ)<60


用SQL完成S,SC表的本来连接

 ⑤ 、输出一张表格,有实绩低于陆拾分的诸位学生对应一条记下,包罗字段:

select s.*,cno,score from s,sc where s.sno=sc.sno .

         
班级代码、学生姓名、最高成绩、平均战表。

 

    SelectBJDM,XSXM,max(CJ) from SC

玖 、查询没有学生选的学科的学科号,课程名

    group byBJDM,BNXH,XSXM

select c.cno,cn from c left join sc on sc.cno=c.cno
where cno is null

    havingmin(CJ)<60

 

    请想想下列做法是不是科学:

十 、查询全部学生的真名,选课门数

          SelectBJDM,XSXM,max(CJ),avg(CJ)
from SC

select sn,COUNT(cno) from s left join sc on s.sno=sc.sno group by sn 

         where  CJ<60 group
byBJDM,BNXH,XSXM

 

 六 、输出一张表格,全体战绩都不低于六十多分的各位学生对应一条记下,包罗字段:

1一 、查询数据库,程序设计两门课程的总分,平均分

         
班级代码、学生姓名、平均战表。

select cn,SUM(score),AVG(score) from c,sc where c.cno=sc.cno  and cn in ('数据库','程序设计')group by  cn

    SelectBJDM,XSXM,avg(CJ) from SC

 

    group by BJDM,BNXH,XSXM

二、(子查询)

    havingmin(CJ)>=60

壹 、查询选了C1课程的学生姓名
思路一:从sc表中找出全体选了c1学科的学员学号,再根据学号到s表中找出相应的学童姓名

 柒 、输出一张表格,每1位学生对应一条记下,包含字段:

select sn from s where SNO in (select SNO from SC where CNO='c1')

         
班级代码、学生姓名、去掉三个低于分后的平均成绩。

 

   
SelectBJDM,XSXM,(sum(CJ)-min(CJ))/(count(*)-1) from SC

思路二:以此到s表中判断每种学生是不是选c1学科–相关子查询

    group byBJDM,BNXH,XSXM

select sn from s
where 'c1' in (select cno from SC where SNO=s.SNO )
或
select sn from s where  exists(select * from SC where SNO=s.SNO and CNO='c1')

 捌 、输出一张表格,每门科目对应一条记下,包蕴字段:

 

         
科目、去掉三个低于分后的平分战表。

② 、查询王伟先生所教课程的科目号

    Select
KM,(sum(CJ)-min(CJ))/(count(*)-1)from SC

思路一:先从t表中找到刘伟的助教号,再采取该老师号到tc表找到该助教所教课程号

    group by KM

select cno from TC where TNO =(select TNO from t where tn='王伟')

 

 

 

 

 

思路二:依次到c表中去看清课程是或不是由王伟先生教学

        实验指引中“八 SQL查询语句”
的答案

select cno from c  where  '刘伟' in (select tn from t where tno in (
select tno from TC where CNO=C.cno))--不带exists 或not exists的相关子查询
或
select cno from C where exists(select * from  TC ,t where TC.TNO=t.tno  and CNO=c.cno
and tn='刘伟')--带exists的相关子查询

 

 

 一 、查询年龄在19至二十四岁之间的女人的学号,姓名,年龄,按年龄从大到小排列。

叁 、查询赵亦选的学科名。
思路一:先找到赵亦的学号,再依据学号去找该学生所选的学科号,最终依据课程号找对应的科目名

    Selectsno,sname,sage from
student

select cn from C
where CNO in (select CNO from SC where SNO =(select
SNO from s where SN='赵亦') )--普通子查询

    where sagebetween 19 and 21 and
ssex=’女’

 

    order by sagedesc

思路二:以此到c表中去判断该们课程是不是被赵亦选修

 贰 、查询姓名中有“明”字的学生人数。

select cn  from C where '赵亦' in (select sn from s,SC where s.SNO=SC.SNO and
CNO=C.CNO )--不带exists 或not exists的相关子查询
或
select cn from C where exists(select * from s,SC where s.SNO=SC.SNO and CNO=C.CNO
and SN='赵亦')--带exists的相关子查询

    Select count(*)from student

 

    where snamelike “%明%”

④ 、查询不学数据库的学童学号。
思路一:先找找全体选了数据库的学号,找不属于这么些集合的学童学号–普通子查询

 ③ 、查询1001课程没有实绩的学童的学号。

select sno from s where SNO not in
(select sno from SC
where CNO  =(select CNO from C where CN='数据库'))--普通子查询

    Select sno fromsc where cno=’1001′ and
grade is null

 

 四 、查询JSJ、SX、WL系的学员学号,姓名,结果按系及学号排列。

思路二:用拥有学生的学号减去选了数据库的学员学号

    Selectsno,sname,sdept from
student

select sno from s
except
select sno from s where SNO in (select SNO from SC where CNO =(
select CNO from C where CN='数据库'))

    where sdept in( ‘JSJ’, ‘SX’, ‘WL’
)

 

    order bysdept,sno

思路三:依次到s表中去判断每一种学生是不是选了数据库–相关子查询

 ⑤ 、统计每一门课的总分、平均分,最高分、最低分。

select sno from s where '数据库'<> all(
select cn from C,SC where C.CNO=SC.CNO and SNO=s.sno)
或
select sno from s where not exists(
select * from C,SC where C.CNO=SC.CNO and CN='数据库' and SNO=s.sno)

   
Selectcno,sum(grade),avg(grade),max(grade),min(grade)

 

    from sc

⑤ 、查询被t1和t3老师教了的教程的学科名

    group by cno

思路一:先去找到被t1和t3老师所教课程的教程号,再根据课程号找对应的学科名

 六 、查询平均分胜出捌拾柒分的男学生学号及平均分。

select cn from C where CNO in (
select CNO from TC where TNO='t1' and CNO  in (select CNO from TC where TNO='t3'))

    连接:

 

    selectsc.sno,avg(grade) from
student,sc

思路二:先找ti老师所助教程名,再找t3教职工所教学程名,然后求其交集

    wherestudent.sno=sc.sno and
ssex=’男’

select cn from  C where CNO in ( select CNO from TC where TNO='t1')
intersect
select cn from  C where CNO in ( select CNO from TC where TNO='t3')

    group by sc.sno

 

    havingavg(grade)>90

思路三:依次到c表中判断每门学科是或不是被ti和t3教

    嵌套:

select cn from C where
't1' in (select tno from TC  where  CNO=c.cno)
and
't3' in (select tno from TC  where  CNO=c.cno)

    selectsno,avg(grade) from sc

 

    where sno in (select sno from student
where ssex=’男’)

思路四:不存在t1和t3
老师没有教的教程的教程名

    group by sno

select cn from C where not exists( select *  from  (select * from  t where tno in ('t1','t3')) x
where not exists(select * from  TC where TNO=x.tno and CNO=C.cno ))

    havingavg(grade)>90

 

 柒 、查询选修课程当先2门的学童姓名。

六 、查询没有选修任何学科的学员姓名、所在院系

    select snamefrom student,sc

思路一:选找到选了课的学生学号,然后再找不再那几个集合中的学生学号,最终通过该学号找对应学生的人名

    where student.sno=sc.sno

select sn,dept from s where SNO not in (
select distinct SNO from SC )

    group bysc.sno,sname

 

    havingcount(*)>2

思路二:找选课门数=0的学员

    本题也足以用嵌套做

select sn,dept from S  
where SNO in (select s.SNO from s left join SC on s.SNO=SC.SNO
group by s.SNO
having COUNT(cno)=0)

 捌 、查询 JSJ 系的学员选修的课程号。

 

    Select distinctcno from
student,sc

思路三:以此从s表中去看清该学员是不是选课–相关子查许

    where  student.sno=sc.sno and
sdept=’JSJ’

select sn,dept from s where not exists(
select * from SC where SNO=s.SNO )

    本题也足以用嵌套做

 

 玖 、查询选修1002科目标学童的学习者姓名(用延续和嵌套2种方法)

柒 、查询“数据库”课程的选课人数和总成绩。

    连接:Select sname from student,sc

思路一:普通子查询

          wherestudent.sno=sc.sno and
cno=’1002′

select COUNT(sno),SUM(score) from SC
where CNO =(select CNO from C where CN='数据库')

    嵌套:Select sname from student where
sno in

 

              (select sno from sc where
cno=’1002′ )

⑧ 、查询任何系中比音讯系某一学童年龄小的学生姓名和年龄。

拾、查询学生姓名以及他选修课程的学科号及战表。

select sn,age from s where DEPT<>'信息' and AGE<any(select
AGE from s where DEPT='信息')

    Selectsname,cno,grade from
student,sc

 

    wherestudent.sno=sc.sno

九 、查询选了独具课程的学习者新闻

    思考本题也足以用嵌套做吧?

思路一:先找选课门数=总课程数的学员学号,再根据学号找对应的学童音信

1壹 、查询选修“数据库原理”课且成绩 80
以上的学童姓名(用三番五次和嵌套2种格局)

select * from s where SNO in (select SNO from SC
group by SNO  having COUNT(cno)=(
select COUNT(cno) from C ))

    连接:Select sname from
student,sc,course

 

          wherestudent.sno=sc.sno and
sc.cno=course.cno and

思路二:c表中绝非一门学科是她没选的

               cname=’数据库原理’ and
grade>80

select * from s where not exists(
select * from  C where not exists(select * from SC where s.SNO=SC.SNO and CNO=C.CNO ))

    嵌套:Select sname from student where
sno in 

 

               (select sno from sc where
grade>80 and cno in 

⑩ 、查询电脑系微机原理成绩最好的学生的姓名

                    ( select cno from
course where cname=’数据库原理’ )

思路一:先找符合条件的学童学号,再找姓名,注意此题中有四个规格

               )

select sn from s where DEPT='计算机'
and SNO in (select SNO from SC,C where SC.CNO=C.CNO and CN='微机原理'
and  score=(select MAX(score) from SC,C where SC.CNO=C.CNO and CN='微机原理'))

 

 

1④ 、查询没有选修1002科目标学童的学习者姓名。

思路二:依次到s表中判断各个学生是不是符合上述口径–相关子查询

    Select snamefrom student

select sn from s where  dept='计算机' and exists(select * from SC,C where SC.CNO=C.CNO and
CN='微机原理' and SCORE=(select MAX(score)

from SC,C where SC.CNO=C.CNO and CN='微机原理') and SNO=s.sno )

    where sno notin ( select sno from sc
where cno=’1002′)

 

    或: select sname from student

 

         where notexists

⑥ 、更新操作:

              (select * from sc where
cno=’1002′ and sno=student.sno)

2)在s表中插入一条完整的纪要(记录自定义

   
思考本题也足以用一般的三番五次做吗?

insert into S
(SNO,SN,SEX,AGE,dept)
values ('s7','李斯','男',20,'信息')
select * from s

1五 、查询平均分最高的学习者学号及平均分。

 

    Selectsno,avg(grade)

3)如若要在表SC中插入有个别学生的选课音讯(如:学号为“s3”,课程号为“c2”,战绩待定),应怎么样进展?

    from sc

insert into SC
(SNO,CNO,score)
values ('s3','c2',null)

    group by sno

 

    havingavg(grade) >=ALL ( Select
avg(grade)

4)求各系学生的平均成绩,并把结果存入数据库;

                              from
sc

select dept,AVG(score) 平均成绩 into X
from s left join SC on s.SNO=SC.SNO  
group by DEPT
select * from x

                              group by
sno

 

                            )

5)s3同学的c5,c6,c7
三门学科的实绩分别是75,80,67 ,如何五次性将这么些新闻添加到sc表中

1⑥ 、查询每门课程成绩都超过该门课程平均分的学员学号。

insert into SC (SNO,CNO,score)
select 's3','c5','75'
union
select 's3','c6','80'
union
select 's3','c7','67'
select * from sc

    可以先统计每门课程平均分

 

    create
viewc_avg(cno,avg_grade)

6)将“总结机”系全部学生的成绩置零;

         as selectcno,avg(grade) from sc
group by cno

update SC
set SCORE=0
where SNO in(select SNO from s where dept='计算机')
select * from sc

    再查询

 

    Select distinctsno from sc

7)删除“计算机系”系全部学生的选课记录;

    where sno notin ( Select sno from
sc,c_avg

delete from SC where SNO in (select SNO from s where DEPT='计算机')
8)删除学号为“S1”的相关信息;并注意跟这个学生相关信息的变化
delete from s where SNO='s1'
select * from SC
delete from sc where SNO='s1'
select * from s  

                      where
sc.cno=c_avg.cno and grade<avg_grade

 

                    )

9)将学号为“S2”的学生的学号修改为“S002”;并留意跟那一个学生相关音信的转变

   ===========================================

update s
set SNO='s002'
where SNO='s2'
select * from sc 

    SELECT DISTINCT Sno

 

    FROM SC SC1

10)把平均战表超乎77分的男同学的入另三个表S_GRADE(SNO,AVG_GRADE);

    WHERE SC1.SnoNOT IN

create table S_GRADE
(SNO  varchar(20),AVG_GRADE float)
insert into  S_GRADE
select s.sno,AVG(score) from SC,s where SC.SNO=S.SNO and SEX='男'
group by s.SNO
having AVG(score)>80

          ( SELECT SC2.Sno

 

            FROM SC SC2

11)把选修了课程名为“数据结构”的学员的战绩进步十分之一;

            WHERE SC2.Grade <=

update SC
set SCORE=1.1*score
where cno in (select cno from c where CN='数据结构' )
select * from sc

                 ( SELECT
AVG(SC3.Grade)

 

                   FROM SC SC3

12)把选修了“C2”号课程,且战表低于该门课程的平分战表的学习者的实绩升高5%;

                  
WHERE SC3.Cno=SC2.Cno

update SC
set SCORE=SCORE*1.05
where CNO='c2' and SCORE<(select AVG(SCORE) from SC where CNO='c2')
select * from sc

                 )

 

          )

13)把选修了“C2”号课程,且成绩低于该门课程的平分战表的学生战绩删除掉;

    或:

delete from sc
where CNO='c2' and SCORE<(select AVG(SCORE) from SC where CNO='c2')
select * from sc

    SELECT DISTINCTSno

 

    FROM SC SC1

7、权限决定:

    WHERE NOTEXISTS

sp_addlogin 'uu','123'
sp_addlogin 'nn','123'
sp_adduser 'uu','uu1'
sp_adduser'uu','uu2'

          (SELECT *

 

            FROM SC SC2

一 、写出怎么样让普通用户user1查询和使用t(tno,tn)举办查询和换代的权位–对象权限

            WHERE SC2.Sno=SC1.Sno AND
SC2.Grade <=

sp_addlogin 'mm','123'
sp_adduser 'mm','user1'
grant select,update on t(tno,tn) to user1  
grant select(tno,tn),update(tno,tn) on t to user1

revoke select,update on t(tno,tn) from user1

                       (SELECT
AVG(SC3.Grade)

 

                         FROM SC
SC3

二 、将对计算机系学生举行查询和创新的权力给user2用户

                        
WHERE SC3.Cno=SC2.Cno

sp_addlogin 'xx','123'
sp_adduser 'xx','user2'
create view zz
as
select * from S where DEPT='计算机'
with check option
grant select,update on zz to  user2

                       )

 

          )

叁 、将查询dept权限给拥有用户

   

grant select on s to public
4、将创建表的权限给普通用户user3,并使得user3获得传递权权限的能力--系统权限
sp_addlogin 'yy','123'
sp_adduser 'yy','user3'
grant create table to user3 with grant option 

 

 

(3)检索至少选修LIU老师所授课程中一门科目标女学童姓名。
    SELECT SNAME
    FROM S
    WHERE SEX=‘F’ AND S# IN
     (SELECT S#
     FROM SC
     WHERE C# IN
      (SELECT C#
      FROM C
      WHERE TEACHER=‘LIU’)

伍 、创设角色role1,将查询和更新s,c,sc表的权杖给角色role1

NOTICE:有种种写法,比如联接查询写法:
    SELECT SNAME
    FROM S,SC,C
    WHERE SEX=‘F’ AND SC.S#=S.S#
    AND SC.C#=C.C#
    AND TEACHER=’LIU’
但上一种写法更好一些。

sp_addrole 'role1'
grant select,UPDATE on s to role1
grant select,UPDATE on c to role1
grant select,UPDATE on sc to role1

(4)检索WANG同学不学的科目标课程号。
    SELECT C#
    FROM C
    WHERE C# NOT IN
     (SELECT C#
     FROM SC
     WHERE S# IN
      (SELECT S#
      FROM S
      WHERE SNAME=’WANG’))

 

(5)检索至少选修两门科目标学生学号。
    SELECT DISTINCT X.SNO
    FROM SC X,SC Y
    WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
Notice:对表SC进行自连接,X,Y是SC的五个别名。

六 、将用户user1,user2添加到角色role1中,但不期待user1具备更新s,c,sc的权能,写出富有相关的过程

(6)招来全体学童都选修的课程的课程号与学科名。
    SELECT C#,CNAME
    FROM C
    WHERE NOT EXISTS
     (SELECT *
     FROM S
     WHERE S# NOT IN
      (SELECT *
      FROM SC
      WHERE  SC.C#=C.C#))

sp_addrolemember 'role1','user1'
sp_addrolemember 'role1','user2'
deny update on s to user1--取消
deny update on sc to user1
deny update on c to user1

要从语义上分解:(1)选拔课程的教程号与课程名,不设有不选那门课的同校。
   其中,“不选那门课的同窗”能够表示为:

 

SELECT *

 FROM  S

 WHERE  S# NOT IN

  (SELECT  *

      FROM SC  

      WHERE  SC.C#=C.C#)

 

或者

SELECT *

 FROM  S

 WHERE   NOT EXISTS

  (SELECT  *

      FROM SC  

      WHERE S.S#=C.S# AND 

SC.C#=C.C# )

 

⑦ 、如何让用户拥有开创数据库的权力–添加用户到服务器角色中dbcreator

      

sp_addsrvrolemember 'yy','dbcreator'--yy登录名添加到dbcreator服务器角色中

(7)搜寻选修课程包含LIU先生所教学的学习者学号。    
     SELECT DISTINCT S#
     FROM SC
     WHERE C# IN
      (SELECT C#
      FROM C
      WHERE TEACHER=’LIU’))   

 

3.3 设有多少个大旨表凯雷德(A,B,C)和S(D,E,F),试用SQL查询语句表述下列关系代数表达式:
  (1)πA(R)(2)σB=’17’(R)(3)R×S(4))πA,FC=D(R×S))
(1)SELECT A FROM R
(2)SELECT * FROM R WHERE B=’17’
(3)SELECT A,B,C,D,E,F FROM R,S
(4)SELECT A,F FROM R,S WHERE R.C=S.D

八 、怎样让用户拥有数据中享有目的的全体权限–添加用户到内定的数据库剧中人物中db_owner

3.43.4 设有五个大旨表奥迪Q5(A,B,C)和S(A,B,C)试用SQL查询语句表述下列关系代数表明式:
  (1)R∪S  (2)R∩S  (3)R-S  (4)πA,B(R)πB,C(S)

sp_addrolemember 'db_owner','user1'

    (1)SELECT A,B,C
      FROM R
      UNION
      SELECT A,B,C
      FROM S

 

    (2)SELECT A,B,C
      FROM R
      INTERSECT
      SELECT A,B,C
      FROM S

玖 、收回user3创设表的权杖

    (3)SELECT A,B,C
      FROM R
      WHERE NOT EXISTS
       (SELECT A,B,C
       FROM S
       WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)

revoke create  table from user3  cascade --收回级联权限

    (4)SELECT R.A,R.B,S.C
      FROM R,S
      WHERE R.B=S.B

 

3.5 试叙述SQL语言的涉嫌代数特点和元组演算特点。
(P61-62)

⑩ 、收回用户创制数据库的权杖–删除服务器角色中的成员

3.6 试用SQL查询语句表述下列对教学数据库中七个基本表S、SC、C的查询:

sp_dropsrvrolemember 'yy','dbcreator'--删除服务器角色成员

(1)计算有学员选修的教程门数。
    SELECT COUNT(DISTINCT C#) FROM SC

 

(2)求选修C4科目标学童的平均年龄。
    SELECT AVG(AGE)
    FROM S
    WHERE S# IN
     (SELECT S#
     FROM SC
     WHERE C#=’C4′)
或者,
    SELECT AVG(AGE)
    FROM S,SC
    WHERE S.S#=SC.S# AND C#=’004′

11.怎么着收回用户全数多少中负有目标的全数权限–删除数据库剧中人物中的成员

(3)求LIU老师所授课程的每门课程的学童平均战表。
   SELECT CNAME,AVG(GRADE)
   FROM SC ,C
   WHERE SC.C#=C.C# ANDTEACHER=’LIU’
   GROUP BY C#   

sp_droprolemember 'db_owner','user1'

(4)总计每门课程的学童选修人数(当先十一位的教程才计算)。要求输出课程号和选修人数,查询结果按人头降序排列,若人数相同,按学科号升序排列。
    SELECT DISTINCT C#,COUNT(S#)
    FROM SC
    GROUP BY C#
    HAVING COUNT(S#)>10
    ORDER BY 2 DESC, C# ASC

 

(5)检索学号比WANG同学大,而年纪比她小的学童姓名。
    SELECT X.SNAME
    FROM S AS X, S AS Y
    WHERE Y.SNAME=’WANG’ AND X.S#>Y.S# AND X.AGE<Y.AGE

1② 、删除登陆用户

(6)检索姓名以WANG打头的兼具学员的姓名和年龄。
    SELECT SNAME,AGE
    FROM S
    WHERE SNAME LIKE ‘WANG%’

sp_droplogin 'mm'

(7)在SC中找找战表为空值的学习者学号和课程号。
    SELECT S#,C#
    FROM SC
    WHERE GRADE IS NULL

 

(8)求年龄大于女校友平均年龄的男学生姓名和年龄。
    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX=’男’ AND X.AGE>(SELECT AVG(AGE)FROM S AS Y WHERE
Y.SEX=’女’)

1三 、删除数据库用户

(9)求年龄超越全部女校友年龄的男学生姓名和年龄。
    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX=’男’ AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE
Y.SEX=’女’)
除法运算

sp_dropuser 'user1'

3.7 试用SQL更新语句表明对教学数据库中多个着力表S、SC、C的依次更新操作:
(1)往基本表S中插入三个学生元组(‘S9’,‘WU’,18)。
    INSERT INTO S(S#,SNAME,AGE) VALUES(’59’,’WU’,18)
(2)在大旨表S中寻觅每一门学科成绩都高于等于76分的学生学号、姓名和性别,并把检索到的值送往另3个已存在的基本表STUDENT(S#,SANME,SEX)。
    INSERT INTO STUDENT(S#,SNAME,SEX)
     SELECT S#,SNAME,SEX
     FROM S WHERE  NOT EXISTS
      (SELECT * FROM SC WHERE
       GRADE<80 AND S.S#=SC.S#)

 

(3)在主导表SC中剔除尚无成绩的选课元组。
    DELETE FROM SC
     WHERE GRADE IS NULL

八 、视图操作:

(4)把WANG同学的读书选课和大成全体去除。
    DELETE FROM SC
     WHERE S# IN
      (SELECT S#
      FROM S
      WHERE SNAME=’WANG’)

以S , C ,
SC表为根基落成以下视图定义及应用。

1)  
 定义“计算机”系学生为主意况视图V_IS 并询问结果;

(5)把选修MATHS课不及格的成就全改为空值。
    UPDATE SC
    SET GRADE=NULL
    WHERE GRADE<60 AND C# IN
      (SELECT C#
      FROM C
      WHERE CNAME=’MATHS’)

create view V_IS
as
select sno,sn,sex,age,dept from s where DEPT='计算机'
with check option

select * from  V_IS
select * from s

(6)把低于总平均战绩的女校友战绩提升5%。
    UPDATE SC
    SET GRADE=GRADE*1.05
    WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S#
FROM SWHERE SEX=’F’)

 

(7)在中央表SC中修改C4学科的成就,若成绩小于等于柒拾肆分时升高5%,若成绩超乎66分时进步4%(用八个UPDATE语句已毕)。
    UPDATE SC
     SET GRADE=GRADE*1.05
     WHERE C#=’C4′ AND GRADE<=75
    UPDATE SC
     SET GRADE=GRADE*1.04
     WHERE C#=’C4′ AND GRADE>75

2)  
 将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G
并询问结果;

3.8 在第一章例1.4中关系“仓库管理”关系模型有多个事关情势:
  零件 PART(P#,PNAME,COLOR,WEIGHT)
  项目 PROJECT(J#,JNAME,DATE)
  供应商 SUPPLIER(S#,SNAME,SADDR)
  供应 P_P(J#,P#,TOTOAL)
  采购 P_S(P#,S#,QUANTITY)

create view V_S_C_G
as
select s.sno,sn,c.cno,cn,score from  s left join SC on s.SNO=SC.SNO left join C on C.CNO=SC.CNO
select * from V_S_C_G

(1)试用SQLDDL语句定义上述七个基本表,并证实主键和外键。
    CREATE TABLE PART
    (P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL,
    COLOR CHAR(10),WEIGHT REAL,
    PRIMARY KEY(P#))
    
    CREATE TABLE PROJECT
    (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL,
    DATE DATE,
    PRIMARY KEY(J#))
    
    CREATE TABLE SUPLIER
    (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20),
    PRIMARY KEY(S#))
    
    CREATE TABLE P_P
    (J# CHAR(4),P# CHAR(4),TOTAL INTEGER,
    PRIMARY KEY(J#,P#),
    FOREIGN KEY(J#) REFERENCE PROJECT(J#),
    FOREIGN KEY(P#) REFERENCE PART(P#))
    
    CREATE TABLE P_S
    (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,
    PRIMARY KEY(P#,S#),
    FOREIGN KEY(P#) REFERENCE PART(P#),
    FOREIGN KEY(S#) REFERENCE SUPLIER(S#))
    

 

(2)试将PROGECT、P_P、PAOdysseyT多个基本表的自然联接定义为二个视图VIEW1,PA景逸SUVT、P_S、SUPPLIE锐界多个基本表的当然联接定义为3个视图VIEW2。
    CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)
          AS SELECT
PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL
          FROM PROJECT,PART,P_P
          WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# 
     
    CREATE VIEW
VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)
          AS SELECT
PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY
          FROM PART,P_S,SUPPLIER
          WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#

3)  
 将各系学生人数,平均成绩定义为视图V_NUM_AVG并询问结果;

(3)试在上述五个视图的根底上拓展数量查询:

create view V_NUM_AVG
as
select dept,COUNT(sno) 人数,AVG(age)平均成绩  
from s  left sc on s.sno=sc.sno
group by dept

    1)检索香港的供应商所供应的零件的号子和名字。
    SELECT P#,PNAME FROM VIEW2 WHERE SADDR=’SHANGHAI’

 

    2)检索项目J4所用零件的供应商编号和名字。
    SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1
WHERE J#=’J4′)

4)  
 定义3个彰显学生出生年份的视图V_YEAEscort并询问结果;

3.9 对于教学数据库中挑建邺表SC,已制造下列视图:
CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)
FROMSC
GROUPBYS#
试判断下列查询和翻新是或不是同意实施。若允许,写出转换来骨干表SC上的相应操作。
  (1)
SELECT*
FROMS_GRADE
      允许
   SELECT S#,COUNT(C#),AVG(GRADE)FROM SC GROUP BY S#

create view V_YEAR
as
select *,year(GETDATE())-age 出生年份 from s

  (2)
SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80
    允许
   SELECT S#,COUNT(C#) FROM SC WHEREAVG(GRADE)>80

 

  (3)
SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM
FROMS_GRADE
WHERES#=‘S4’)
    允许
   SELECT S#,AVG(GRADE)
   FROM SC AS X
   WHERE COUNT(X.C#)>(SELECTCOUNT(Y.C#) FROM SC AS Y WHERE
Y.S#=’S4′)
   GROUP BY S#

5)  
 将各位学员选修课程的门数及平均战表定义为视图V_AVG_S_G并询问结果;

  (4)
UPDATES_GRADE
SETC_NUM=C_NUM+1
WHERES#=‘S4’
    不允许

create view V_AVG_S_G
as
select s.sno,COUNT(cno) 选修课程的门数,AVG(score) 平均成绩 from
SC right join  s on s.SNO=SC.SNO
group by s.SNO 

  (5)
DELETEFROMS_GRADE
WHEREC_NUM>4
    不允许

 

3.10 预处理方式对于嵌入式SQL的已毕有怎么样首要意义?
   
预处理方式是先用预处理程序对源程序开展扫描,识别出SQL语句,并拍卖成宿主语言的函数调用形式;
然后再用宿主语言的编译程序把源程序编译成目的程序。那样,不用扩大宿主语言的编译程序,
就能处理SQL语句。

6)  
 将各门课程的选修人数及平均战表定义为视图V_AVG_C_G并询问结果;

3.11 在宿主语言的先后中接纳SQL语句有啥样规定?
在宿主语言的次第中利用SLQ语句有以下规定:
(1)在先后中要分裂SQL语句与宿主语言说话
(2)允许嵌入的SQL语句引用宿主语言的顺序变量(称为共享变量),但有两条规定:
   1)引用时,这么些变量前务必加“:”作为前缀标识,以示与数据库中变量有分别。
   2)那几个变量由宿主语言的程序定义,并用SQL的DECLARE语句表达。
(3)SQL的聚集处理格局与宿主语言单记录处理格局之间要和谐。
须要拔取游标机制,把集合操作转换来单记录处理方式。

create view V_AVG_C_G
as
select c.cno,COUNT(sno) 选修人数,AVG(score) 平均成绩 from
C left join sc  on SC.CNO=C.CNO
group by c.CNO 

3.12SQL的集合处理格局与宿主语言单记录处理格局之间什么协调?
    由于SQL语句处理的是记录集合,而宿主语言语句五遍只能够处理三个记录,
由此要求用游标(cousor)机制,把集合操作转换来单记录处理情势。

 

2.13 嵌入式SQL语句几时不必涉及到游标?什么时候必须涉及到游标?
    (1)INSE福特ExplorerT、DELETE、UPDATE语句,查询结果肯定是单元组时的SELECT语句,
都可一直嵌入在主程序中使用,不必涉及到游标。
    (2)当SELECT语句询问结果是多个元组时,此时宿主语言程序不能接纳,
一定要用游标机制把五个元组五回2个地传递给宿主语言处理。

7)  
 查询平均战绩为八十九分以上的学员学号、姓名和造就;  s sc
V_AVG_S_G

 

select * from V_AVG_S_G
select s.sno,sn,score from s,SC, V_AVG_S_G where s.SNO=SC.SNO and s.SNO=V_AVG_S_G.sno
and 平均成绩>90

 

 

 

8)  
 查询各课成绩均超越平均战绩的学员学号、姓名、课程名 和作育;  s c,sc
V_AVG_C_G

(电商)数据库原理及运用_依傍考核试题及参考答案

select * from  V_AVG_C_G
select s.sno,sn,cn,score, 平均成绩 from V_S_C_G, V_AVG_C_G where  V_S_C_G.CNO=V_AVG_C_G.CNO  
and SCORE>平均成绩

 

 

    一、单选 (每空1分,共10分)

9)  
 按系总计各系平均战表在76分以上的总人口,结果按降序排列; sc,s

    1.在Access数据库中,数据保存在(   
)对象中。

select  dept, COUNT(s.sno) from s,SC where s.SNO=SC.SNO
group by  dept
having AVG(score)>80
order by  COUNT(s.sno) desc 

       A.窗体        B.查询         
C.报表          D.表

 

   
2.假诺某一字段数据型为文本型,字段大小为8,该字段中最多可输入(   
)个汉字。

10)  
 通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名变更为“S1_MMM”,”S4_MMM”
并询问结果;

       A.8          B.4              C.16           D.32

update v_is
set sn='S1_MMM'
where sno='S1'


update v_is
set sn='S4_MMM'
where sno='S4'


select * from s

    3.文本型字段最多可以存放(   
)个字符。

 

       A.250        B.252        
C.254           D.255

11)  
 通过视图V_IS,新增添3个学童记录 (‘S12′,’YAN XI’,19,’总计机’)

    4.Access用户操作界面由(   
)部分构成。

insert into V_IS
values  ('S12','YAN XI',19,'计算机')

       A.4           B.5          C.3           D.6

 

    5.下列(   
)图标是Access中表对象的阐明。

12)  
 通过视图V_IS,新扩展一个学员记录 (‘S13′,’YAN XI’,19,’消息’)

       A.         B.         C.        D.

insert into V_IS
values  ('S12','YAN XI',19,'信息')
--看不到该信息

   
6.在设计Access数据表时,“索引”属性有(    )取值。

 

       A.1              B.2            
 C.3
               D.4

13)  
 通过视图V_IS,删除学号为“S12”和“S3”的学童新闻

    7.Access中包罗有(   
)种数据类型。

delete from v_is
where sno='s12' or sno='s3'

       A.9              B.10             C.7                D.8

 

   
8.在贰个宏中要开拓一个表格,应该使用的操作是(    )。

14)  
 要因此视图V_S_C_G,将学号为“S12”的真名改为“S12_MMM”,是还是不是可以落成?

       A.OpenForm       B.OpenReport      C.OpenTable      
D.OpenQuery

select * from V_S_C_G
update  V_S_C_G
set sn='S13_MMM'
where sno='ss'
--可更新

   
9.足以透过Internet举办数量揭橥的对象是(    )。

 

       A.窗体         B.报表          
C.查询          D.数据访问页

15)  
 要经过视图V_AVG_S_G,将学号为“S1”的平分成绩改为八十七分,是还是不是足以兑现?

   10.模块窗口由(   
)个部分构成。

select * from V_AVG_S_G
update V_AVG_S_G
set 平均成绩=90
where sno='s1'
--不可更新

       A.2            B.3             C.4              D.5

 

 

 

    二、填空 (每空1分,共20分)

                                                                                                2017-12-20、01:40:45

   
1.在人工管理和文书管理阶段,程序设计__依赖于 ___数据表示。

   
2.在文件系统中,存取数据的为主单位为___记录____,在数据库系统中,存取数据的主干单位为___数据项_____。

   
3.若实体A和B是多对多的维系,实体B和C是1对1的沟通,则实体A和C是___多_____对___多_____的联系。

   
4.在三个关联中不容许出现重复的____元组____,也不允许出现具有同样名字的___属性_____。

   
5.数据库系统中的四类用户分别为____数据库管理员、数据库设计员、应用程序员、终端用户_____。

   
6.在存取数据库的多寡的经过中,使用了多个数据缓冲区,分别为___系统_____缓冲区和____用户
____缓冲区。

   
7.学生关系中的班级号属性与班级关系中的班级号主码属性相呼应,则____班级号____为学员关系中的___外码___。

   
8.设三个关系A具有a1性子格和a一个元组,关系B具有b1个属性和b1个元组,则涉嫌A´B具有___a1+b1____性格情和____
a2´b2 ____个元组。

   
9.设一个学员关系为S(学生号,姓名),课程关系为C(课程号,课程名),选课关系为X(学生号,课程号,成绩),求出全数选课的学童消息的演算表达式为_____Õ学生号(X)______与____S
____的本来连接。

   10.在1个关系Sportage中,若存在X→Y和X→Z,则设有_____
X→(Y,Z)_______,称此为函数看重的合并性规则。

 

    三、填空 (每空1分,共20分)

   
1.若3个关联的别的非主属性都不有的凭借正视于任何候选码,则称该关系达到____第二____范式。

   
2.在SQL中,列级完整性约束分为__6__种情状,表级完整性约束分为__4__种情况。

   3.
在SQL中,每种视图中的列可以来自差其他___表___,它是在原有表的底蕴上____建立____的逻辑意义上的新涉及。

   4. 在SQL的查询语句中,group
by选项完成____分组计算______职能,order
by选项已毕对结果表的____排序_____功能。

   
5.对此较复杂的种类,概念设计阶段的重大任务是:首先依据系统的逐条部分应用画出各自对应的____局部ER图______,然后再展开汇总和完好设计,画出_____整体ER图_____。

   
6.机器完结阶段的靶子是在电脑种类中收获贰个满意______安插须要、功用完善、操作方便___的数据库应用系统。

    7.Access的用户操作界面由    标题栏、菜单栏、工作区  、工具栏、状态栏等八个部分构成。

   
8.Access“表”结构设计窗口中上半局部的“表设计器”是由      字段名称、数据类型、表明        等三列组成。

    9.Access中的窗体由      页眉、主体      和页脚等多个部分组成。

 

    四、填空 (每空1分,共20分)

   1.
设2个事关为Rubicon(A,B,C,D,E),它的很小函数看重集为FD={A→B,A→C,(C,D)→E},则该关系的候选码为_____(A,D)___,候选码函数决定E是___伪传递___性。

   
2.设壹个涉及为福特Explorer(A,B,C,D,E),它的微乎其微函数倚重集为FD={A→B,A→C,(A,D)→E},该关系只满意___第一_____范式,若要规范化为高拔尖的范式,则将取得____2____个关系。

   
3.在实际上的数据库管理种类中,对数据库的操作方法有_____一声令下交互、程序执行、窗口界面______等三种。

    4.在SQL中,主码约束的重点字为____
primary key________,外码约束的关键字为______foreignkey
______。

   
5.基本表属于全局方式中的表,它是____实表____,而视图则属于有个别方式中的表,它是____虚表
____。

   6.
在SQL新版的查询语句中,select选项完毕投影运算,from选项落成____连接____运算,where选项完结____选择___运算。

   
7.数据字典是对系统工作流程中____数据____和____处理____的描述。

   
8.关周密据库系统中的全局方式由若干个基本表所结合,表与表之间的交流是经过定义的____主码____和____外码____实现的。

   
9.在酒店管理中,涉及到的基本表有五个,它们各自为客房表、住宿表、_____行人登记表、消费卡表____。

   10.在安装或吊销数据库密码的长河中,密码对于字母     大小写     是灵动的。

 

    五、填空 (每空1分,共10分)

    1.Access的用户操作界面由   标题栏、菜单栏、工作区   、工具栏、状态栏等多个部分组成。

   
2.Access“表”结构设计窗口中上半局地的“表设计器”是由     字段名称、数据类型   和表明等三列组成。

    3.Access中的窗体由     页眉、主体、页脚      等五个部分构成。

    4.在Access中模块分为   类模块      
和       标准模块     两体系型。

 

   
陆 、依照主教材第⑤章所给的商品库和教学库,大概根据下列所给的每条SQL查询语句写出相应的出力,大概根据下列所给的各种效应写出相应的SQL查询语句。(每小题伍分,共拾7分)

   
在名称为货品库的数据库中包涵有商品表1和货物表2,它们的定义分别为:

       商品表1(商品代号 char(8),分类名 char(8),单价 float,数量
int)

       商品表2(商品代号 char(8),产地 char(6),品牌
char(6),)

   
在名称为教学库的数据库中包涵有学童、课程和选课八个表,它们的定义分别为:

       学生(学生号 char(7),姓名 char(6),性别
char(2),出生日期 datetime,

            专业 char(10),年级 int)

       课程(课程号 char(4),课程名 char(10),课程学分
int

       选课(学生号 char(7),课程号 char(4),成绩 int)

    1.select distinct 产地

        from 商品表2

       功效:从商品库中询问出具有商品的不比产地。

 

    2.select *

        from 学生

        where 学生号 in (select
学生号

          from 选课

          group by 学生号 having
count(*)=1

        )

   
功效:从教学库中查询出只选修了一门学科的全部学生。

 

    3.select *

         from 学生

         where 学生号 in (select
学生号

           from 选课

           group by 学生号 having
count(*)<=2   

         ) or not exists (select *

              from 选课

              where
学生.学生号=选课.学生号

         )

    功用:
从教学库中询问出最多选修了2门科目(含未选任何学科)的成套学童。

 

   
4.从商品库中询问出每类(即分类名相同)商品的万丈单价。

 select 分类名,max(单价) as 最高单价

        from 商品表1

        group by 分类名

 

   
5.从教学库中询问出至少选修了人名为@m1学员所选课程中一门课的全方位学员。

select distinct 学生.*

        from 学生,选课

        where 学生.学生号=选课.学生号 and
课程号=any(select 课程号

          from 学生,选课

          where 学生.学生号=选课.学生号
and 姓名=@m1

        )

 

 

 

 

 

1.  
Student(S#,Sname,Sage,Ssex) 学生表 

2.  
Course(C#,Cname,T#) 课程表 

3.  
SC(S#,C#,score) 成绩表 

4.  
Teacher(T#,Tname) 教师表 

5.  
 

6.  
问题: 

7.  
壹 、查询“001”课程比“002”课程战绩高的富有学生的学号; 

8.  
  select a.S# from (select s#,score from SC where C#=’001′) a,(select s#,score 

9.  
  from SC where C#=’002′) b 

10. 
  where a.score>b.score and a.s#=b.s#; 

11. 
二 、查询平均战绩当先57分的校友的学号和平均成绩; 

12. 
    select S#,avg(score) 

13. 
    from sc 

14. 
    group by S# having avg(score) >60; 

15. 
③ 、查询全部同学的学号、姓名、选课数、总成绩; 

16. 
  select Student.S#,Student.Sname,count(SC.C#),sum(score) 

17. 
  from Student left Outer join SC on Student.S#=SC.S# 

18. 
  group by Student.S#,Sname 

19. 
④ 、查询姓“李”的先生的个数; 

20. 
  select count(distinct(Tname)) 

21. 
  from Teacher 

22. 
  where Tname like ‘李%’; 

23. 
五 、查询没学过“叶平”老师课的同室的学号、姓名; 

24. 
    select Student.S#,Student.Sname 

25. 
    from Student  

26. 
    where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’); 

27. 
六 、查询学过“001”并且也学过数码“002”课程的校友的学号、姓名; 

28. 
  select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′); 

29. 
⑦ 、查询学过“叶平”老师所教的全数课的同学的学号、姓名; 

30. 
  select S#,Sname 

31. 
  from Student 

32. 
  where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’ group by S# having count(SC.C#)=(select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname=’叶平’)); 

33. 
捌 、查询课程编号“002”的实绩比课程编号“001”课程低的有所同学的学号、姓名; 

34. 
  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#=’002′) score2 

35. 
  from Student,SC where Student.S#=SC.S# and C#=’001′) S_2 where score2 <score; 

36. 
九 、查询全数课程成绩小于伍拾陆分的同班的学号、姓名; 

37. 
  select S#,Sname 

38. 
  from Student 

39. 
  where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60); 

40. 
十 、查询没有学全全体课的同校的学号、姓名; 

41. 
    select Student.S#,Student.Sname 

42. 
    from Student,SC 

43. 
    where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course); 

44. 
1① 、查询至少有一门课与学号为“1001”的同班所学相同的校友的学号和姓名; 

45. 
    select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#=’1001′; 

46. 
1② 、查询至少学过学号为“001”同学全体一门课的其余同学学号和姓名; 

47. 
    select distinct SC.S#,Sname 

48. 
    from Student,SC 

49. 
    where Student.S#=SC.S# and C# in (select C# from SC where S#=’001′); 

50. 
13、把“SC”表中“叶平”老师教的课的成就都改变为此课程的平均成绩; 

51. 
    update SC set score=(select avg(SC_2.score) 

52. 
    from SC SC_2 

53. 
    where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname=’叶平’); 

54. 
1肆 、查询和“1002”号的同窗学习的科目完全相同的其余同学学号和人名; 

55. 
    select S# from SC where C# in (select C# from SC where S#=’1002′) 

56. 
    group by S# having count(*)=(select count(*) from SC where S#=’1002′); 

57. 
1伍 、删除学习“叶平”老师课的SC表记录; 

58. 
    Delect SC 

59. 
    from course ,Teacher  

60. 
    where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=’叶平’; 

61. 
1⑥ 、向SC表中插入一些笔录,这么些记录必要符合以下规则:没有上过编号“003”课程的同桌学号、二 、 

62. 
    号课的平均成绩; 

63. 
    Insert SC select S#,’002′,(Select avg(score) 

64. 
    from SC where C#=’002′) from Student where S# not in (Select S# from SC where C#=’002′); 

65. 
1七 、按平均成绩从高到低展现全部学生的“数据库”、“公司管理”、“波兰语”三门的教程战绩,按如下方式显得: 学生ID,,数据库,集团管理,立陶宛(Lithuania)语,有效课程数,有效平均分 

66. 
    SELECT S# as 学生ID 

67. 
        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’004′) AS 数据库 

68. 
        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’001′) AS 集团管理 

69. 
        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’006′) AS 英语 

70. 
        ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩 

71. 
    FROM SC AS t 

72. 
    GROUP BY S# 

73. 
    ORDER BY avg(t.score)  

74. 
1捌 、查询各科成绩最高和最低的分:以如下格局显示:课程ID,最高分,最低分 

75. 
    SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分 

76. 
    FROM SC L ,SC AS R 

77. 
    WHERE L.C# = R.C# and 

78. 
        L.score = (SELECT MAX(IL.score) 

79. 
                      FROM SC AS IL,Student AS IM 

80. 
                      WHERE L.C# = IL.C# and IM.S#=IL.S# 

81. 
                      GROUP BY IL.C#) 

82. 
        AND 

83. 
        R.Score = (SELECT MIN(IR.score) 

84. 
                      FROM SC AS IR 

85. 
                      WHERE R.C# = IR.C# 

86. 
                  GROUP BY IR.C# 

87. 
                    ); 

88. 
1玖 、按各科平均战表从低到高和及格率的百分比从高到低顺序 

89. 
    SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均战表 

90. 
        ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数 

91. 
    FROM SC T,Course 

92. 
    where t.C#=course.C# 

93. 
    GROUP BY t.C# 

94. 
    ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC 

95. 
20、查询如下课程平均战表和及格率的比重(用”1行”展现): 集团管理(001),马克思(002),OO&UML (003),数据库(004) 

96. 
    SELECT SUM(CASE WHEN C# =’001′ THEN score ELSE 0 END)/SUM(CASE C# WHEN ‘001’ THEN 1 ELSE 0 END) AS 集团管理平均分 

97. 
        ,100 * SUM(CASE WHEN C# = ‘001’ AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = ‘001’ THEN 1 ELSE 0 END) AS 集团管理及格百分数 

98. 
        ,SUM(CASE WHEN C# = ‘002’ THEN score ELSE 0 END)/SUM(CASE C# WHEN ‘002’ THEN 1 ELSE 0 END) AS 马克思平均分 

99. 
        ,100 * SUM(CASE WHEN C# = ‘002’ AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = ‘002’ THEN 1 ELSE 0 END) AS 马克思及格百分数 

100.                ,SUM(CASE WHEN C# = ‘003’ THEN score ELSE 0 END)/SUM(CASE C# WHEN ‘003’ THEN 1 ELSE 0 END) AS UML平均分 

101.                ,100 * SUM(CASE WHEN C# = ‘003’ AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = ‘003’ THEN 1 ELSE 0 END) AS UML及格百分数 

102.                ,SUM(CASE WHEN C# = ‘004’ THEN score ELSE 0 END)/SUM(CASE C# WHEN ‘004’ THEN 1 ELSE 0 END) AS 数据库平均分 

103.                ,100 * SUM(CASE WHEN C# = ‘004’ AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = ‘004’ THEN 1 ELSE 0 END) AS 数据库及格百分数 

104.          FROM SC 

105.        2① 、查询不一致老师所教不相同学科平均分从高到低突显 

106.          SELECT max(Z.T#) AS 助教ID,MAX(Z.Tname) AS 助教姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩 

107.            FROM SC AS T,Course AS C ,Teacher AS Z 

108.            where T.C#=C.C# and C.T#=Z.T# 

109.          GROUP BY C.C# 

110.          ORDER BY AVG(Score) DESC 

111.        2二 、查询如下课程成绩第 3 名到第 6 名的学童成绩单:公司管理(001),马克思(002),UML (003),数据库(004) 

112.            [学生ID],[学员姓名],集团管理,马克思,UML,数据库,平均战绩 

113.            SELECT  DISTINCT top 3 

114.              SC.S# As 学生学号, 

115.                Student.Sname AS 学生姓名 , 

116.              T1.score AS 企业管理, 

117.              T2.score AS 马克思, 

118.              T3.score AS UML, 

119.              T4.score AS 数据库, 

120.              ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分 

121.              FROM Student,SC  LEFT JOIN SC AS T1 

122.                              ON SC.S# = T1.S# AND T1.C# = ‘001’ 

123.                    LEFT JOIN SC AS T2 

124.                              ON SC.S# = T2.S# AND T2.C# = ‘002’ 

125.                    LEFT JOIN SC AS T3 

126.                              ON SC.S# = T3.S# AND T3.C# = ‘003’ 

127.                    LEFT JOIN SC AS T4 

128.                              ON SC.S# = T4.S# AND T4.C# = ‘004’ 

129.              WHERE student.S#=SC.S# and 

130.              ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) 

131.              NOT IN 

132.              (SELECT 

133.                    DISTINCT 

134.                    TOP 15 WITH TIES 

135.                    ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) 

136.              FROM sc 

137.                    LEFT JOIN sc AS T1 

138.                              ON sc.S# = T1.S# AND T1.C# = ‘k1’ 

139.                    LEFT JOIN sc AS T2 

140.                              ON sc.S# = T2.S# AND T2.C# = ‘k2’ 

141.                    LEFT JOIN sc AS T3 

142.                              ON sc.S# = T3.S# AND T3.C# = ‘k3’ 

143.                    LEFT JOIN sc AS T4 

144.                              ON sc.S# = T4.S# AND T4.C# = ‘k4’ 

145.              ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC); 

146.         

147.        2叁 、计算列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60] 

148.            SELECT SC.C# as 课程ID, Cname as 课程名称 

149.                ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 – 85] 

150.                ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 – 70] 

151.                ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 – 60] 

152.                ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] 

153.            FROM SC,Course 

154.            where SC.C#=Course.C# 

155.            GROUP BY SC.C#,Cname; 

156.         

157.        2④ 、查询学一生均成绩及其排名 

158.              SELECT 1+(SELECT COUNT( distinct 平均战绩) 

159.                      FROM (SELECT S#,AVG(score) AS 平均成绩 

160.                              FROM SC 

161.                          GROUP BY S# 

162.                          ) AS T1 

163.                    WHERE 平均战表 > T2.等分战表) as 名次, 

164.              S# as 学生学号,平均成绩 

165.            FROM (SELECT S#,AVG(score) 平均成绩 

166.                    FROM SC 

167.                GROUP BY S# 

168.                ) AS T2 

169.            OLX570DE翼虎 BY 平均战表 desc; 

170.          

171.        2伍 、查询各科成绩前三名的记录:(不考虑成绩并列景况) 

172.              SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 

173.              FROM SC t1 

174.              WHERE score IN (SELECT TOP 3 score 

175.                      FROM SC 

176.                      WHERE t1.C#= C# 

177.                    ORDER BY score DESC 

178.                      ) 

179.              ORDER BY t1.C#; 

180.        2六 、查询每门科目被选修的学生数 

181.          select c#,count(S#) from sc group by C#; 

182.        2⑦ 、查询出只选修了一门课程的整个学童的学号和姓名 

183.          select SC.S#,Student.Sname,count(C#) AS 选课数 

184.          from SC ,Student 

185.          where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 

186.        2捌 、查询男人、女孩子人数 

187.            Select count(Ssex) as 男子人数 from Student group by Ssex having Ssex=’男’; 

188.            Select count(Ssex) as 女孩子人数 from Student group by Ssex having Ssex=’女’; 

189.        2玖 、查询姓“张”的学生名单 

190.            SELECT Sname FROM Student WHERE Sname like ‘张%’; 

191.        30、查询同名同性学生名单,并计算同有名的人数 

192.          select Sname,count(*) from Student group by Sname having  count(*)>1;; 

193.        3① 、壹玖捌伍年落地的学生名单(注:Student表中Sage列的类型是datetime) 

194.            select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age 

195.            from student 

196.            where  CONVERT(char(11),DATEPART(year,Sage))=’1981′; 

197.        3② 、查询每门学科的平分战绩,结果按平均成绩升序排列,平均成绩一样时,按学科号降序排列 

198.            Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ; 

199.        3叁 、查询平均战绩当先85的装有学生的学号、姓名和平均战表 

200.            select Sname,SC.S# ,avg(score) 

201.            from Student,SC 

202.            where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85; 

203.        3四 、查询课程名称为“数据库”,且分数低于60的学习者姓名和分数 

204.            Select Sname,isnull(score,0) 

205.            from Student,SC,Course 

206.            where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname=’数据库’and score <60; 

207.        3⑤ 、查询全数学生的选课情形; 

208.            SELECT SC.S#,SC.C#,Sname,Cname 

209.            FROM SC,Student,Course 

210.            where SC.S#=Student.S# and SC.C#=Course.C# ; 

211.        3六 、查询其余一门科目战绩在陆拾陆分以上的人名、课程名称和分数; 

212.            SELECT  distinct student.S#,student.Sname,SC.C#,SC.score 

213.            FROM student,Sc 

214.            WHERE SC.score>=70 AND SC.S#=student.S#; 

215.        3柒 、查询不及格的教程,并按学科号从大到小排列 

216.            select c# from sc where scor e <60 order by C# ; 

217.        3八 、查询课程编号为003且课程战绩在78分以上的学生的学号和姓名; 

218.            select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#=’003′; 

219.        3玖 、求选了课程的学习者人数 

220.            select count(*) from sc; 

221.        40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩 

222.            select Student.Sname,score 

223.            from Student,SC,Course C,Teacher 

224.            where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname=’叶平’ and SC.score=(select max(score)from SC where C#=C.C# ); 

225.        4一 、查询各类学科及相应的选修人数 

226.            select count(*) from sc group by C#; 

227.        4② 、查询不一样科目战表同样的学生的学号、课程号、学生战表 

228.          select distinct  A.S#,B.score from SC A  ,SC B where A.Score=B.Score and A.C# <>B.C# ; 

229.     4③ 、查询每门功课成绩最好的前两名 

230.            SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 

231.              FROM SC t1 

232.              WHERE score IN (SELECT TOP 2 score 

233.                      FROM SC 

234.                      WHERE t1.C#= C# 

235.                    ORDER BY score DESC 

236.                      ) 

237.              ORDER BY t1.C#; 

238.        4肆 、计算每门课程的学生选修人数(当先拾几人的科目才计算)。须求输出课程号和选修人数,查询结果按人口降序排列,查询结果按人口降序排列,若人数相同,按学科号升序排列  

239.            select  C# as 课程号,count(*) as 人数 

240.            from  sc  

241.            group  by  C# 

242.            order  by  count(*) desc,c#  

243.        4⑤ 、检索至少选修两门科目的学员学号 

244.            select  S#  

245.            from  sc  

246.            group  by  s# 

247.            having  count(*)  >  =  2 

248.        4陆 、查询任何学童都选修的学科的课程号和学科名 

249.            select  C#,Cname  

250.            from  Course  

251.            where  C#  in  (select  c#  from  sc group  by  c#)  

252.        4柒 、查询没学过“叶平”老师讲课的任一门学科的学员姓名 

253.            select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname=’叶平’); 

254.        4⑧ 、查询两门以上不及格课程的同窗的学号及其平均成绩 

255.            select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#; 

256.        4玖 、检索“004”课程分数小于60,按分数降序排列的同室学号 

257.            select S# from SC where C#=’004’and score <60 order by score desc; 

258.        50、删除“002”同学的“001”课程的成就 

259.        delete from Sc where S#=’001’and C#=’001′; 

260.         

 

 

 

 

 

 

 

 

 

 

仿照考核试题参考答案

 

    一、单选 (每空1分,共10分)

   1. D  2. B  3. D 4. B  5. C  6. C 7. B

  1. B 9. D  10. B

二、填空 (每空1分,共20分)

 

   1. 依赖于                 2.
记录、数据项

   3. 多、多                 4.
元组、属性

   5.
数据库管理员、数据库设计员、应用程序员、终端用户(次序无先后)

   6. 系统、用户             7.
班级号、外码

   8. a1+b1、a2´b2           9.
Õ学生号(X)、S  (次序无先后)

    10. X→(Y,Z)

三、填空 (每空1分,共20分)

 

   1. 第二                           
2.6、4

   3. 表、建立                        4.
分组总括、排序

   5. 局地E奥迪Q3图、全部E途观图            6.
布置须求、作用完善、操作便利

   7.
标题栏、菜单栏、工作区(次序无先后)

   8.
字段名称、数据类型、表明(次序无先后)

   9. 页眉、主体(次序无先后)

四、填空 (每空1分,共20分)

 

   1. (A,D)、伪传递                     

  1. 第一、2

   3.
指令交互、程序执行、窗口界面(次序无先后)

   4. primary key、foreign key

   5. 实表、虚表                        

  1. 连接、选择

   7. 数据、处理(次序无先后)          

  1. 主码、外码(次序无先后)

   9. 游客登记表、消费卡表(次序无先后)

  1. 大小写

五、填空 (每空1分,共10分)

 

   1. 标题栏、菜单栏、工作区  
(次序无先后)

   2. 字段名称、数据类型      
(次序无先后)

   3. 页眉、主体、页脚        
(次序无先后)

  1. 类模块、标准模块        
    (次序无先后)

 

   
⑥ 、依据主教材第陆章所给的商品库和教学库,可能依据下列所给的每条SQL查询语句写出相应的效能,或然依据下列所给的每个功效写出相应的SQL查询语句。(每小题五分,共1捌分)

   1.
从商品库中询问出具有商品的分化产地。

   2.
从教学库中查询出只选修了一门课程的上上下下学童。

   3.
从教学库中查询出最多选修了2门学科(含未选任何学科)的凡事学员。

   4. select 分类名,max(单价) as 最高单价

        from 商品表1

        group by 分类名

   5. select distinct 学生.*

        from 学生,选课

        where 学生.学生号=选课.学生号 and
课程号=any(select 课程号

          from 学生,选课

          where 学生.学生号=选课.学生号
and 姓名=@m1

        )

 

3.1 名词解释

(1)SQL模式:SQL形式是表和授权的静态定义。3个SQL情势定义为基本表的集纳。
贰个由方式名和格局拥有者的用户名或账号来规定,并蕴藏情势中每三个因素(基本表、视图、索引等)的定义。
(2)SQL数据库:SQL(Structured Query
Language),即‘结构式查询语言’,拔取克罗地亚语单词表示和结构式的语法规则。
1个SQL数据库是表的汇总,它用3个或三个SQL方式定义。
(3)基本表:在SQL中,把古板的关系模型中的关系方式称为基本表(Base
Table)。 基本表是事实上存储在数据库中的表,对应3个涉及。
(4)仓储文件:在SQL中,把古板的关联模型中的存储形式称为存储文件(Stored
File)。 逐个存储文件与外表存储器上1个大体文件对应。
(5)视图:在SQL中,把传统的涉嫌模型中的子形式称为视图(View),视图是从若干着力表和(或)其余视图构造出来的表。
(6):在SQL中,把古板的关联模型中的元组称为行(row)。
(7)列:在SQL中,把古板的关联模型中的属性称为列(coloumn)。
(8)实表:基本表被叫做“实表”,它是实在存放在数据库中的表。
(9)虚表:视图被号称“虚表”,创设3个视图时,只把视图的概念存储在数量词典中,而不存储视图所对应的数额。
(10)相关子查询:在嵌套查询中冒出的适合以下特点的子查询:子查询中查询条件依赖于外层查询中的某些值,
所以子查询的拍卖不只两次,要频仍求值,以供外层查询利用。
(11)连片查询:查询时先对表举办笛卡尔积操作,然后再做等值联接、接纳、投影等操作。
联接查询的频率比嵌套查询低。
(12)交互式SQL:在极限交互格局下选择的SQL语言称为交互式SQL。
(13)嵌入式SQL:嵌入在高级语言的次序中利用的SQL语言称为嵌入式SQL。
(14)共享变量:SQL和宿主语言的接口。共享变量有宿主语言程序定义,再用SQL的DECLARE语句表明,
SQL语句就可援引那一个变量传递数据库音信。
(15)游标:游标是与某一询问结果相挂钩的符号名,用于把集合操作转换到单记录处理情势。
(16)卷游标:为了战胜游标在力促时不大概回到的诸多不便,SQL2提供了卷游标技术。
卷游标在推进时不只好沿查询结果中元组顺序从头到尾一行行推进,也能一行行重回。

3.2 对于教学数据库的几个基本表
  学生S(S#,SNAME,AGE,SEX)
  学习 SC(S#,C#,GRADE)
  课程C(C#,CNAME,TEACHER)
 试用SQL的查询语句表述下列查询:

(1)检索LIU先生所授课程的课程号和课程名。
    SELECT C#,CNAME
    FROM C
    WHERE TEACHER=‘LIU’

(2)检索年龄大于2三虚岁的男学生的学号和姓名。
    SELECT S#,SNAME
    FROM S
    WHERE (AGE>23) AND (SEX=‘M’)

(3)检索至少选修LIU老师所授课程中一门课程的女学员姓名。
    SELECT SNAME
    FROM S
    WHERE SEX=‘F’ AND S# IN
     (SELECT S#
     FROM SC
     WHERE C# IN
      (SELECT C#
      FROM C
      WHERE TEACHER=‘LIU’)

NOTICE:有八种写法,比如联接查询写法:
    SELECT SNAME
    FROM S,SC,C
    WHERE SEX=‘F’ AND SC.S#=S.S#
    AND SC.C#=C.C#
    AND TEACHER=’LIU’
但上一种写法更好一些。

(4)检索WANG同学不学的课程的课程号。
    SELECT C#
    FROM C
    WHERE C# NOT IN
     (SELECT C#
     FROM SC
     WHERE S# IN
      (SELECT S#
      FROM S
      WHERE SNAME=’WANG’))

(5)检索至少选修两门科目标学员学号。
    SELECT DISTINCT X.SNO
    FROM SC X,SC Y
    WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
Notice:对表SC举行自连接,X,Y是SC的多少个别名。

(6)检索全体学童都选修的教程的教程号与学科名。
    SELECT C#,CNAME
    FROM C
    WHERE NOT EXISTS
     (SELECT *
     FROM S
     WHERE S# NOT IN
      (SELECT *
      FROM SC
      WHERE  SC.C#=C.C#))

要从语义上分解:(1)接纳课程的教程号与学科名,不存在不选那门课的同窗。
   其中,“不选这门课的校友”可以代表为:

SELECT *

 FROM  S

 WHERE  S# NOT IN

  (SELECT  *

      FROM SC  

      WHERE  SC.C#=C.C#)

 

或者

SELECT *

 FROM  S

 WHERE   NOT EXISTS

  (SELECT  *

      FROM SC  

      WHERE S.S#=C.S# AND 

SC.C#=C.C# )

 

      

(7)检索选修课程包括LIU先生所教学的学习者学号。    
     SELECT DISTINCT S#
     FROM SC
     WHERE C# IN
      (SELECT C#
      FROM C
      WHERE TEACHER=’LIU’))   

3.3 设有三个宗旨表哈弗(A,B,C)和S(D,E,F),试用SQL查询语句表述下列关系代数表明式:
  (1)πA(R)(2)σB=’17’(R)(3)R×S(4))πA,FC=D(R×S))
(1)SELECT A FROM R
(2)SELECT * FROM R WHERE B=’17’
(3)SELECT A,B,C,D,E,F FROM R,S
(4)SELECT A,F FROM R,S WHERE R.C=S.D

3.43.4 设有多少个宗旨表奥迪Q7(A,B,C)和S(A,B,C)试用SQL查询语句表述下列关系代数表达式:
  (1)R∪S  (2)R∩S  (3)R-S  (4)πA,B(R)πB,C(S)

    (1)SELECT A,B,C
      FROM R
      UNION
      SELECT A,B,C
      FROM S

    (2)SELECT A,B,C
      FROM R
      INTERSECT
      SELECT A,B,C
      FROM S

    (3)SELECT A,B,C
      FROM R
      WHERE NOT EXISTS
       (SELECT A,B,C
       FROM S
       WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)

    (4)SELECT R.A,R.B,S.C
      FROM R,S
      WHERE R.B=S.B

3.5 试叙述SQL语言的涉及代数特点和元组演算特点。
(P61-62)

3.6 试用SQL查询语句表述下列对教学数据库中五个为主表S、SC、C的询问:

(1)计算有学童选修的学科门数。
    SELECT COUNT(DISTINCT C#) FROM SC

(2)求选修C4科目的学童的平均年龄。
    SELECT AVG(AGE)
    FROM S
    WHERE S# IN
     (SELECT S#
     FROM SC
     WHERE C#=’C4′)
或者,
    SELECT AVG(AGE)
    FROM S,SC
    WHERE S.S#=SC.S# AND C#=’004′

(3)求LIU老师所授课程的每门科目的学童平均成绩。
   SELECT CNAME,AVG(GRADE)
   FROM SC ,C
   WHERE SC.C#=C.C# ANDTEACHER=’LIU’
   GROUP BY C#   

(4)总括每门课程的学童选修人数(当先十人的教程才总计)。须要输出课程号和选修人数,查询结果按人头降序排列,若人数相同,按学科号升序排列。
    SELECT DISTINCT C#,COUNT(S#)
    FROM SC
    GROUP BY C#
    HAVING COUNT(S#)>10
    ORDER BY 2 DESC, C# ASC

(5)检索学号比WANG同学大,而年纪比他小的学员姓名。
    SELECT X.SNAME
    FROM S AS X, S AS Y
    WHERE Y.SNAME=’WANG’ AND X.S#>Y.S# AND X.AGE<Y.AGE

(6)检索姓名以WANG打头的享有学员的全名和年龄。
    SELECT SNAME,AGE
    FROM S
    WHERE SNAME LIKE ‘WANG%’

(7)在SC中摸索成绩为空值的学生学号和课程号。
    SELECT S#,C#
    FROM SC
    WHERE GRADE IS NULL

(8)求年龄大于女校友平均年龄的男学生姓名和年龄。
    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX=’男’ AND X.AGE>(SELECT AVG(AGE)FROM S AS Y WHERE
Y.SEX=’女’)

(9)求年龄超越全数女校友年龄的男学生姓名和年龄。
    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX=’男’ AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE
Y.SEX=’女’)

3.7 试用SQL更新语句表明对教学数据库中多少个主导表S、SC、C的逐一更新操作:
(1)往基本表S中插入3个学童元组(‘S9’,‘WU’,18)。
    INSERT INTO S(S#,SNAME,AGE) VALUES(’59’,’WU’,18)
(2)在着力表S中搜索每一门课程成绩都超出等于7九分的学童学号、姓名和性别,并把检索到的值送往另多少个已存在的基本表STUDENT(S#,SANME,SEX)。
    INSERT INTO STUDENT(S#,SNAME,SEX)
     SELECT S#,SNAME,SEX
     FROM S WHERE  NOT EXISTS
      (SELECT * FROM SC WHERE
       GRADE<80 AND S.S#=SC.S#)

(3)在主导表SC中去除尚无战表的选课元组。
    DELETE FROM SC
     WHERE GRADE IS NULL

(4)把WANG同学的学习选课和成就全体删减。
    DELETE FROM SC
     WHERE S# IN
      (SELECT S#
      FROM S
      WHERE SNAME=’WANG’)

(5)把选修MATHS课不及格的战表全改为空值。
    UPDATE SC
    SET GRADE=NULL
    WHERE GRADE<60 AND C# IN
      (SELECT C#
      FROM C
      WHERE CNAME=’MATHS’)

(6)把低于总平均战表的女校友成绩进步5%。
    UPDATE SC
    SET GRADE=GRADE*1.05
    WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S#
FROM SWHERE SEX=’F’)

(7)在中央表SC中修改C4课程的战表,若成绩小于等于72分时进步5%,若成绩超越柒十七分时升高4%(用多少个UPDATE语句达成)。
    UPDATE SC
     SET GRADE=GRADE*1.05
     WHERE C#=’C4′ AND GRADE<=75
    UPDATE SC
     SET GRADE=GRADE*1.04
     WHERE C#=’C4′ AND GRADE>75

3.8 在第3章例1.4中涉及“仓库管理”关系模型有多个涉及情势:
  零件 PART(P#,PNAME,COLOR,WEIGHT)
  项目 PROJECT(J#,JNAME,DATE)
  供应商 SUPPLIER(S#,SNAME,SADDR)
  供应 P_P(J#,P#,TOTOAL)
  采购 P_S(P#,S#,QUANTITY)

(1)试用SQLDDL语句定义上述八个基本表,并证实主键和外键。
    CREATE TABLE PART
    (P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL,
    COLOR CHAR(10),WEIGHT REAL,
    PRIMARY KEY(P#))
    
    CREATE TABLE PROJECT
    (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL,
    DATE DATE,
    PRIMARY KEY(J#))
    
    CREATE TABLE SUPLIER
    (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20),
    PRIMARY KEY(S#))
    
    CREATE TABLE P_P
    (J# CHAR(4),P# CHAR(4),TOTAL INTEGER,
    PRIMARY KEY(J#,P#),
    FOREIGN KEY(J#) REFERENCE PROJECT(J#),
    FOREIGN KEY(P#) REFERENCE PART(P#))
    
    CREATE TABLE P_S
    (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,
    PRIMARY KEY(P#,S#),
    FOREIGN KEY(P#) REFERENCE PART(P#),
    FOREIGN KEY(S#) REFERENCE SUPLIER(S#))
    

(2)试将PROGECT、P_P、PASportageT五个基本表的自然联接定义为一个视图VIEW1,PA奥迪Q7T、P_S、SUPPLIE卡宴五个基本表的当然联接定义为1个视图VIEW2。
    CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)
          AS SELECT
PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL
          FROM PROJECT,PART,P_P
          WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# 
     
    CREATE VIEW
VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)
          AS SELECT
PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY
          FROM PART,P_S,SUPPLIER
          WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#

(3)试在上述七个视图的根底上进展多少查询:

    1)检索新加坡的供应商所供应的组件的数码和名字。
    SELECT P#,PNAME FROM VIEW2 WHERE SADDR=’SHANGHAI’

    2)检索项目J4所用零件的供应商编号和名字。
    SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1
WHERE J#=’J4′)

3.9 对于教学数据库中着力表SC,已建立下列视图:
CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)
FROMSC
GROUPBYS#
试判断下列查询和更新是不是允许实施。若允许,写出转换来骨干表SC上的照应操作。
  (1)
SELECT*
FROMS_GRADE
      允许
   SELECT S#,COUNT(C#),AVG(GRADE)FROM SC GROUP BY S#

  (2)
SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80
    允许
   SELECT S#,COUNT(C#) FROM SC WHEREAVG(GRADE)>80

  (3)
SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM
FROMS_GRADE
WHERES#=‘S4’)
    允许
   SELECT S#,AVG(GRADE)
   FROM SC AS X
   WHERE COUNT(X.C#)>(SELECTCOUNT(Y.C#) FROM SC AS Y WHERE
Y.S#=’S4′)
   GROUP BY S#

  (4)
UPDATES_GRADE
SETC_NUM=C_NUM+1
WHERES#=‘S4’
    不允许

  (5)
DELETEFROMS_GRADE
WHEREC_NUM>4
    不允许

3.10 预处理格局对于嵌入式SQL的兑现有怎么着紧要意义?
   
预处理格局是先用预处理程序对源程序举行围观,识别出SQL语句,并处理成宿主语言的函数调用方式;
然后再用宿主语言的编译程序把源程序编译成目标程序。那样,不用伸张宿主语言的编译程序,
就能处理SQL语句。

3.11 在宿主语言的次序中选择SQL语句有何样规定?
在宿主语言的先后中利用SLQ语句有以下规定:
(1)在先后中要分裂SQL语句与宿主语言说话
(2)允许嵌入的SQL语句引用宿主语言的主次变量(称为共享变量),但有两条规定:
   1)引用时,这几个变量前必须加“:”作为前缀标识,以示与数据库中变量有分别。
   2)那么些变量由宿主语言的程序定义,并用SQL的DECLARE语句表达。
(3)SQL的聚合处理格局与宿主语言单记录处理方式之间要和谐。
须求利用游标机制,把集合操作转换到单记录处理格局。

3.12SQL的集结处理方式与宿主语言单记录处理格局之间怎么协调?
    由于SQL语句处理的是记录集合,而宿主语言语句三次只好处理1个记录,
因而需求用游标(cousor)机制,把集合操作转换来单记录处理情势。

2.13 嵌入式SQL语句哪天不必涉及到游标?哪一天必须涉及到游标?
    (1)INSEENVISIONT、DELETE、UPDATE语句,查询结果必然是单元组时的SELECT语句,
都可一向嵌入在主程序中动用,不必涉及到游标。
    (2)当SELECT语句询问结果是多少个元组时,此时宿主语言程序不能使用,
一定要用游标机制把多少个元组五遍三个地传递给宿主语言处理。

 

相关文章