敲代码的帅boy
SQL Server 课堂笔记


/**
*@author:Blackui
*2019.10.22   8:04
*
*
*/ 

sql语句:

sum() 列的和 avg()列的平均值 min()最小值 max()最大值 COUNT()查询的该列的列值的个数 COUNT(*)

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计

聚合函数为什么不能出现在sql语句where的子句中??

聚合函数出现在where子句中是个伪命题!举个简单的例子,现在需要select出所有员工中那些工资大于平均工资的员工信息,如果sql语句写成select * from 表名 where sal > avg(sal);肯定是要报错的。因为聚合函数的实现,是基于所有完整数据的基础上,例如,求和,统计数据总数,最大值,最小值,必须保证所有列的数据全部用到。但是,聚合函数如果出现在where子句中,它就要受到整个语句的限制,因为这条语句最终是需要对数据进行筛选的,也就是说整条sql语句产生的结果将会是所有数据中的部分数据,而不是全部的完整数据。这与聚合函数实现的前提——完整的所有数据是相悖的,因此,聚合函数不能出现在where子句中。

交叉连接; cross join

课堂sql语句实现代码:

测试COUNT

select count(*)   from Student
select * from  Cj

select COUNT(distinct sno) from Cj     /*在sno前面加上distinct可以去掉重复值       结果为4*/




avg min max

select min(grade)  from  cj  where cno=1001
select max(grade)  from  cj  where cno=1001

/* insert into student values('5','小一','男',19,'信科学院') insert into student values('6','小二','女',18,'信科学院') insert into student values('7','小张','男',18,'信科学院') insert into student values('8','小郑','男',19,'信科学院') 上面语句是错的 */

在student表中,分专业统计出男生和女生的年龄及人数,按照性别进行排序(order by ssex)

from Student group by  sdept,ssex

order by ssex

查询cj表中平均成绩大于77分的学生的学号,平均分,并按照分数由高到低进行排序分组字段:学号

select  sno,avg(grade) from  cj
group  by  sno
having  avg(grade)>=77



WHERE子句:对表中的记录进行筛选,Having子句:对表中的记录进行筛选。

查询信科学院年龄大于平均年龄的学生信息聚合函数不能出现在where子句中 下面语句是错的

sage>avg(sage)

交叉连接

select*  from Student  cross join cj


二级标题内连接(自然连接)

select 列名列表From 表名1,表名2 WHERE 表名1.列名=表名2.列名
*/
/*所以选课学生的学生信息和成绩信息*/

select * from Student ,Cj
where  Student.sno=Cj.sno


/*所有学生的*/

select  * from  student  left join  Cj
on Student .sno = cj.sno


select * from student
select * from student

select * from  student A,student B
where A.sname='小李' and B.sdept=A.sdept





select student .*from student,cj
where student.sno=cj.sno and cno='1001'

查询选修java的学生信息

sno in (select sno from cj where cno=(select cno from Course where
cname='java'
))


where sdept=(select sdept from student
where
sname='小王')/*子句里查询的是小王所在的学院*/