SQL简单查询语句专项练习

题目参考文章:http://blog.csdn.net/friendan/article/details/8072668


 笔者整理了一些简单的数据库查询例题,分享给大家.

(因为笔者的系统为日文系统,所以部分内容会显示为繁体字)


学生信息表结构(S)

NoNameHours
C01JAVA70
C02C90
C03C++80
C04DB106
C05数学180
C06DATE結構72



选课表结构(C)

NoNameSexAgeDept
9512101李勇19電子系
9512102劉晨20電子系
9512103王敏20電子系
9521101張立22電子系
952110221信息系
9521103張海20信息系
9531101銭小力18数学系
9531102王大力19数学系



学生成绩表结构(SC)

SNOCNOGrade
9512101C0190
9512101C0286
9512101C06NULL
9512102C0278
9512102C0466
9521102C0182
9521102C0275
9521102C0492
9521102C0550
9521103C0268
9521103C06NULL
9531101C0180
9531101C0595
9531102C0585


表信息

insert into S select 9512101,'李勇','男',19,'電子系'
insert into S select 9512102,'劉晨','男',20,'電子系'
insert into S select 9512103,'王敏','女',20,'電子系'
insert into S select 9521101,'張立','男',22,'電子系'
insert into S select 9521102,'呉','男',21,'信息系'
insert into S select 9521103,'張海','男',20,'信息系'
insert into S select 9531101,'銭小力','女',18,'数学系'
insert into S select 9531102,'王大力','男',19,'数学系'

insert into C select 'C01','JAVA','70'
insert into C select 'C02','C','90'
insert into C select 'C03','C++','80'
insert into C select 'C04','DB','106'
insert into C select 'C05','数学','180'
insert into C select 'C06','DATE結構','72'

insert into SC select 9512101,'C01','90'
insert into SC select 9512101,'C02','86'
insert into SC (SNO,CNO) values (9512101,'C06')
insert into SC select 9512102,'C02','78'
insert into SC select 9512102,'C04','66'
insert into SC select 9521102,'C01','82'
insert into SC select 9521102,'C02','75'
insert into SC select 9521102,'C04','92'
insert into SC select 9521102,'C05','50'
insert into SC select 9521103,'C02','68'
insert into SC (SNO,CNO) values (9521103,'C06')
insert into SC select 9531101,'C01','80'
insert into SC select 9531101,'C05','95'
insert into SC select 9531102,'C05','85'


下面是简单的查询语句

(笔者使用的数据库是SQLSERVER2014)

(因为准备仓促,如有错误,劳烦请指正)


--1.分别查询学生表和学生修课表中的全部数据。
select * from S
select * from C

--2.查询成绩在70到80分之间的学生的学号、课程号和成绩。
select S.NO,C.NO,SC.Grade from S,C,SC
where S.no = SC.sno
and C.no = SC.cno
and SC.Grade >=70
and SC.Grade <=80

--3.查询C01号课程成绩最高的分数
select max(Grade)
from C,SC
where C.NO = CNO
and CNO like 'C01'


--4.查询学生都选修了哪些课程,要求列出课程号。
SELECT S.NAME,C.NO,C.NAME
FROM S,C,SC
WHERE S.NO = SC.SNO
AND C.NO = SC.CNO

--5.查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。
SELECT AVG(SC.Grade),MAX(SC.GRADE),MIN(SC.GRADE)
FROM SC
WHERE SC.CNO = 'C02'

--6.统计每个系的学生人数。
SELECT Dept,COUNT(S.NO)
FROM S
GROUP BY Dept

--7.统计每门课程的修课人数和考试最高分。
SELECT C.NAME,COUNT(SC.CNO),MAX(SC.Grade)
FROM S,C,SC
WHERE S.NO = SC.SNO
AND C.NO = SC.CNO
GROUP BY C.NAME

--8.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。
SELECT S.NAME,COUNT(S.NO) AS COUNT1
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
GROUP BY S.Name
ORDER BY COUNT1

