数据库期末复习

发布 2022-01-12 02:08:28 阅读 1187

1、查询全体学生姓名,学号,性别。

select 学号,姓名,性别。

from xsqk

2、查询学生全部信息。

select *

from xsqk

3、查询选修了课程的学生的学号。

select 学号。

from xs_kc

group by 学号。

4、查询全体学生的姓名(将姓名改为name),学号,性别。

select distinct 姓名 name,学号,性别。

from xsqk1

二、条件查询。

1、查询选修课程为101的学生的学号和成绩。

select 学号,成绩。

from xs_ck

where 课程号=101

用课本作业做:

2、查询分数在70分以上的学生选课信息,并按成绩降序排列。

select *

from sc

where gr>70

order by gr desc

3、在sc表中按学号分组汇总学生的平均分,并按平均分的降序排列。

select s#,平均分=**g(gr)

from sc

group by s#

order by 平均分 desc

或。select s#,**g(gr)as 平均分。

from sc

group by s#

order by 平均分 desc

4、在sc表中查询选修了3门以上课程的学生学号。

select s#

from sc

group by s#

h**ing count(*)3

5、按学号对不及格的成绩记录进行明细汇总。

select s#,c#,gr

from sc

where gr<60

order by s#

compute count(gr)

by s#6、分别用子查询和连接查询,求107号课程不及格的学生信息。

子查询:select 学号,姓名,联系**。

from xsqk

where 学号 in(

select 学号。

from xs_kc

where 课程号='107' and 成绩<60)

连接查询:select xsqk.学号,姓名,联系**。

from xsqk

join xs_kc on xsqk.学号=xs_kc.学号。

where 课程号='107'and 成绩<60

7、用连接查询在xsqk表中查询住在同一寝室的学生,即其联系**相同。

select a.学号,a.姓名,a.联系**。

from xsqk a

join xsqk b on a.联系**=b.联系**。

where a.学号<>b.学号。

8、查询xsqk表中所有系名。

select distinct 所在系。

from xsqk

9、查询有多少同学选修了课程。

select count(*)as 选修了课程的人数。

from xsqk

where 学号 in(

select 学号。

from xs_kc)

10、查询有多少同学没有选课。

select count(*)as 没有选修课程的人数。

from xsqk

where 学号 not in(

select 学号。

from xs_kc)

11、查询与杨颖同一个系的同学姓名。

select 姓名。

from xsqk

where 所在系=(

select 所在系。

from xsqk

where 姓名='杨颖')

12、查询选修了课程的学生的姓名、课程名与成绩。

select 姓名,课程名,成绩。

from xs_kc,xsqk,kc

where (xs_kc.学号=xsqk.学号) and (xs_kc.课程号=kc.课程号) and

xsqk.学号=any(

select 学号。

from xs_kc)

13、统计每门课程的选课人数和最高分。

select 课程名,count(*)as 选此课人数,max(成绩)as 最高分。

from xs_kc,kc

where xs_kc.课程号=kc.课程号。

group by 课程名。

14、统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列。

错误程序:select xsqk.学号,姓名,count(*)as 选课门数,sum(成绩)as 总成绩。

from xs_ck,xsqk

where xs_ck.学号=xsqk.学号。

group by 姓名。

order by 选课门数 desc

正确程序:select 学号,姓名,count(*)as 选课门数,sum(成绩)as 总成绩。

from xs_ck,xsqk

where xs_ck.学号=xsqk.学号。

group by 姓名。

order by 选课门数 desc

15、 where子句与h**ing子句有何不同?

答:二者的根本区别在于作用对象不同,where自居作用于基本表或视图,从中选择满足条件的元祖;h**ing子句作用于组,选择面租条件的组,必须用在group by子句之后,但group by子句可没有h**ing子句。

建立和使用视图:

1、 创建一个简单视图,查询“计算机系”学生的信息。

create view 计算机系学生信息。

as select*

from xsqk

where 所在系='计算机'

2、创建一个简单视图,统计每门课程的选课人数和最高分。

create view 每门课人数和最高分。

as select 课程名,count(*)as 选此课人数,max(成绩)as 最高分。

from xs_kc,kc

where xs_kc.课程号=kc.课程号。

group by 课程名。

