--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