SELECT语句(三)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SELECT语句(三)

点击蓝字“程序员考拉”欢迎关注!

SELECT语句(三)

一.HAVING子句

一个选择语句块的HAVING子句和WHERE子句的目的相同,WHERE子句用来在FROM子句处理之后选择一行,而HAVING子句用来在GROUP BY子句处理之后选择一行。一个HAVING子句可以单独使用而不使用GROUP BY子句。

 

HAVING是分组之后的,所以HAVING之后的条件表达式可以使用聚合函数,而WHERE之后的条件表达式不能使用聚合函数。

 

1.HAVING子句的例子:

 

原始数据库:

SELECT语句(三) SELECT语句(三) SELECT语句(三)

2.没有GROUP BY的HAVING子句。

如果一个HAVING子句之前没有GROUP BY子句,那么表中的所有行都分组为一行。

SELECT语句(三) SELECT语句(三)

3.HAVING子句的一般规则

HAVING子句中的所有列指定必须出现在一个聚合函数中,或者出现在GROUP BY子句指定的列的列表中。

二.ORDER BY子句

在SELECT语句的末尾添加一个ORDER BY子句,只是保证最终结果中的行按照一定的顺序进行排列。

 

1.按照列名排序

SELECT语句(三)

 

SELECT语句(三)

2.根据表达式进行排序

 

对于所有球员,获取姓,首字母,球员号码,按照姓的首字母进行排序:


SELECT NAME,INITIALS,PLAYERNO FROM PLAYERS ORDER BY SUBSTR(NAME,1,1)

 

ORDER BY子句中的表达式可以包含子查询。

获取球员号码和所有罚款额,并且按照罚款额和平均罚款额之间的差值来对结果排序:


SELECT PLAYERNO,AMOUNT FROM PENALTIES ORDER BY ABS(AMOUNT-SELECT AVG(AMOUNT) FROM PENALITIES)

 

3.使用顺序号码排序

 


SELECT PLAYERNO,NAME FROM PLAYERS ORDER BY NAME

等同于:


SELECT PALYERNO,NAME FROM PLAYERS ORDER BY 2

 

4.使用升序,降序进行排序

 

SELECT语句(三)

 

5.空值参与排序

MySQL把空值当做一列中的最小值。

三.LIMIT子句

LIMIT子句是选择语句块的最后一个子句,它选取了行的一个子集,中间结果中的行可以再次减少,表示了最前面的和最后面的多少个行能被选取。

 

1.选取sal最多的前四个职员的ID和sal:

SELECT语句(三)

 

2.获取薪资最低的三个球员的id,name和sal,如果sal相同,则只显示id最大的那些职员:

 

SELECT语句(三)

 

SAL最低排名1000,1500各一个,1900的有两个,只能选取前三个,根据“只显示id最大的那些职员”,添加ORDER BY的第二个条件为ID DESC。

 

3.四个薪资最低的职员的平均薪资是多少:

SELECT语句(三)

 

4.获取最低的四个薪资,并且略去重复的薪资:

 

SELECT语句(三)

 

5.使用LIMIT子句的子查询

 

在薪资最高的六个球员的一组中,获取id号最小的三个球员的id和sal:

 

SELECT语句(三)

 

6.带有偏移量的LIMIT

 

获取具有最低薪资的5个职员的id和薪资,从sal=1900(最低薪资中排第二)开始:

 

SELECT语句(三) SELECT语句(三)

LIMIT限制的是GROUP BY后面的第一个条件:

SELECT语句(三) SELECT语句(三)

ORDER BY先满足第一个条件,第一个条件有满足的结果的重复值再看第二个条件:

SELECT语句(三)

 

7.SQL_CALC_FOUND_ROWS选择选项。

 

在一条SELECT语句已经执行了LIMIT子句之后,询问一下如果我们没有执行LIMIT子句,在最终结果中将会出现的行的总的数目,通过在执行了LIMIT子句的SELECT语句中指定选择选项SQL_CALC_FOUND_ROWS可以达到这个目的。然后使用查询语句SELECT FOUND_ROWS()进行查询。

 

SELECT语句(三)

 

SELECT语句(三)
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SELECT语句(三)


  转载请注明: 好好学java SELECT语句(三)

 上一篇
SELECT语句(二) SELECT语句(二)
点击蓝字“程序员考拉”欢迎关注! 一.SELECT子句和聚合函数 1.选取所有列 SELECT * FROM TABELNAME  当一个FROM子句包含两个表或多个表,需要在*符号前使用一个表指定: SELECT PENA
下一篇 
JDBC数据库基本操作 JDBC数据库基本操作
点击蓝字“程序员考拉”欢迎关注! 1.什么是JDBC? 在看JDBC的概念之前先来看看什么是数据库驱动。 数据库驱动中驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相