SQL语句中,为什么where子句不能使用列别名,而order by却可以?

结论:在SQL Server查询序列中,WHERE子句之前的别名不存在,但是ORDER BY之后的别名已经存在。

示例:2 02 3 年1 月1 日,请求相关数据“订单表”和“客户表”。
WHERE 子句基于客户端 ID。
发现在WHERE阶段无法使用别名引用客户端ID,但在ORDER BY阶段可以使用别名。

Mysql查询详解(条件查询、子查询、模糊查询、连接查询。。。)

记得有一天,我在公司数据库中查找一名员工的工资,发现工资信息隐藏在一条复杂的SQL语句中。
那是一个阳光明媚的日子。
我坐在电脑前,敲着键盘,心想如果有一个简单的查询语句就好了。
于是我开始尝试用SQL来查询每个员工的工资。
我给查询列起了一个别名,使用了where运算符,并将条件放在from运算符后面。

我输入了这个 SQL 语句:
SELECT 员工姓名 e.ename AS, 工资 e.sal AS 从粗体 WHERE e.sal = 5 000;
结果显示只有一名员工的工资,为5 000元。
这让我想到:如果我使用%符号来查询工资为5 000的员工姓名会发生什么?我尝试了一下,发现不行。
我再次尝试使用 _ 字符,但这也不起作用。
看起来这些运算符在这里毫无用处。

然后我开始尝试加入请求并想知道每个员工的部门名称。
我使用内部联接并编写了以下 SQL:
SELECT e.ename, d.dname 从粗体 INNER JOIN dept d ON e.deptno = d.deptno;
结果成功显示了每个员工的姓名以及对应的部门名称。

接下来,我给自己设定的任务是找出每个员工的薪资水平。
我再次使用了内部联接,这次是在 salgrade 表上:
SELECT e.ename, e.sal, s.grade 从粗体 INNER JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal;
这个请求也成功了,清楚地显示了员工的姓名、工资和工资级别。

最后,我尝试识别每个员工的高级经理。
这就需要嵌套子查询,我写了下面的SQL:
SELECT e.ename, (SELECT ename FROM emp WHERE empno = e.mgr) ASleader name FROM emp e;
这个查询有点复杂,但最终成功找到了每个员工的经理姓名。

经过这一系列的操作,我开始对SQL查询有了更深入的理解。
但是,我仍然想知道:如果我使用外连接,我是否能够实现更复杂的查询?例如,列出各种工作的最低工资以及执行这些工作的员工姓名。
我决定下次尝试一下我会训练。
等等,还有一件事,我突然想到,如果我能在查询中使用子查询,是不是能够更灵活地检索数据呢?这可能是一个值得探索的领域。