数据库_select_2

use Test

查询结果排序 order by

–查询选修了2号课学生的学号和成绩,查询结果按成绩的降序排列
–系统默认排序为升序asc desc为降序

select Sno 学号,Cno 课程号,Grade 成绩
from SC_Grade
where Cno = '2'
order by Grade

–查询学生表的所有信息,系按系统默认排列,年龄按降序排列

select * from Student
order by Sdept, Sage desc

–查询学生表的所有信息,系,年龄按降序排列

select * from Student
order by Sdept desc, Sage desc

–order by 3 desc 表示该表的第三列的属性

select * from Student
order by 4 asc
聚合函数(集函数) count、sum、avg、min、max

–count使用
– count(all|distinct 属性)系统默认属性为all 表示累积 distinct 表示去除重复的

–查询学生总人数

select * from Student
select COUNT(Sno) 总人数 from Student -- 通过学生表中的学号来统计总人数
select COUNT(Sname) 总人数 from Student -- 通过学生表中的姓名来统计总人数
select COUNT(Sage) 总人数 from Student -- 通过学生表中的年龄来统计总人数
select COUNT(*) 总人数 from Student --一般有*就可以统计总人数
select COUNT(distinct Sdept) 总系数 from Student -- 通过学生表中的系来统计总系数 会出现很多重复的选项所以要使用distinct

– 查询选修课程的人数

select COUNT(distinct Cno) 课程人数 from SC_Grade

– 查询选修课为2号课的人数

select Cno,COUNT(Cno) from SC_Grade
group by Cno
having Cno = '2'

– 查询选修了课的学生的人数

select count(distinct Sno) from SC_Grade

–计算2号课的平均成绩

select AVG(Grade) from SC_Grade
where Cno = '2'

– 计算2号课最高分

select Cno 课程号,MAX(Grade)最高分 from SC_Grade
group by Cno
having Cno = '2'

–查询成绩按降序排列,并取第一名

select top 1 Grade from SC_Grade
order by Grade desc

–查询成绩最高的同学有多个人,怎么解决

select rank()over(order by Grade desc) 排名,* 
from SC_Grade

–取SC表的前30%

select top 30 percent * from SC_Grade

– 分组 group by
– 统计每个课程号级选课人数

select Cno, COUNT(*) 选课人数 from SC_Grade
group by Cno

–统计男生和女生人数

select Ssex,COUNT(*) 人数 from Student
group by Ssex

–统计每个学生的学号和选课门数
–统计每个学号出现的次数就可以

select Sno,COUNT(*) 选课门数 from SC_Grade
group by Sno

/选择列表中的列 ‘SC_Grade.Cno’ 无效,
因为该列没有包含在聚合函数或 GROUP BY 子句中。
/

select Sno,Cno,COUNT(*) from SC_Grade
group by Sno

– 统计每一门课程的考试总分

select Cno,sum(Grade) from SC_Grade
group by Cno

– 筛选选课人数大于2门的人

select Sno, COUNT(*) 选课数量 from SC_Grade
group by Sno
having COUNT(*) >2

having 与where的区别

  1. where 是对整个表数据做筛选
  2. having 是对分组的结果做筛选
  3. 没有group by 就没有 having
  4. having后面可以接聚合函数 where 不可以

–查找平均分大于70 学生学号

select Sno,avg(Grade)平均分 from SC_Grade
group by Sno
having AVG(Grade) > 70
连接查询 笛卡尔积、连接

–笛卡尔积 行数:行行 列数:列
–Student.* 这个表的所以列

select Student.*,SC_Grade.*
from Student,SC_Grade

–等值连接:不把重复的属性除去,要求相等的分量
–Student ,SC_Grade 学号相等

select Student.*,SC_Grade.* 
from Student,SC_Grade
where Student.Sno = SC_Grade.Sno

–自然连接:一种特殊的等值连接。要求两个关系的公共属性取值相等,连接结果中去掉重复属性

select Student.*,Cno,Grade
from Student,SC_Grade
where Student.Sno = SC_Grade.Sno

– 查询学生的学号姓名课程号成绩
–必须对数据进行等值连接,要不然就是一个笛卡尔积

select Student.Sno,Student.Sname,Cno,Grade
from SC_Grade,Student
where Student.Sno = SC_Grade.Sno

– 查询学生的学号,姓名,课程名和成绩

select Student.Sno,Student.Sname,Course.Cname,Grade
from Student,Course,SC_Grade
where Student.Sno = SC_Grade.Sno and Course.Cno = SC_Grade.Cno
总结:
  1. 优先级:not and or
  2. 排序:order by desc/asc
  3. 分组:group by
  4. 自然连接等值连接笛卡尔积
  5. top
  6. rank()
  7. having/where区别
  8. 聚合函数:COUNT,MIN,MAX,SUM,AVG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值