当前位置:文档之家› 学生选课数据库SQL语句练习题

学生选课数据库SQL语句练习题

学生选课数据库SQL语句练习题
学生选课数据库SQL语句练习题

一、设有一数据库,包括四个表:学生表(Student)、课程表

(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。

表1-1数据库的表结构

表(一)Student

含义

属性名数据类型可否为

Sno Char(3)否学号(主

键)

Sname Char(8)否学生姓名

Ssex Char(2)否学生性别

Sbirthday datetime可学生出生年

Class Char(5)可学生所在班

表(二)Course

含义

属性名数据类型可否为

Cno Char(5)否课程号(主

键)

Cname Varchar(10)否课程名称

Tno Char(3)否教师编号

(外键)

表(三)Score

含义

属性名数据类型可否为

Sno Char(3)否学号(外

键)

Cno Char(5)否课程号(外

键)

Degree Decimal(4,1)可成绩

主码:Sno+ Cno

表(四)Teacher

含义

属性名数据类型可否为

Tno Char(3)否教师编号

(主键)Tname Char(4)否教师姓名Tsex Char(2)否教师性别Tbirthday datetime可教师出生年

Prof Char(6)可职称Depart Varchar(10)否教师所在部

表1-2数据库中的数据

表(一)Student

Sno Sname Ssex Sbirthday class

95033

108曾华男1977-09-

01

105匡明男1975-10-

95031

02

95033

107王丽女1976-01-

23

95033

101李军男1976-02-

20

109王芳女1975-02-

95031

10

95031

103陆君男1974-06-

03

表(二)Course

Cno Cname Tno

3-105计算机导论825

3-245操作系统804

6-166数字电路856

9-888高等数学831

表(三)Score

Sno Cno Degree

1033-24586

1053-24575

1093-24568

1033-10592

1053-10588

1093-10576

1013-10564

1073-10591

1083-10578

1016-16685

1076-16679

1086-16681

表(四)Teacher

Tno Tname Tsex Tbirthday Prof Depart

804李诚男1958-12-

02副教

计算机系

856张旭男1969-03-

12讲师电子工程

825王萍女1972-05-

05

助教计算机系

831刘冰女1977-08-

14助教电子工程

-- 1、查询Student表中的所有记录的Sname、Ssex和Class列。

select sname,ssex,class from student;

-- 2、查询教师所有的单位即不重复的Depart列。

select distinct depart from Teacher;

-- 3、查询Student表的所有记录。

select * from student;

-- 4、查询Score表中成绩在60到80之间的所有记录。

select * from score where degree between 60 and 80;

-- 5、查询Score表中成绩为85,86或88的记录。

select * from score where degree in(85,86,88);

-- 6、查询Student表中“95031”班或性别为“女”的同学记录。 select * from student where class = '95031' or ssex='女';

-- 7、以Class降序查询Student表的所有记录。

select * from student order by class desc;

-- 8、以Cno升序、Degree降序查询Score表的所有记录。

select * from score order by cno,degree desc;

-- 9、查询“95031”班的学生人数。

select class,count(*) as 学生人数 from student

group by class having class='95031';

-- 10、查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

select sno,cno,degree,

(select max(degree) from score) as maxscore--计算最高分

from score where degree= (select max(degree) from score);

-- 11、查询‘3-105’号课程的平均分。

select avg(degree) as avgdegree

from score group by cno having cno='3-105';

-- 12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

select avg(degree) as avgdegree from score group by cno --按照课程分组取平均值

having cno= (select cno from score group by cno having count(*)>=5)--至少有5名学生选修的课程

and cno like '3%';--以3开头的课程

-- 13、查询最低分大于70,最高分小于90的Sno列。

select sno,max(degree)as maxdegree,min(degree) as mindegree from Score group by sno

having max(degree)<90 and min(degree)>70

-- 14、查询所有学生的Sname、Cno和Degree列。

select sname,cno,degree from student

join score on =;

-- 15、查询所有学生的Sno、Cname和Degree列。

select sno,cname,degree from Score

join course on =;

-- 16、查询所有学生的Sname、Cname和Degree列。

select sname,cname,degree from student

join score on =

join course on =;

-- 17、查询“95033”班所选课程的平均分。

select avg(degree) as avgdegree from score where sno in(select sno from student where class='95033')

18、假设使用如下命令建立了一个grade表:

create table grade(low int(3),upp int(3),rank char(1))

insert into grade values(90,100,’A’)

insert into grade values(80,89,’B’)

insert into grade values(70,79,’C’)

insert into grade values(60,69,’D’)

insert into grade values(0,59,’E’)

--现查询所有同学的Sno、Cno和rank列。

select sno,cno,

(case when degree between 90 and 100 then 'A'

when degree between 80 and 89 then 'B'

when degree between 70 and 79 then 'C'

when degree between 60 and 69 then 'D'

when degree between 0 and 59 then 'E'

END) as rank from score;

-- 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

select * from score where cno='3-105'and degree>(select degree from score where sno='109' and cno='3-105');

-- 20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。

select * from score where sno in--选学多门课程的同学中分数为非最高分成绩的同学的全记录

(select sno from score group by sno having count(cno)>1--选学多门课程的同学

intersect--取交集为选学多门课程的同学中分数为非最高分成绩的同学。

select distinct sno from score where sno not in( --分数为非最高分成绩的同学

select sno from score where degree=(select max(degree) from score)))--分数最高成绩的同学

-- 21、查询score中选学多门课程的同学中分数为非同课程最高分成绩的记录。

方法1:select * from score where sno in--选学多门课程的同学中分数为非同课程最高分成绩的同学的全记录

(select sno from score group by sno having count(cno)>1--选学多门课程的同学

intersect--取交集为选学多门课程的同学中分数为非同课程最高分成绩的同学。

select distinct sno from score where sno not in(--非同课程分数最高成绩的同学

select distinct sno from score where degree in (--同课程分数最高成绩的同学

select max(degree)from score group by cno)))--同课程分数最高成绩

方法2:select * from score where sno in--选学多门课程的同学中分数为非同课程最高分成绩的同学的全记录

(select sno from score group by sno having count(cno)>1-- 选学多门课程的同学

intersect -- 取交集为选学多门课程的同学中分数为同课程非最高分成绩的同学

select distinct sno from score where sno not in -- 选出非同课程最高分成绩的同学

(select distinct sno from score as s1

where degree=(select max(degree) from score as s2 where = group by cno)));-- 使用关联子查询选出同课程最高分成绩的同学

-- 22、查询1975年之后出生的学生的所学课程以及成绩。

select sname,Cname,degree from student

join score on =

join course on =

where sbirthday>='1975-01-01';

-- 23、查询和学号为107的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

select sno,sname,sbirthday from student where datepart(year,sbirthday)=

(select datepart(year,sbirthday) from student where sno='107')--学号为107的同学的出生年份

and sno not in('107');--排除学号为107的同学

-- 24、查询“张旭”教师任课的学生成绩。

select degree from score where cno=

(select cno from course

join teacher on =

where tname='张旭');--张旭老师所任课程

-- 25、查询选修某课程的同学人数多于5人的教师姓名。

select tname from teacher

join course on =

where cno in (select cno from score

group by cno having count(*)>5);-- 多于5名同学选修的课程

-- 26、查询95033班和95031班全体学生的记录。

select * from student where class in('95033','95031');

-- 27、查询存在有85分以上成绩的课程Cno.

select distinct cno from score where degree>85;

-- 28、查询出“计算机系”教师所教课程的成绩表。

select ,degree from score

join course on =

where tno in

(select tno from teacher where depart='计算机系');--计算机系教师的教师编号

-- 29、查询“计算机系”与“电子工程系”不同职称的教师的Tname和Prof。

select tname,prof from teacher where depart in('计算机系','电子工程系')--“计算机系”与“电子工程系”所有教师

Tname和Prof

and prof not in --“计算机系”与“电子工程系”不同职称的教师Prof

(select prof from teacher where depart ='计算机系'

intersect

select prof from teacher where depart ='电子工程系')--“计算机系”与“电子工程系”相同职称的教师Prof

-- 30、查询选修编号为“3-105“课程且成绩至少高于一个选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。

select cno,sno,degree from score where

cno='3-105'--选修编号为“3-105”课程的同学

and degree>any -- 大于任意一个选修编号为“3-245”的同学的成绩

(select degree from score where cno='3-245')--选修编号为“3-245”的同学的成绩

order by degree desc

-- 31、查询选修编号为“3-105“课程且成绩高于所有选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。

select cno,sno,degree from score where

cno='3-105'--选修编号为“3-105”课程的同学

and degree>all -- 大于所有选修编号为“3-245”的同学的成绩

(select degree from score where cno='3-245')--选修编号为“3-245”的同学的成绩

order by degree desc

-- 32、查询所有教师和同学的name、sex和birthday.

select sname as name,ssex as sex,sbirthday as birthday from student

union

select tname as name,tsex as sex,tbirthday as birthday from teacher

-- 33、查询所有“女”教师和“女”同学的name、sex和birthday.

select sname as name,ssex as sex,sbirthday as birthday from student where ssex='女'

union

select tname as name,tsex as sex,tbirthday as birthday from teacher where tsex='女'

-- 34、查询成绩比该课程平均成绩低的同学的成绩表。

select * from score as s1 where degree<

(select avg(degree) from score as s2 group by cno having =

-- 35、查询所有任课教师的Tname和Depart.

select tname,depart from teacher where tno in

(select tno from course)-- 课程表中存在的教师编号

-- 36、查询所有未讲课的教师的Tname和Depart.

select tname,depart from teacher where tno in

(select tno from course where cno not in(select cno from course group by cno))

备注:如果课程表中课程确定不为空,也可以如下编写:

select Tname,Depart from Teacher where Tno not in

(select Tno from Course)

-- 37、查询至少有2名男生的班号。

select class,ssex,count(ssex) as 男生人数 from student group by class,ssex having ssex='男' and count(ssex)>1;

select Class,COUNT(*) from Student where Ssex='男'group by Class having COUNT(*)>=2;

-- 38、查询Student表中不姓“王”的同学记录。

select * from student where sname not like '王%'

-- 39、查询Student表中每个学生的姓名和年龄。

select sname,datediff(year,Sbirthday,current_timestamp)as 年龄 from student;

select sname,datediff(year,Sbirthday,getdate()) as 年龄from student;

select sname,datepart(year,getdate())-

datepart(year,Sbirthday) as 年龄 from student;

-- 40、查询Student表中最大和最小的Sbirthday日期值。

select datepart(year,max(sbirthday))as

max,datepart(year,min(sbirthday)) as min from student;

select max(year(sbirthday))as max,min(year(sbirthday)) as min from student;

-- 41、以班号和年龄从大到小的顺序查询Student表中的全部记录。

select * from student order by class desc,Sbirthday

-- 42、查询“男”教师及其所上的课程。

select tname,tsex,cname from teacher left join course on = where tsex='男'

-- 43、查询最高分同学的Sno、Cno和Degree列。

select ,cno,degree from student

join Score on =

where degree=(select max(degree) from score);

-- 44、查询和“李军”同性别的所有同学的Sname.

select sname from student where ssex= --与李军同性别的同学姓名

(select ssex from student where sname='李军')--李军的性别

and sname not in('李军')--从中去除李军

-- 45、查询和“李军”同性别并同班的同学Sname.

select sname from student where --与李军同性别并同班的同学姓名

ssex=(select ssex from student where sname='李军')----与李军同性别的同学姓名

and class=(select class from student where sname='李军')----与李军同班的同学姓名

and sname not in ('李军');--从中去除李军

-- 46、查询所有选修“计算机导论”课程的“男”同学的成绩表。

方法1:select degree from score

join student on =

join course on =

where ssex='男' and cname='计算机导论'

方法2:select degree from score where

Sno in(select sno from student where ssex='男')

and cno in(select cno from course where cname='计算机导论')

-- 47、查询出选修课程号为3-245和6-166的课程的学生学号与姓名

select ,sname from student

join score on =

where cno in('3-245','6-166')

-- 48、查询出没有选修课程号为3-245和6-166的课程的学生学号与姓名

select ,sname from student

join score on =

where cno not in('3-245','6-166')

数据库SQL语句

1、select x.商品代号,分类名,数量,品牌 From 商品表现1 x,商品表2 y Where x.商品代号=y.商品代号 (从商品库中查询出每一种商品的商品代号、分类名、数量和品牌等信息。)2、select distinct 产地 From商品表2 (从商品库中查询出所有商品的不同产地。) 3、select distinct 品牌 From 商品表2 (从商品库中查询出所有商品的不同品牌) 4、select count(distinct产地)as产地数From商品表2 (从商品库中查询出所有商品的不同产地的总数。) 5、select x.商品代号,分类名,产地,品牌 From商品表1 x.,商品表2 y Where x,商品代号=y.商品代号and (品牌=‘熊猫’or品牌=‘春兰’) (从商品库中查询出品牌为熊猫或春兰的所有商品的商品代号、分类名、产地和品牌。) 19、select 商品表1.商品代号,单价,数量,产地 From 商品表1,商品表2 Where 商品表达式1.商品代号=商品表达式2.商品代号 (从商品库中查询出每种商品的商品代号、单价、数量和产地。) 20、select count(*) From 商品表1 Where数量》10 (从商品库中查询出数量大于10的商品种数。) 21、select * From商品表1 Where数量between 10 and20 (从商品库中查询出数量在10和20之间的所有商品。) 22、select分类名,max(单价)as最高单价 From商品表1 Group by 分类名 (从商品库中查询出每类(即类名相同)商品的最高单价)23、select分类名,avg(数量)as平均 数量 From商品表1 Group by分类名 (从商品库中查询出每类(即分类名相 同)商品的平均数量) 24、select分类名,sum(数量)as总 数量 From商品表1 Group by分类名 (从商品库中查询出每类(即分类名相 同)商品的总数量。) 25、select* From商品表1 Where单价>all(select单价 From商品表1 Where分类名’电视机’) (从商品库中查询出比所有电视机的 单价都高的每种商品) 26、select* From商品表1 Where单价>all(select avg(单价) From商品表1) (从商品库中查询出比所有商品单价 的平均值要高的全部商品) 27、select* From商品表1 Where数量=some(select max(数量) From商品表1) (从商品库中查询出数量最多的一种 商品) 28、select distinct分类名 From商品表1. Group by 分类名having count(*)>1 (从商品库中查询出同一类商品多于一 种的所有分类名) 29、select商品表1.*,产地 From商品表1,商品表2 Where商品表1.商品代号=商品表2.商 品代事情and产地in( Select 产地 From商品表1 x ,商品表2 y Where x.商品代号=y.商品代号 Group by产地having count(*)=1) (从商品库中查询出同一产地的商品 只有一种的所有商品) 30、select*,单价*数量as总价值 From商品表1 Order by总价值desc (从商品库中查询出每种商品的总价 值,并按降序排列出来 6、select 学生。学生号,count(*)as选 课门数 From学生,选课 Where学生.学生号=选课.学生号 Group by 学生。学生号 (从教学库中查询出互个学生选课的 门数。) 7、select distinct x.* From 学生产x,选课y,选课z Where y.学生号=z.学生号and y .课程 号<>z.课程号and x.学生号=y.学生号 (从教学库中查询出至少选修了两门 课程的全部学生。) 8、select * From 学生 Where 学生号in (select 学生号 From 选课 Group by 学生号having coount (*)=1) (从教学库中查询出只选修了一门课 程的全部学生。) 9、select x.学生号,y.学生号,y.课程号 From 选课x,选课y Where x.学生号=@sl and y.学生号=@ s2 and x.课程号=y.课程号 (从教学库中查询出学生号为@s1的学 生和学生号为@s2的学生所选修的共 同课程的课程号。) 10、select x.* From 课程x,选课y Where x.课程号=y.课程号and y .学生 号=@s1 and y.课程号not in( select 课程号 from 选课 where 选课.学生号=@s2) (从教学库中查询出学生号为@S1的学 生所选修、而学生号为@s2的学生没有 选修的全部课程。) 11、select * From 课程 Where not exists( select * from 选课 where 课程.课程号=选课.课程号) (从教学库中查询出所有未被学生选 修的课程。) 12、select * From 课程 Where exists(Select * From 选课 Where 课程.课程号=选课.课程号) (从教学库中查询出所有已被学生选 修的课程。)

sql数据库基础面试题复习试题考试题_全

不定项选择题(针对以下题目,请选择最符合题目要求的答案,每道题有一项或二项正确答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。题量为50道,每题2分,总分为100分。) 第一章 1、是SQLServer数据库的主数据文件的扩展名。(选择一项) A、.sql B、.mdb C、.ldf D、.mdf 2、在SQL Server 2005中,有系统数据库和用户数据库,下列不属于系统数据库的是()。 (选择一项) A、master B、pubs C、model D、msdb 3、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项) A、sa B、master C、administrator D、super 4、在使用SQL Server2005数据库时,有时需要将本机的数据库移动到其他机器上,恢复成对应的数据库使用。移动数据库分两步进行,应包括()和附加数据库(选择一项)A、分离数据库 B、删除数据库 C、新建数据库 D、合并数据库 5、在SQL Server2005中,附加数据库操作是指()(选择一项) A、把SQL Server 数据库文件保存为其他数据文件 B、根据数据库物理文件中的信息,把数据库在SQL Server 2005中恢复 C、把所有该数据库表的数据清空 D、把数据库删除掉 6、某单位由不同的部门组成,不同的部门每天都会生产一些报告、报表等数据,以为都采用纸张的形式来进行数据的保存和分类,随着业务的发展,这些数据越来越多,管理这些报告越来越费力,此时应考虑()(选择一项) A、由多个人来完成这些工作 B、在不同的部门中,由专门的人员去管理这些数据 C、采用数据库系统来管理这些数据 D、把这些数据统一成一样的格式 7、在SQL Server 2005中,对于数据库的定义正确的是()(选择一项) A、数据库是用来描述事物的符号记录 B、数据库是位于用户与操作系统之间的一层数据管理软件

SQL数据库数据的查询,汇总,统计和分析

8.数据的查询、汇总、统计和分析 本章将深入剖析SELECT命令。

8.1.SELECT命令 SELECT是一个用来从一个或多个表中获取数据的SQL命令。 8.2.简单的SELECT查询 如: SELECT命令至少包含: ?要出现在查询结果中的字段列表,如:身份证号码,姓名,电话号码 ?字段来自哪些表,如:FROM飞狐工作室 ?字段列表也可以是由字段、常量和函数组成的表达式 ?要列出所有字段,只须用* 号 8.3.设置查询结果的字段名 查询需求 请从数据库pubs的authors表,查询出所有作者的代号、姓名、电话号码及住址,而且请使用中文文字作为查询结果的各字段名。 解答

SELECT 作者代号= au_id, 姓名= au_fname+au_lname, 电话号码= phone, 住址= address FROM authors 或(看看你更喜欢哪一种格式?) /* 脚本文件名: Demo92.sql */ USE pubs SELECT au_id AS 作者代号, au_fname+au_lname AS 姓名, phone AS 电话号码, address AS 住址 FROM authors 注意: ?如果您设置的的字段名包含空格,则须加上单引号 SELECT au_fname+au_lname AS‘Name of Author’ FROM authors 任务:查询teacher表的姓名、性别和生日,列名用中文表示;查询class表的所有班级

信息;查询teacher表的教师姓名和年龄。 8.4.关键字ALL和DISTINCT的使用 1.查询需求 请列出“飞狐工作室”表中所有员工的雇用日期,但是日期相同者只列出一次即可。USE NorthwindSQL SELECT DISTINCT雇用日期FROM飞狐工作室 2.查询需求 请列出“飞狐工作室”表中有哪些部门。 USE NorthwindSQL SELECT DISTINCT部门FROM飞狐工作室 ALL为默认项,显示所有查询到的记录,包括重复项。 DISTINCT,对指定字段的内容相同的,仅显示一项。每个SELECT表达式只能有一个DISTINCT关键字。这意味着,DISTINCT是限制整条数据记录都重复者,只显示其中一条,而不是针对单一字段来处理。 任务:请列出“章立民工作室”表中有哪些部门。列出teacher表中的教师职称。

sql语句大全1

SQL语句大全 --语句功能 --数据操作 SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据库表中的数据 --数据定义 CREATE TABLE --创建一个数据库表 DROP TABLE --从数据库中删除表 ALTER TABLE --修改数据库表结构 CREATE VIEW --创建一个视图 DROP VIEW --从数据库中删除视图 CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引 CREATE PROCEDURE --创建一个存储过程 DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器 DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域 ALTER DOMAIN --改变域定义 DROP DOMAIN --从数据库中删除一个域 --数据控制 GRANT --授予用户访问权限 DENY --拒绝用户访问 REVOKE --解除用户访问权限 --事务控制 COMMIT --结束当前事务 ROLLBACK --中止当前事务 SET TRANSACTION --定义当前事务数据访问特征--程序化SQL DECLARE --为查询设定游标 EXPLAN --为查询描述数据访问计划 OPEN --检索查询结果打开一个游标 FETCH --检索一行查询结果 CLOSE --关闭游标 PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句 DESCRIBE --描述准备好的查询

SQL数据库面试题以和答案

Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表 C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号 select a.S# from (select S#,score from SC where C#='001')a, (select s#,score from SC wh ere c#='002')b Where a.score>b.score and a.s# = b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩 select S#, avg(score) from sc group by S# having avg(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select student.S#, student.Sname, count(sc.C#), sum(score) from student left outer join SC on student.S# = SC.S# group by Student.S#, Sname

4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名: select student.S#, student.Sname from Student where S# not in (select distinct(SC.S#) from SC,Course,Teacher where sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='叶平'); 6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Student 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='叶平')); 7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名: 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'); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名: Select S#,Sname

实验一 SQL语言单表查询

实验一SQL语言单表查询 一、实验目的 熟悉SQLServer2008建立数据库和表的方法;掌握SQL语言单表查询方法二.实验内容 1、建立数据库Student 2、建立该数据库的三张表:stu_info,course_info,stu_grade,三张表分别存放学生的学生信息、课程信息和学生选课信息 3、请写出实现如下功能的SQL语句,并在SQLServer2008中进行测试 (1)查询所有同学的姓名和年龄信息,要求使用别名(姓名和年龄),结果如下: (2)查询所有的院系信息,要求取消重复的行,结果如下: (3)查询前5位同学的学号、姓名和成绩信息。查询结果如下: (4)查询所有的男同学学号、姓名、生日和性别信息。查询结果如下:

(5)查询所有总分大于550的男同学信息。查询结果如下: (6)查询所有信息学院和会计学院并且总分大于550分的同学信息。查询结果如下: (7)查询所有籍贯为空的同学信息。查询结果如下: (8)查询总分在530—560之间的同学信息。 查询结果如下:

(9)查询所有在信息学院或会计学院就读的同学信息。查询结果如下: (10)查询所有姓“张”的同学信息。查询结果如下: (11)查询所有姓“张”,而且姓名是两个字的同学信息。查询结果如下: (12)查询所有不姓“张”也不姓“王”的同学信息。查询结果如下: (13)查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出,如果成绩相同,则按学号由小到大排序。查询结果如下:

(14)统计学生成绩表中每个同学的最高分、最低分、平均分和总分。查询结果如下: (15)统计学生成绩表中每个同学的最高分、最低分、平均分和总分,80分以下的成绩不参与统计。 Select stu_id,MAX(grade),MIN(grade),AVG(grade),SUM(grade) From stu_grade Where grade>=80 Group by stu_id 查询结果如下: (16)统计学生成绩表中每个同学的最高分、最低分、平均分和总分,并输出平均分大于87分的信息。查询结果如下: (17)明细汇总: 使用group by子句对查询数据进行分组汇总,为每一组产生一个汇总结果,每个组只返回一行,无法看到详细信息。使用compute和compute by子句既能够看到统计经营部的结果又能够浏览详细数据。 使用compute子句对所有学生的人数进行明细汇总。查询结果如下:

数据库图书信息管理数据库SQL语句

实验 SQL语言 一、实验目的 1、理解数据库以及数据表的设计; 2、熟悉SQL Server2005中的数据类型; 3、熟悉使用SQL语句创建和删除模式和索引; 4、掌握使用SQL语句创建、修改和删除数据表; 5、掌握使用SQL语句查询表中的数据; 6、掌握使用SQL语句插入、修改和删除数据表中的数据; 7、掌握使用SQL语句创建、删除、查询和更新视图。 二、实验容 (一)创建数据库和模式 1、通过SQL语句创建图书信息管理数据库,命名为“db_Library”,数据文件和日志文件放在D盘下以自己学号和命名的文件夹中,数据文件的逻辑名为db_Library_data,数据文件的操作系统名为db_Library_data.mdf,文件初始大小为10MB,最大可增加至300MB,增幅为10%;日志文件的逻辑名为db_Library_log,日志文件的操作系统名为db_Library_data.ldf,文件初始大小为5MB,最大可增加至200MB,增幅为2MB。 2、通过SQL语句在该数据库中创建模式L-C。 (二)创建和管理数据表 要求为各数据表的字段选择合适的数据类型及名称;为各数据表设置相应的完整性约束条件。 1、通过SQL语句将以下数据表创建在L-C模式下: 课程信息表(tb_course)——课程编号Course number 、课程名Course name 、先修课The first course 、学分credit 2、通过SQL语句将以下数据表创建在该数据库的默认模式dbo下: 图书类别信息表(tb_booktype)——类别编号Type number 、类别名称Category name 图书信息表(tb_book)——图书编号ISBN 、类别编号Type number、书名title 、作者author、BookPublic、定价BookPrice、库存数Inventory number 读者信息表(tb_reader)——读者编号Reader ID 、、性别、学号Student ID 、班级、系部pastern 借阅信息表(tb_borrow)——图书编号、读者编号、借阅日期Borrowing date 、归还日期Return date 3、通过SQL语句对读者信息表进行修改:删除系部字段、添加所在系字段。 4、通过SQL语句对图书信息表进行修改:将定价的数据类型改为REAL。 5、通过SQL语句删除课程信息表。 (三)创建和删除索引 1、使用SQL语句在图书信息表上创建一个非聚簇索引IX_S_QUANTITY,要求按照该表中库存数字段的降序创建。 2、使用SQL语句在读者信息表上创建一个唯一的非聚簇索引IX_S_NAME,要求按照该表中的字段的升序创建。 3、使用SQL语句删除之前创建的两个索引。 (四)数据库及数据表设计

SQL语句从大到小排序

根据下面三个关系模式完成下面习题:答案已设为白色需要就全选设为黑色学生表student 第一章课件:编写基本的sql语句。 1.查询所有学生情况。 3.查询所有学生的姓名,性别以及年龄。 5.查询所有学生10年后的年龄。 7.查询所有课程(列名用中文显示)。 9.查看竟有那些学生选课(重复学号显示一次)。 11.显示课程表的边结构。第二章课件:约束和排序数据。 01.查询计算机系的所有学生的姓名和年龄。 02.查询体育课的学分。 03.查询年龄小于18的学生。 04.查询年龄大于20的学生。 05.查询年龄介于18和20之间的学生(包括18和20)。 06.查询年龄不在18和20之间的学生。 07.查询年龄为18,20,22的学生。 08.查询年龄不是18,20,22的学生。 09.查询所有姓张的学生。 10.查询所有没有先行课的课程。 11.查询有先行课的课程。 12.在计算机系中找,姓张的男生。 13.在计算机系中找,姓张的或者姓李的男生并且按照年龄从大到小排序。 14.查询所有学生信息,显示结果先按系从大到小排序,再按年龄排序。 第三章课件:多表查询 1.查询每个学生(学号)选了哪门课(课程)得了多少分 2.查询每个学生(姓名)选了哪门课(课程号)得了多少分 3.查询每个学生(姓名)选了哪门课(课程名)得了多少分 4.查询一下王林选可哪门课得了多少分。 5.查询每个学生的成绩类别(优、良还是及格)。 6.查询哪个学生没有选课(用外查询)。 7.查询哪门课没有人选(用外查询)。 第四章课件:组函数

1.查询一下所有课程的平均分,最高分,最低分和总分数。 2.查询一下有多少个学生参加选课。 3.查询一下计算机系有多少人过20岁。 4.统计一下计算机系的男生多少人。 5.查询一下每个学生考试的最高分和最低分。 6.查询每门课(课程号)的最高分和最底分。 7.查询每门课(课程名)的最高分和最底分。 8.查询计算机系中男生多少人,女生多少人。 9,查询人数在三百人以上的系。 10.查询选修人数在三人(包括三人)的课程(课程名)。 11.查询各科考试成绩最低的同学。 12.查询考试成绩小于所选课程平均分的人。(有能力的同学选做) 第五章课件:子查询 1.查询所有比王林大的同学信息。 2.查询和王林同在一个系的所有学生信息。 3.查询一下谁的成绩(所有成绩)最低。 4.查询一下每门课成绩最底的同学(要姓名,和成绩)。 5.查询一下哪个学生没有选课(用子查询)。 6.查询一下哪门课没有人选(用子查询)。 7.查询一下和王林一个系,但是比他年龄大的同学。 第六章课件:ddl语句 1.创建以上四个表,要求每个表必须有主键,表和表之间必须有外间关联。 3.写出insert语句,给表添加以上数据。 5.提交所有操作。 7.将王林的年龄设置为空。 9.将张大民调到计算机系。 11.将体育课的学分设置成和管理学学分一样(update 中带有子查询)。 13.回滚所有操作。 9.某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里面的“o和0”(哦和零)“i和1”(哎和一),用户反映说看不清楚,公司决定,把存储在数据

数据库经典SQL语句大全

数据库经典SQL语句大全 篇一:经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk','testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2? from tab_old definition only 5、说明: 删除新表: tabname 6、说明: 增加一个列:Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明: 添加主键:Alter table tabname add primary key(col) 说明: 删除主键:Alter table tabname drop primary key(col) 8、说明: 创建索引:create [unique] index idxname on tabname(col?.) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。

数据库面试题(4)

数据库面试题 四数据库写SQL题(30) 1.按要求写SQL语句:根据集团成员培训业务,建立以下三张表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩 要求如下: 1)使用标准SQL语句查询成员名单中所属单位叫“技术一部”的人员总数及 平均年龄; 2)使用标准的SQL语句更新学号为‘S#1’的姓名为“Mike”; 3)使用嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位; 4)使用嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位; 5)查询选修课程超过5门的学员学号和所属单位; 解答: 1) select count(SN),avg(SA) from S where SD='技术一部'; 2) update S set SN='Mike' where S#='S#1'; 3) select SN,SD from S where S#=(select S# from SC where C#='C2'); 4) select SN,SD from S where S# not in(select S# from SC where C#='C5'); 5) select S#,SD from S where S#= (select S# from SC group by S# having count(S#)>=5); 2.请根据以下四张表(其中course_t表的teacher_id字段是teacher_t表的id字段的外键引用), 拼写出相应的sql语句(oracle语法)。(15分) 学生表:students_t id name sex 001赵学生Male 002钱学生Male 003孙学生Male 004李学生Female 005周学生Female ……… 教师表:teacher_t id name sex 001吴老师Male 002郑老师Male 003王老师Male

