gpt4 book ai didi

sql - SQL 表连接中 ON 和 WHERE 子句的区别

转载 作者:行者123 更新时间:2023-12-04 13:07:19 25 4
gpt4 key购买 nike

select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
and (e.hire_date > m.hire_date);

select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
where (e.hire_date > m.hire_date);

select e.last_name, e.hire_date
from employees e join employees m
on (e.hire_date > m.hire_date)
where (m.last_name = 'Davies');

这三个语句具有相同的结果。除了 where不能独占使用,不使用 on ,是否有任何特别的理由使用 where在所有表连接?

最佳答案

主要区别在于您何时使用不同的联接。

通常,如果要使用内部联接,您应该看到相同的结果,但是一旦开始使用 LEFT 联接,结果就会改变。

看看下面的例子

SQL Fiddle DEMO

And have a look at the following article (very explanatory)

编辑@ShannonSeverance

架构和测试数据

CREATE TABLE Table1 (
ID INT,
Val VARCHAR(20)
);

INSERT INTO Table1 VALUES (1,'a');
INSERT INTO Table1 VALUES (2,'a');

CREATE TABLE Table2 (
ID INT,
Val VARCHAR(20)
);

INSERT INTO Table2 VALUES (1,'a');

和测试
SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 INNER JOIN
Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val;

SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1,Table2 t2
WHERE t1.ID = t2.ID
AND t1.Val = t2.Val;

SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val;

SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID
WHERE t1.Val = t2.Val;

关于sql - SQL 表连接中 ON 和 WHERE 子句的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com