其实对数据的操作,必然会使用一个操作,就是排序。
ORDER BY(排序)
那就是这个关键字,先看演示。
-- 安装工资排序
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM test.emp ORDER BY sal
当然这个也可以有多个字段
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM test.emp ORDER BY sal,empno
-- 这个意思就是先安装工资的排序,然后再安装员工号进行排序。毕竟有相同的工资。
这个可以看出来,在ORDER BY
中后面可以看出,先对靠近的字段进行排序,然后对后面再进行排序。
排序默认是升序排序的,既然可以升序自然也可以降序。这个时候需要两个特殊的关键字ASC
和DESC
;
升序其实是默认,锁业也不在演示了。直接看降序。
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM test.emp ORDER BY sal DESC
这个又会涉及的一个问题,那就是如果是两个字段呢?
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM test.emp ORDER BY sal,empno DESC
-- 这种本质是sal工资默认升序不写也就是升序, 然后再通过empno排序,因为有DESC可以看出是一个降序。 也遵守ORDER BY 靠近优先原则
可以看出DESC
只是对与靠近自己的字段有效果,但是前面的会按照默认的升序排序。
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM test.emp ORDER BY sal DESC,empno DESC
可以看出对于升序不写即可,如果对于降序,如果多个需要降序也就需要在其后面字段后面。不过这个也可以看出升序和降序可以搭配着用。
ORDER BY
后面可以跟别名,这个是和WHERE
的不同之处。
SELECT empno, ename, job, mgr, hiredate, sal,sal*12 AS yearsal comm, deptno FROM test.emp WHERE yearsal>'50000' ;
可以看出WHERE
后面跟随别名的话,会报错。
而ORDER BY
后面呢?
SELECT empno, ename, job, mgr, hiredate, sal,sal*12 AS yearsal ,comm, deptno FROM test.emp ORDER BY yearsal;
当然在MYSQL
中ORDER BY后面可以跟SELECT 中没用用到的字段。
SELECT empno FROM test.emp ORDER BY sal
而且还有一点排序,对于空的字段,默认其为最小,毕竟空等于没有,没有自然是最小了,这个和数学运算符那个大写对比不能看成一样。
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM ntest.emp ORDER BY comm DESC
总结:
ORDER BY
排序后面可以跟多个,当然靠近优先原则,不过一般的前面有相同值的时候才会体现出现。ORDER BY
如果后面跟随多个字段,如果升序的话可以不写但是降序的话,需要根据需求在各字段后面添加DESCORDER BY
字段后面可以跟别名,以及SELECT后面没用呈现的字段。ORDER BY
放在WERE语句后,毕竟先选出数据,然后才能进行排序。
分页(limit)
其实很多时候,比如网页呈现的时候,很多数据不是一次性全部返回的,如果数据太多,显示看的话也会很乱,这个时候就需要一种操作将数据进行分页显示,这个其实有点像是linux中的cat -n 的操作 。
这个在MYSQL
中使用的关键字是LIMIT
,为什么要强调一下呢,因为在不同的数据库中其关键字是不同的,比如在ORACLE
中其是rownum。
格式:
LIMIT 起始行(不写默认为0),显示多少行
现在看一下例子:
SELECT empno, ename, job, mgr, hiredate, sal,comm, deptno FROM test.emp LIMIT 0,2;
这个可以看出其显示的0开始,然后只显示2行,自然也可以从第一行,显示2行。
SELECT empno, ename, job, mgr, hiredate, sal,comm, deptno FROM test.emp LIMIT 1,2;
LIMIT
其放在WHERE
和ORDER BY
后面,毕竟先选出数据,然后对其进行排序,不然提前分页又有什么意义呢。