博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL练习
阅读量:4092 次
发布时间:2019-05-25

本文共 1554 字,大约阅读时间需要 5 分钟。

 

0、SQL语句的执行顺序

select语句的写法顺序为:select -- from -- where -- group by -- having -- order by

执行顺序为:from -- where -- group by -- having -- select -- order by

即,先from的一个表或多个表中创建工作表,再用where在创建的工作表的基础上保留满足条件的行,接着group by将这些行分成多个组,然后having对每个组进行条件过滤,只保留符合条件的组,最后order by对结果进行排序。

 

1、从学生表中,检索所有比“王华”年龄大的学生姓名、年龄和性别

#首先求出王华的年龄,然后把所有年龄与王华的年龄比较select sname, age, sex from studentwhere age > (select age from student where sname = '王华');

 

2、统计学生表中,不同班级各自的男生、女生的人数

select class, sum(case when sex='男' then 1 else 0 end) as 男, sum(case when sex='女' then 1 else 0 end) as 女 from student group by class;select t1.class, t1.男, t2.女 from (select class, count(*) 男 from student where sex='男' group by class) t1 inner join(select class, count(*) 女 from student where sex='女' group by class) t2;

关于case的用法可以参考:

类似的,给定一个积分表result,有A、B、C、D四列,要求:1)当A列值大于等于B列时,选择A列否则选择B列;2)当C列值大于等于D列时,选择C列否则选择D列。其SQL语句如下:

select (case when A>=B then A else B end) max_ab, (case when C>=D then C else D end) max_cd from result;

 

3、从成绩表中,检索所有科目成绩都大于80分的学生的学号

#先找到存在一科成绩小于80的学生的学号集合,然后找到不在这个集合中的学号select distinct(sno) from gradewhere sno not in (select distinct(sno) from grade where score < 80);#第二种做法:先将所有成绩按学号分组,然后找到组里的最小成绩大于等于80的那些组select sno from gradegroup by sno having min(score) >= 80;#第三种做法:前两种的结合select name from grade group by sno having sno not in (select name from stu where score < 80);

 

4、从成绩表中,检索选修了3门以上课程的学生的学号

#先按学号分组,然后找到科目数量大于3的组select sno from grade group by sno having count(*) > 3;

小结:聚合函数count、max、min、avg等通常用在select后面展示统计分组信息、或者用在having后面作为过滤分组的条件(普通的SQL视为一个分组)。聚合函数不能用在where后面。

 

参考:

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://wbnii.baihongyu.com/

你可能感兴趣的文章
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>