数据库基本SQL语句大全

数据库基本SQL语句大全 数据库基本----SQL语句大全 一、基础 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1、d at' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 typ e2 [not null],、、) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definit ion only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的就是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col…、) 删除索引:drop index idxname 注:索引就是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement

SQL数据库面试题目及其答案

1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。 它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 3。什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 4.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 5.什么是事务?什么是锁? 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。 要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

SQL语言命令

SQL语言由命令、子句、运算和集合函数等构成。在SQL中,数据定义语言DDL(用来建立及定义数据表、字段以及索引等数据库结构)包含的命令有CREATE、DROP、ALTER;数据操纵语言DML(用来提供数据的查询、排序以及筛选数据等功能)包含的命令有SELECT、INSERT、UPDATE、DELETE。 一、SQL语句 (1)Select 查询语句 语法:SELECT [ALL|DISTINCT] <目标列表达式> [AS 列名] [,<目标列表达式> [AS 列名] ...] FROM <表名> [,<表名>…] [WHERE <条件表达式> [AND|OR <条件表达式>...] [GROUP BY 列名[HA VING <条件表达式>]] [ORDER BY 列名[ASC | DESC]] 解释:[ALL|DISTINCT] ALL:全部;DISTINCT:不包括重复行 <目标列表达式> 对字段可使用A VG、COUNT、SUM、MIN、MAX、运算符等 <条件表达式> 查询条件谓词 比较=、>,<,>=,<=,!=,<>, 确定范围BETWEEN AND、NOT BETWEEN AND 确定集合IN、NOT IN 字符匹配LIKE(“%”匹配任何长度,“_”匹配一个字符)、NOT LIKE 空值IS NULL、IS NOT NULL 子查询ANY、ALL、EXISTS 集合查询UNION(并)、INTERSECT(交)、MINUS(差) 多重条件AND、OR、NOT 对查询结果分组 [HA VING <条件表达式>] 分组筛选条件 [ORDER BY 列名[ASC | DESC]] 对查询结果排序;ASC:升序DESC:降序 例1:select student.sno as 学号, https://www.doczj.com/doc/343447651.html, as 姓名, course as 课程名, score as 成绩from score,student where student.sid=score.sid and score.sid=:sid 例2:select student.sno as 学号, https://www.doczj.com/doc/343447651.html, as 姓名,A VG(score) as 平均分from score,student where student.sid=score.sid and student.class=:class and (term=5 or term=6) group by student.sno, https://www.doczj.com/doc/343447651.html, having count(*)>0 order by 平均分DESC 例3:select * from score where sid like '9634' 例4:select * from student where class in (select class from student where name='陈小小') (2)INSERT插入语句 语法:INSERT INTO <表名> [(<字段名1> [,<字段名2>, ...])] V ALUES (<常量1> [,<常量2>, ...]) 语法:INSERT INTO <表名> [(<字段名1> [,<字段名2>, ...])] 子查询 例子:INSERT INTO 借书表(rid,bookidx,bdate)V ALUES (edit1.text,edit2.text,date) 例子:INSERT INTO score1(sno,name) SELECT sno,name FROM stud ent WHERE class=?9634? (3)UPDATE-SQL

数据库SQL语句实验报告

《数据库原理及应用》实验报告SQL语句部分 :绩成总

实验一熟悉SQL SERVER,数据定义实验 实验一成绩: 一、实验目的 1、利用查询分析器创建数据库 2、利用查询分析器用SQL语言定义基本表、索引并进行相关操作 二、实验步骤及内容 在以下实验中,使用学生-课程数据库,它描述了学生的基本信息、课程的基本信息及学生选修课程的信息。 1.创建学生课程数据库 2.创建学生关系表S : 3.创建课程关系表C : 课程名学分先行课课程号Cno ccreditCname Cpno 4.创建课程关系表SC : 5.将以上创建表S、C、SC的SQL命令以 .SQL文件的形式保存在磁盘上。 6、在表S上增加“出生日期”属性列。 7、删除表S的“年龄”属性列。 8、删除S姓名列的唯一值约束。 9、修改SC表成绩属性列为精确数字型。 10、在表S上,按“Sno”属性列的唯一值方式建立索引。 11、删除表SC,利用磁盘上保存的.SQL文件重新创建表SC。 12、创建教材P74页习题5中SPJ数据库中的四个关系:S、P、J、SPJ。 三、实验结果: 1.创建学生课程数据库 ; Studend create database2.创建学生关系表S : S create table(, 9Sno CHAR()PRIMARYKEY UNIQUE,)(Sname CHAR20CHAR Ssex (2), smallint Sage ,

char Sdept 20(), ); .创建课程关系表C 3: 课程号课程名先行课学分 ccredit Cpno CnoCname table C create (primary key,) Cno char(4Cname CHAR(40 ),char(), 4Cpno ,Ccredit SMALLINT); 4.创建课程关系表SC : 学号课程号成绩 grade Sno Cno createtable SC(9),Sno char(),char Cno (4, Grade smallint); 5.将以上创建表S、C、SC的SQL命令以 .SQL文件的形式保存在磁盘上。 6、在表S上增加“出生日期”属性列。 ;datetimeadd Sbirthday alter table S 7、删除表S的“年龄”属性列。

sql数据库面试题及答案

sql数据库面试题及答案 【篇一:sql数据库经典面试题(笔试题)】 =txt>1.一道sql语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-10,胜) insert into #tmp values(2005-05-10,负) insert into #tmp values(2005-05-10,负) 1)select rq, sum(case when shengfu=胜 then 1 else 0 end)胜,sum(case when shengfu=负 then 1 else 0 end)负 from #tmp group by rq 2) select n.rq,n.勝,m.負 from ( select rq,勝=count(*) from #tmp where shengfu=胜group by rq)n inner join (select rq,負=count(*) from #tmp where shengfu=负group by rq)m on n.rq=m.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002=胜group by col001) a,

