项目中常用的sql整理和详细01
--有四张表
--1.学生表
Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号
--3.教师表
Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名
--4.成绩表
SC(S#,C#,score) --S# 学生编号,C# 课程编号,score 分数
-----------------------------------------------------------------------------------------
--查询"01"课程比"02"课程成绩高的学生的信息及课程分数
--isnull(check_expression,replacement_value)的使用,如果check_expression不为NULL,那么返回该表达式的值;否则返回replacement_value
--leftjoin就是以左表为主返回左表中连接的所有值,没有值则以NULL代替,右连接返之
01.select a.*,b.score as [语文分数],c.score as [数学分数] from
Student as a,SC as b ,SC as c where a.S#=b.S# and a.S#=c.S# and b.C#='01' and c.C#='02' and b.score>c.score
02.select a.* , b.score [课程"01"的分数],isnull(c.score,60) [课程"02"的分数] from Student a
left join SC b on a.S# = b.S# and b.C# = '01'
left join SC c on a.S# = c.S# and c.C# = '02'
where b.score > isnull(c.score,0)
--查找数学成绩比语文成绩好的学生信息
select a.*,b.score [语文],c.score [数学] from Student a
left join SC b on a.S#=b.S# and b.C#='01'
left join SC c on a.S#=c.S# and c.C#='02'
where c.score>ISNULL(b.score,0)
-----------------------------------------------------------------------------------------
--查找平均成绩大于60分的学生编号姓名平均成绩
--group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)
--where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
--having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
--CAST类型转换;具有ANSI标准的功能(比如,使用CAST的函数能更容易的被其它数据库软件使用),但比CONVERT功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用CAST。因此,我建议首先使用CAST,如果遇到必须使用CONVERT的情况时再使用CONVERT。
select a.S#,a.Sname,CAST(avg(b.score)as decimal)[平均分] from Student a ,SC b
where a.S#=b.S#
group by a.S#,a.Sname
having ISNULL(CAST(AVG(b.score)as decimal),0)>60
order by a.S#
------------------------------------------------------------------------------------------
--查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select a.S#[编号],a.Sname, cast(sum(b.score)as decimal)[总分],COUNT(b.C#)[课程数] from Student a
left join SC b on a.S#=b.S#
group by a.S#,a.Sname
having COUNT(b.C#)>0
order by a.S#