gpt4 book ai didi

sql - 内部联接与自然联接与 USING 子句 : are there any advantages?

转载 作者:行者123 更新时间:2023-12-04 15:09:27 25 4
gpt4 key购买 nike

想象一下,我有两个简单的表,例如:

CREATE TABLE departments(dept INT PRIMARY KEY, name);
CREATE TABLE employees(id PRIMARY KEY, fname, gname,
dept INT REFERENCES departments(dept));

(当然是简化的)。

我可以有以下任何陈述:
SELECT * FROM employees e INNER JOIN departments d ON e.dept=d.dept;
SELECT * FROM employees e NATURAL JOIN departments d;
SELECT * FROM employees e JOIN departments d USING(dept);

可以在此处找到一个工作示例: SQL Fiddle: http://sqlfiddle.com/#!15/864a5/13/10

它们都给出几乎相同的结果——当然是相同的行。

我一直更喜欢第一种形式,因为它的灵 active 、可读性和可预测性——你可以清楚地定义什么与什么相关联。

现在,除了第一个表单有重复的列之外,其他两个表单有真正的优势吗?还是它们只是语法糖?

我可以看到后一种形式的缺点是您应该将主键和外键命名为相同,这并不总是实用的。

最佳答案

NATURAL JOIN没有得到广泛支持,JOIN USING 也没有。 (即不在 SQL Server 中)

有很多理由认为 NATURAL JOIN 是个坏主意。就我个人而言,我认为不明确命名诸如连接之类的东西会招致灾难。

例如,如果您在表中添加一列而没有意识到它恰好适合“自然连接”,那么当自然连接突然执行完全不同的操作时,您可能会遇到意外的代码故障。你会认为添加一列不会破坏任何东西,但它会破坏写得不好的 View 和自然连接。

当你在构建一个系统时,你不应该让这些风险潜入。这就像在没有每列的表别名的情况下跨多个表创建 View 并使用没有列列表的插入一样。

由于这些原因,如果您现在只是学习 SQL,请改掉使用这些的习惯。

关于sql - 内部联接与自然联接与 USING 子句 : are there any advantages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032696/

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