首页 > 数据库 >Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?

Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?

时间:2023-04-15 13:13:54浏览次数:40  
标签:salary sal annual 别名 报错 Mysql WHERE ORDER

 

  Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?

 我们先对salary * 12 命名一个别名annual_sal

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

 这段代码以annual_sal升序输出且正常执行没有报错。说明order by 可以使用别名

 我们再看看这个段代码

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

这段代码就报错了,报错说明是Unknown column 'annual_sal' in 'where clause'。由此可以得出where语句执行是找不到annual_sal.

要解决这个问题,我们必须知道sql语句执行顺序。

  1. 先执行from语句用哪个表
  2. where过滤条件(这时候不知道别名)
  3. select选择输出字段 (这时候才有别名)
  4. order by进行排序   (order by 才能使用别名)

总结一下:因为where在sql中执行顺序在select(创建别名)之前,所以找不到别名。

 

标签:salary,sal,annual,别名,报错,Mysql,WHERE,ORDER
From: https://www.cnblogs.com/cobral/p/17320854.html

相关文章

  • Linux系统之安装mysql数据库
    (Linux系统之安装mysql数据库)一、查看系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"ANSI_......
  • SpringBoot配置了数据库依赖 报错: Failed to configure a DataSource: 'url' attrib
    错误2023-04-1511:56:16.025INFO12028---[restartedMain]ConditionEvaluationReportLoggingListener:ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.2023-04-1511:56:16.060E......
  • 远程连接MySQL数据库
    远程连接MySQL数据库一、连接远程数据库:1、显示密码如:MySQL连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”mysql-h192.168.5.116-P3306-uroot-p1234562、隐藏密码如:MySQL连接本地数据库,用户名为“root”,C:/>mysql-hlocalhost-uroot-p......
  • 宝塔导入mysql数据库后,phpmyadmin可以登录,本地Navicat无法登录
    问题描述:宝塔导入mysql数据库后,phpmyadmin可以登录,本地Navicat无法登录问题排查:1.检查服务器3306端口是否开启,如果为云服务器,需要登录云服务器后台安全组设置开启;2.宝塔服务器页面设置对应的权限,安全起见一般设置指定IP访问。(很多Navicat无法访问就是因为权限未设置)  ......
  • 放弃where 1 = 1,使用更优雅的SQL条件拼接
    列表接口,通常会有多个条件组合查询的业务场景。映射至mapper.xml中就需要写where1=1来拼接否则就会发生select*fromtablewhereandcolumn='value'的语法错误如今的IDEA中,如果你设置了SQL方言,就会警告你where1=1始终为true建议使用<where></where>标签来处理这......
  • Java连接RabbitMQ报错:An unexpected connection driver error occured(偶尔能连上)
    1、查看rabbitMq的状态。输入命令:rabbitmqctlstatus,发现没有报错,但是rabbit中的host是root,并不是ip地址,所以连接不上。 2、运行命令:echo【ip地址】root>>/etc/hosts。将RabbitMQ服务所在的IP地址添加到/etc/hosts中。 ......
  • TypeScript 报错:Type '({ filename: string; createTime: string; filePath: string;
    问题:因为TypeScript不支持直接给一个接口类型的变量赋一个未知的值。如consta:A={ name:'s'};你需要给这样的对象或数组值使用as指定一个类型。正确写法:consta:A={ name:'s'}asA;数组写法一样:consta:A[]=[ { name:'s' }]asA[];使用as将一......
  • MySQL存储过程入门使用
    一、存储过程概述存储过程的英文是StoredProcedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行......
  • typescript vue3 VueDraggable 报错 Uncaught TypeError: Cannot read properties of
    UncaughtTypeError:Cannotreadpropertiesofnull(reading'element')nnotreadpropertiesofnull(reading'index')错误写法就是说子组件需要用div包着,你用其他东西,他无法添加key,然后就会报错。<template#item="{element}"><Todo:detail=......
  • Yunzai-BotQQ账号登录报错:token失效: [禁止登录]你当前使用的QQ版本过低,请前往QQ官网i
    token失效:[禁止登录]你当前使用的QQ版本过低解决方案写在前面:该问题是TX认为账号有被用作BOT的嫌疑,而阻止你登陆。但是由于是我们人类在登陆,用来卡BOT的验证码测试肯定可以通过,TX就用“版本过低”的问题来卡我们!!TX我***网上尝试了许多方法,包括对device.json大改特改,还说什么......