数据库基础知识点(系列六)

各种查询,SELECT命令

1.针对“teaching”数据库中的三个表,试用T-SQL的查询语句实现下列查询。

(1)查询学生们有哪些专业,只显示专业列,过滤掉重复行。

答:SELECT DISTINCT specialty FROM student

(2)统计有学生选修的课程门数。

答:SELECT COUNT(DISTINCT cno) FROM sc

(3)求选修C004课程的学生的平均年龄。

答:SELECT AVG(sage) FROM student,sc

WHERE student.sno=sc.sno and cno=’C004’

(4)求学分为3的各门课程的学生平均成绩。

答:SELECT course.cno,AVG(score) FROM course,sc

WHERE course.cno=sc.cno and credit=3

GROUP BY course.cno

(5)统计每门课程的学生选修人数,超过2人的课程才统计。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

答:SELECT cno,COUNT(*) FROM sc

GROUP BY cno

HAVING COUNT(*) >2

ORDER BY COUNT(*) DESC, cno

(6)检索姓刘的学生的姓名和年龄。

答:SELECT sname,sage FROM student

WHERE sname LIKE ‘刘%’

(7)在sc表中检索成绩为空值的学生学号和课程号。

答:SELECT sno,cno FROM sc WHERE score IS NULL

(8)查询没有学生选修的课的课程号和课程名。

答:SELECT cno, cname FROM course

    WHERE cno NOT IN (SELECT cno FROM sc)

(9)求年龄大于男同学平均年龄的女学生姓名和年龄。

答:SELECT sname,sage FROM student WHERE ssex='女'  

and sage >(SELECT  AVG(sage) FROM student WHERE ssex='男')

(10)求年龄大于所有男同学年龄的女学生姓名和年龄。

答:SELECT sname,sage FROM student  WHERE ssex='女'  

and sage > all (SELECT  sage FROM student WHERE ssex='男')

(11)查询所有与刘宏伟同年级、同专业,但比沈艳年龄大的学生的姓名、年龄和性别。

答:SELECT sname,sage,ssex FROM student WHERE sage >  

(SELECT  sage FROM student  WHERE sname='沈艳')

     AND  grade=(SELECT  grade FROM student WHERE sname='刘宏伟')

     AND specialty=(SELECT  specialty FROM student WHERE sname='刘宏伟')

(12)查询选修课程C001的学生中成绩最高的学生的学号。

答:SELECT sno FROM sc WHERE cno='C001'

AND score=(SELECT MAX(score) FROM sc WHERE cno='C001')

(13)查询学生姓名及其所选修课程的课程号和成绩。

答:SELECT sname, cno, score FROM student,sc

    WHERE student.sno=sc.sno

(14)查询选修2门以上课程的学生平均成绩(不及格的课程不参与统计),并要求按平均成绩的降序排列出来。

答:SELECT sno,AVG(score) FROM sc WHERE score>=60

GROUP BY sno  HAVING COUNT(*)>=2

ORDER BY AVG(score) DESC

(15)查询每个学生的平均成绩,只取前五名。

答:SELECT TOP 5 sno,AVG(score) FROM sc

GROUP BY sno

ORDER BY AVG(score) DESC

(16)查询每个学生的总学分。

答:SELECT sno,SUM(credit) FROM sc,course

WHERE sc.cno=course.cno

GROUP BY sno

(17)查询每门课成绩最低的学生的学号和课程号。

SELECT sno,cno FROM sc a WHERE score=

 (SELECT MIN(score) FROM sc WHERE cno=a.cno )

2.利用T-SQL语句,对“inventory”数据库完成下列查询。

(1)查询青岛海尔生产的商品信息。

答:SELECT * FROM goods WHERE producer= '青岛海尔'

(2)查询001号仓库储存的商品的编号和数量。

答:SELECT gno,number FROM invent WHERE stno= '001'

(3)查询所有商品的种类名称。

答:SELECT DISTINCT gname FROM goods

(4)查询商品的单价在2000到3000之间的商品信息。

答:SELECT * FROM goods WHERE price BETWEEN 2000 AND 3000

(5)查询“商品表”中所有商品的信息,其中单价打八折显示。

答:SELECT gno,gname,price*0.8 单价八折,producer FROM goods

(6)查询青岛海尔和青岛海信生产的商品的信息。

答:SELECT * FROM goods WHERE producer='青岛海尔' OR producer='青岛海信'

(7)查询李明管理的仓库存储的商品信息。

答:SELECT * FROM goods WHERE gno IN

(SELECT gno FROM invent WHERE stno IN

(SELECT stno FROM manager WHERE mname='李明'))

(8)查询2号楼101仓库的管理员的姓名和年龄。

答:SELECT mname,YEAR(GETDATE())-YEAR(birthday) age FROM manager

WHERE stno=(SELECT stno FROM store WHERE address='2号楼101')

(9)查询不是青岛生产的商品的信息。

答:SELECT * FROM goods WHERE producer NOT LIKE '青岛%'

(10)查询库存总量最少的仓库的编号。

答:SELECT TOP 1 stno FROM invent

     GROUP BY stno

     ORDER BY SUM(number)  ASC

(11)查询各生产厂家的商品库存总量,并存入”库存总量”表。

答:SELECT producer,SUM(number) AS 库存总量 INTO 库存总量

FROM goods,invent

WHERE goods.gno=invent.gno

    GROUP BY producer

(12)将张力管理的仓库的电话改为89000008。

答:UPDATE store SET telephone='89000008' WHERE stno=

(SELECT stno FROM manager WHERE mname='张力')

(13)删除四川长虹的产品的库存信息。

答:DELETE invent WHERE gno IN

(SELECT gno FROM goods WHERE producer='四川长虹')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值