ER图+SQL语句练习题new

下图是企业订单管理系统的E-R图,提供对职工信息、客户信息、供应商信息、产品信息、订单信息、订单明细进行管理。描述为主键,描述为外键,外键约束通过图下箭头线进行标注。其中职员信息表中的sex取值为m或f,表示为男和女。 创建脚本如下: /*==============================================================*/ /* Table: 供应商信息表Supplier */ /*==============================================================*/ create table Supplier ( SupplierID char(5) not null, SupplierName varchar(50) not null,

Phone varchar(20) not null, Address varchar(50) null, PostalCode varchar(15) null, City varchar(20) null, constraint PK__Supplier primary key (SupplierID) ) go /*==============================================================*/ /* Table: 产品信息表Products */ /*==============================================================*/ create table Products ( ProductID char(5) not null, ProductName varchar(50) not null, SupplierID char(5) not null, constraint PK__Products primary key (ProductID), constraint FK_PRODUCTS_SUPPLIER foreign key (SupplierID) references Supplier (SupplierID) ) go /*==============================================================*/ /* Table: 客户信息表Customers */ /*==============================================================*/ create table Customers ( CustomerID char(5) not null, CustomerName varchar(50) not null, Phone varchar(20) not null,

相关主题
文本预览
相关文档 最新文档