3、创建一个复杂视图,查询与“俞奇军”住在同一寝室的学生信息,即其联系**相同。

create view 与俞奇军同学住同一寝室的学生信息。

as select*

from xsqk

where 联系**=(

select 联系**。

from xsqk

where 姓名='俞奇军')

4、创建一个复杂视图,查询选修了课程的同学的姓名,课程名及成绩。

create view 选课的同学姓名课程名及成绩。

as select 姓名,课程名,成绩。

from xs_kc,xsqk,kc

where (xs_kc.学号=xsqk.学号) and (xs_kc.课程号=kc.课程号) and

xsqk.学号=any(

select 学号。

from xs_kc)

课本上第135页四、5答案。

1)用sql的ddl语言创建s表,s#为主键,sn不能为空。

create table s

s# char(10) constraint s_prim primary key,sn char(10) null,age int,dept varchar(20))

2)创建计算机系学生的视图,该视图的属性列由学号、姓名、课程号和任课教师号组成。

create view c_student(s#,sn,c#,t#

as select

from s,sc,c,t

where and and

3)检索计算机系年龄在20岁以上的学生学号。

select s#

from s

where(dept='计算机')and(age>=20)

4) 检索姓王的教师所讲课程的课程号及课程名称。

错误程序:select

from t,c

where('王%')

正确程序:select

from t,c

where( like ‘王%’)

错误分析:此处‘王%’为模糊查询,而‘=’为精确查询,故应该用‘like’语句查询。

5)检索张三同学课程的成绩,列出sn,c#,gr。

select sn,c#,gr

from s,sc

where (张三’)

6)检索选修总收入超过1000元的教师所讲课程的学生姓名、课程号和成绩。

select sn,c#,gr

from s,t,sc

where(>=1000)

7)检索没有选修c1课程且选修课程数为两门的学生的姓名和平均成绩,并按平均成绩降序排列。

select sn,**g(gr) as **ggr

from s,sc

where not exists

select*

from sc

where s#= and c#='c1')

group by

h**ing(count(*)2)

order by 2 desc

8)检索选修和张三同学所选课程中任意一门相同的学生姓名,课程名。

select sn,cn

from s,sc,c

where and and c#

from s,sc

where and sn='张三')

9)s1同学选修了c3,将此信息插入sc表中。

insert into sc(s#,c#

values('s1','c3')

10)删除s表中没有选修任何课程的学生记录。

delete

from s

where not in

select

from sc)

1) 建立存书表和销售表;

create table 存书。

书号 varchar(10) primary key,

书名 varchar(20),出版社 char(20),版次 int,出版日期 datetime,作者 char(10),书价 numeric(4,1),进价 numeric(4,1),数量 int )

create table 销售。

日期 datetime,书号 varchar(10) primary key,数量 int,金额 numeric(4,1) )

select 书名,数量,进价*数量 as 余额。

from 存书。

select sum(数量*金额)as 总销售额。

from 销售。

select 日期,书名,存书。数量,销售。数量*金额 as 合计金额。

from 存书,销售。

where 存书。书号=销售。书号。

数据库期末复习

第一章绪论。1 数据 data 数据是数据库中存储的基本对象 数据的定义 描述事物的符号记录 数据的种类 文本 图形 图像 音频 学生的档案记录 货物的运输情况等 数据的含义称为数据的语义,数据与其语义是不可分的。2 数据库 database,简称db 定义 数据库是长期储存在计算机内 有组织的 可...

数据库期末复习

特点 一少三性。一少 指余数据少。三性 指数据的共享性 独立性 安全性。数据库是数据库系统的核心和管理对象 2.数据管理系统 dbms 是位于用户与操作系统之间的一个数据管理软件,在操作系统支持下工作,是负责数据库存取 维护 管理的软件。是数据库系统的核心软件。3.数据库系统 dbs 是指计算机系统...

数据库期末复习

实验四简单查询和连接查询。1.简单查询。在 学生选课 数据库中实现以下操作 1 数学系学生的学号和姓名。2 选修了课程的学生的学号。3 选修课程号为0101的学生学号和成绩,并要求对查询结果按成绩降序排列,若成绩相同,按学号升序排列。4 选修课程号为0101的成绩在80 90分之间的学生学号和成绩,...