Sql 在Oracle中使用连接功能时,我对在代码中何时使用额外别名有一些疑问

Sql 在Oracle中使用连接功能时,我对在代码中何时使用额外别名有一些疑问,sql,oracle,join,subquery,sql-in,Sql,Oracle,Join,Subquery,Sql In,在开始之前,很抱歉,一些结果和数据是用韩语编写的 下面是我目前正在查看的代码 SELECT S.*, D.DNAME FROM STUDENT S, DEPARTMENT D WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT SUBSTR(JUMIN,7,1),MAX(WEIGHT) FROM STUDENT GROUP BY SUBSTR(JUMIN,7,1)) AND S.DEPTNO1 = D.DEPTNO; 这是部门的数据 这是学生的数据

在开始之前,很抱歉,一些结果和数据是用韩语编写的

下面是我目前正在查看的代码

SELECT S.*, D.DNAME
FROM STUDENT S, DEPARTMENT D
WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT SUBSTR(JUMIN,7,1),MAX(WEIGHT)
FROM STUDENT GROUP BY SUBSTR(JUMIN,7,1))
AND S.DEPTNO1 = D.DEPTNO;
这是部门的数据

这是学生的数据。

我得到了我想要的结果。但是当我修改这部分代码时,我有一些问题

WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT SUBSTR(JUMIN,7,1),MAX(WEIGHT)
这一个

WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT 
S.SUBSTR(JUMIN,7,1),MAX(S.WEIGHT)
我所做的只是把S放在JUMINWEIGHT前面的第3行。 但当我这样做的时候,它会显示所有的数据。

我认为JOIN别名(在这段代码中是S,D)是用来表示我有两个表要使用,分别标记为S和D。S表示此数据在学生中,D在部门中。 但我想我弄错了。
无论如何,我不知道这个结果是怎么出来的。

这个是指主表,而不是子查询表

WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT 
S.SUBSTR(JUMIN,7,1),MAX(S.WEIGHT)
您的原始查询已经正确。其中您已经有一个基于聚合的新结果集

WHERE (SUBSTR(S.JUMIN,7,1),S.WEIGHT) IN (SELECT SUBSTR(JUMIN,7,1),MAX(WEIGHT)

s
是一个别名。借助别名,您可以指定列来自哪个源(表)。您已在from子句中将此项分配给表学生。在where子句中,再次使用学生表,但这是另一个来源。所以你想要或需要的是一个新的别名和一个提示。使用显式连接语法,而不是基于逗号的语法