这个SQL连接做什么?

这个SQL连接做什么?,sql,Sql,下面的连接就是我认为的θ连接,非等连接。我说的对吗,相等连接表示匹配的对象,非相等连接表示不匹配的对象。那么下面的非等联接是如何工作的呢 SELECT E.ENAME, E.SAL, S.GRADE FROM EMPTBL E, SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL; 避免分离联接使用现代显式联接 SELECT E.ENAME, E.SAL, S.GRADE FROM EMPTBL E join SALGRADE S on

下面的连接就是我认为的θ连接,非等连接。我说的对吗,相等连接表示匹配的对象,非相等连接表示不匹配的对象。那么下面的非等联接是如何工作的呢

SELECT E.ENAME, E.SAL, S.GRADE 
FROM EMPTBL E, SALGRADE S
WHERE E.SAL
BETWEEN S.LOSAL AND S.HISAL;

避免分离联接使用现代显式联接

SELECT E.ENAME, E.SAL, S.GRADE 
FROM EMPTBL E join  SALGRADE S
on E.SAL>=S.LOSAL and E.SAL<=S.HISAL
逗号分隔联接与ANSI联接: 逗号分隔联接已经成为过去,根据SQL标准,它们在1992年变得多余,不应该再使用了。如果表不相关,我们将用单词CROSS-JOIN替换逗号,以明确意图,即

SELECT e.ename, e.sal, s.grade 
FROM emptbl e, salgrade s

但是,在您的情况下,您有一个连接条件

SELECT e.ename, e.sal, s.grade 
FROM emptbl e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;

此联接的作用是:将每个emptbl记录与工资在salgrade范围内的所有salgrade记录合并。这应该只是一行,因为工资等级可能不会重叠

e.sal BETWEEN s.losal AND s.hisal
也可以写成

e.sal <= s.losal AND e.sal >= s.hisal
例子: emptbl

萨尔格拉德

结果

等连接与非等连接:
顺便说一句,非等联接与等联接的作用相同,因此不必了解这个词汇表。唯一的区别是=上的等连接与其他比较上的非等连接,例如今天的提示:始终使用现代的显式连接语法。更容易编写而不出错,更容易阅读和维护,如果需要,更容易转换为外部联接!顺便说一句,这是一个内部联接,以一种老式的方式编写。查询会将emp中的所有记录与salgrade交叉联接,并从salgrade中获取工资大于或等于LOSAL且大于或等于HISAL的员工。我不明白这两个联接都做了什么。此外,Oracle中还允许使用coma分隔联接。这一部分最让人困惑的是,E.SAL在S.LOSAL和S.HISAL之间做了什么,或者你的示例esal>S.LOSAL做了什么这很有帮助。我在上面发布的join示例是我目前在大学里被教授的,没有任何解释。感谢您的详细回复。您可以从我们的反应中看出,不应该再教授这种连接语法了。可以这样说:这就是我们在20世纪80年代加入的方式,但并没有像现在这样进行教学。你应该告诉你的老师。从一本三十年前的书上教一些东西似乎很奇怪。
e.sal BETWEEN s.losal AND s.hisal
e.sal <= s.losal AND e.sal >= s.hisal
ename | sal ------+----- John | 1000 Jane | 1500 grade | losal | hisal ------+-------+------ low | 0 | 800 med | 801 | 1200 high | 1201 | 2000 ename | sal | grade ------+------+------ John | 1000 | med <-- because 1000 BETWEEN 801 AND 1200 Jane | 1500 | high <-- because 1500 BETWEEN 1201 AND 2000