--9.统计选修课的学生总数和考试的平均成绩。
SELECT C.NAME ,COUNT(S.NO),AVG(SC.GRADE)
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
GROUP BY C.NAME

--10.查询选课门数超过2门的学生的平均成绩和选课门数。
SELECT S.NAME,COUNT(C.NO),AVG(SC.GRADE)
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
GROUP BY S.NAME
HAVING COUNT(C.NO) > 2

--11.列出总成绩超过200分的学生,要求列出学号、总成绩。
SELECT S.NAME,SUM(SC.GRADE)
FROM S,SC
WHERE S.NO =SC.SNO
GROUP BY S.NAME
HAVING SUM(SC.GRADE) >= 200

--12.查询选修了c02号课程的学生的姓名和所在系。
SELECT S.NAME,S.DEPT
FROM S,SC
WHERE S.NO =SC.SNO
AND SC.CNO = 'C02'

--13.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

SELECT S.NAME,C.NO,SC.GRADE
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
ORDER BY SC.GRADE DESC
HAVING SC.GRADE >=80

--14.查询计算机系男生修了"java"的学生的姓名、性别、成绩。
SELECT S.NAME,SC.GRADE
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
AND C.Name = 'JAVA'
AND S.SEX = '男'

--15.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。
SELECT DISTINCT(S1.NAME),S1.AGE
FROM S AS S1,S AS S2
WHERE S1.NAME <> S2.NAME
AND S1.AGE = S2.AGE

--16.查询哪些课程没有人选,要求列出课程号和课程名。
SELECT C.NO,C.NAME
FROM C
WHERE C.NO NOT IN (SELECT DISTINCT CNO FROM SC)

--17.查询有考试成绩的所有学生的姓名、修课名称及考试成绩
SELECT S.NAME,C.NAME,SC.GRADE
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
AND SC.GRADE IS NOT NULL

--18.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,

--并要求将这两个查询结果合并成一个结果集,
--并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。
;WITH T1 AS(SELECT S.NAME SNAME,S.SEX,C.NAME CNAME,SC.GRADE,S.DEPT
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO)
SELECT * FROM T1 WHERE T1.DEPT ='コンピュータ系'
UNION
SELECT * FROM T1 WHERE T1.DEPT ='信息系'
ORDER BY DEPT,SNAME,SEX,CNAME,Grade


--19.删除修课成绩小于50分的学生的修课记录
DELETE S
FROM S,C,SC
WHERE S.NO =SC.SNO
AND C.NO = SC.CNO
AND SC.GRADE<50

--20.将所有选修了"c01"课程的学生的成绩加10分。
UPDATE SC SET GRADE = (GRADE+10)
WHERE SC.CNO = 'C01' 


--21.新建一张临时表SC_C.将每一科的课番号,课名以及该课的平均成绩插入其中.

DECLARE @SC_C TABLE(
NO VARCHAR(50),
NAME VARCHAR(50),
AVG_GRADE INT

)

INSERT INTO @SC_C

SELECT C.NO,C.NAME,AVG(SC.GRADE)
FROM SC,C
WHERE C.NO= SC.CNO

GROUP BY C.NO,C.NAME

SELECT * FROM @SC_C


--28从SC表中删除掉大于150小时的课程的选课记录
DELETE FROM SC WHERE
SC.CNO IN (SELECT C.NO FROM C WHERE C.HOURS > 150)


--29.列出电子系所有没有选修JAVA的学生的姓名
SELECT s.NAME
FROM S
WHERE S.DEPT = '電子系'
AND NOT EXISTS(SELECT S.NAME
FROM C,SC
WHERE S.NO = SC.SNO
AND C.NO = SC.CNO
AND C.NAME = 'JAVA'
)


以下问题请思考,如何用exists语句实现:

查询选修了全部课程的学生
查找学号9512101没有选修的课程
查找没有选修课程的学生

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值