sql server 数据库加强习题

本文详细介绍了使用SQL进行复杂查询的技巧,包括使用子查询、联接、条件筛选等操作来获取所需数据。通过实例展示了如何高效地从学生和成绩表中提取信息,如找出未参加考试的学生、查询英语成绩及格的学生、筛选参加考试且成绩合格的学生等。此外,文章还涉及创建临时表、定义表变量、新建和修改视图以及生成SQL查询结果的多种方式。

--1使用子查询实现命题查询出所有没有参加考试的同学的学生编号,姓名。

select
tsid,
tsname
from TblStudent
where tSId not in(select studentid from TblScore)

--2使用联接重做:查询出所有没有参加考试的同学的学生编号,姓名。

--2.(使用联接)
select * from
(
select
tsid,
tsname,
TblScore.*
from TblStudent
left outer join TblScore
on TblScore.studentId=TblStudent.tSId
)as Tbl
where scoreId is null

--3查询所有英语及格的学生姓名、年龄及成绩

SELECT * FROM TblStudent
SELECT * FROM TblScore

select tsname,tsage,english
from TblStudent
inner join TblScore
on Tblscore.studentid=TblStudent.tSId
WHERE english>=60

--4查询所有参加考试的(english分数不为null)学生姓名、年龄及成绩

select tsname,tsage,english,math
from TblStudent
inner join TblScore
on TblScore.studentId=TblStudent.tSId
where english is not null

--5查询所有学生(报考的和未报考的)的学生姓名、年龄、成绩,如果报考了,但是没有参加考试显示缺考,如果小于english&math小于60分显示不及格,如果没有报考显示没有报考(添加两列 ,“是否报考”,“是否合格”)

select * from TblScore
select * from TblStudent
select tsname,
tsage,
case
when english IS NULL then'缺考'
else convert(varchar(50),english)
end as english
,
math=case
when math IS null then '缺考'
else CONVERT(varchar(50),math)
end,
是否报考=
case
when scoreid is null then'未报考'
else'已报考'
end,
是否合格=
case
when english>=60 and math>=60 then '合格'
else '不合格'
end
from TblStudent
left join TblScore on
TblScore.studentId=TblStudent.tSId

--6新建 临时表(#MyStudents,包含2个字段分别为sName、sAge),并将Mystudents中的相应数据copy其中。

create table #MyStudents
(
sName nvarchar(10),
sAge int

)
insert into #MyStudents select * from MyStudents

--7定义表变量、插入数据并查询:

declare @varTbl table (coll int ,col2 varchar(30))
insert into @varTbl values (100,'A')
insert into @varTbl values (101,'B')
select *from @varTbl

--8新建视图,修改视图,删除视图

creat view vw-StudentScore
as
select sName, sAge, case when english IS null then '缺考' else CONVERT (varchar(50),english) end as english,when math IS null then '缺考' else CONVERT (varchar(50),math) end,是否报考=case when ScoreId IS null then '未报考' else'已报考' end,是否合格=case when english>=60 and math>=60 then '合格' else'不合格' end from Student left join Score on Score.studentId=Student.sId

alter view vw-StudentScore
as
select * from Student

drop view vw-StudentScore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值