繁体   English   中英

了解加入

[英]understanding join

我正在看这段代码:

select customers.name
from customers, orders, order_items, books
where customers.customerid = orders.customerid
and orders.orderid = order_items.orderid
and order_items.isbn = books.isbn
and books.title like '%java%';

并很难理解。

首先我有4个表,并且代码正在创建一个动态表,
我应该以不同的顺序看待它以便更好地理解它吗?

首先,即时通讯选择customer.name,但只有在运行最后一个代码之后,并且我才有我的动态表,对吗?

我应该尝试使用之前创建的动态表逐行排列每2个表吗?

而且在制作表格时,表格中的所有数据都被写入还是仅在哪里问?

不胜感激您的帮助。

从理论上讲,当您查询多个表以试图联接所有表时,会计算出所有涉及的表的临时叉积 这将意味着总行数是每个表的行数的乘积。

但是,实际上,SQL(在您的情况下为MySQL)的实现将注意有效地计算查询。 基于各种参数计算查询执行路径 ,并将其用于获取所需的输出。

编写以上语句的一种更好的方法是遵循新的语法:

SELECT customers.name FROM customers
INNER JOIN orders ON customers.customerid = orders.customerid
INNER JOIN order_items ON orders.orderid = order_items.orderid
INNER JOIN books ON order_items.isbn = books.isbn
WHERE books.title LIKE '%java%'

这里了解更多原因。

Rapid Fire在解释“跨产品”方面做得很好。 以下是一些其他提示。

首先,SQL不是过程代码。 它是一个查询。 整个查询同时发生。 您需要阅读整个查询以了解所有内容。 读查询时没有“顺序”。类似地,X = Y与Y = X相同...类似地,您将整个查询作为一个单元读取。

接下来,SQL使您脱离表创建过程。 尝试基于关系代数从数学的角度考虑它。 也就是说,表是关系(或元组)等等。 查找CJ Date的书并阅读。 SQL是根据一种数学语言而设计的,通过学习它可以极大地提高您理解数据库的能力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM