自学内容网 自学内容网

MySQL零散拾遗(二)

列的别名只能在 ORDER BY 中使用,不能在 WHERE 中使用

举个栗子,有一个员工表employees

显示出表 employees 的 员工id,员工的月薪还有年薪,并按年薪进行升序排序。

SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal

但是列的别名不能在 WHERE 中使用
下面的MySQL语句会报错

SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
WHERE annual_sal > 81600

为什么?进行解释

ORDER BYWHERE 同时出现时,WHERE 要往前放,即 WHERE 放在 FROM 的后面,ORDER BY 放在 WHERE 的后面。

SELECT employee_id, salary
FROM employees
WHERE department_id IN (50, 60, 70)
ORDER BY depart_id DESC

MySQL中 SELECT 查询语句的执行顺序,以上面的语句进行分析,首先执行 FROM employees 从哪个表中取数据,然后执行 WHERE department_id IN (50, 60, 70) 看看有什么过滤条件,筛选完后留下一波数据,然后执行 SELECT employee_id, salary 看看你想查什么数据(哪些字段或者列)这时可以对列进行起别名,最后执行ORDER BY depart_id DESC 有了列的别名后才能使用列的别名进行对查询结果进行排序。

一句话总结:WHERESELECT前面执行,所以在SELECT中定义的列的别名,无法在WHERE使用。

WHERE … ORDER BY … LIMIT 声明顺序如下

SELECT employee_id, last_name, salary
FROM employees
WHERE salary > 600
ORDER BY salary DESC
LIMIT 0, 10;
# LIMIT 10;

LIMIT 的格式:严格来说:LIMIT 位置偏移量, 条目数
结构 LIMIT 0, 条目数 等价于 LIMIT 条目数

LIMIT常用于分页机制

需求:每页显示pageSize条记录,此时显示第pageNo页:
公式:LIMIT (pageNo - 1) * pageSize,pageSize;

MySQL 8.0中可以使用 “LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和 “LIMIT 4, 3” 返回的结果相同。


原文地址:https://blog.csdn.net/ckk1314520/article/details/140477851

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!