首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL的语境中,“笛卡尔”是什么?

在MySQL的语境中,“笛卡尔”是什么?
EN

Stack Overflow用户
提问于 2014-08-06 23:00:05
回答 1查看 73关注 0票数 0

我想更好地理解“笛卡尔”是什么。以下是从xQberta question I asked earlier的答案的引文

当使用左侧(或外部)连接时,您必须考虑数据限制是在何时设置的,还是在创建笛卡尔时。

当我忘记指定连接表的标准时,‘笛卡儿’xQbert指的是‘笛卡尔产品’吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-07 01:04:33

首先,不要让加入吓倒你,尊重他们。

代码语言:javascript
复制
Select
      a.field1,
      ...
      x.field2
   from
      SomeTable a
         JOIN AnotherTable x
            on a.SomeKey = x.SomeKey
   where
      blah...

维基百科涉及到各种各样的东西--如果场景和数学引用,等等,我会尝试用更简单的术语来表达。在进行联接时,只需知道所讨论的表之间的“关键”元素是什么。在大多数情况下,它将由一些公共密钥ID (customerID、orderID、itemID等)组成。

所以,从最简单的意义上说,如果你有一个由客户和订单组成的系统,然后做一些类似的事情

代码语言:javascript
复制
select o.orderID, c.CustomerID
   from Orders o, Customers c

没有加入将导致每一个订单,它将加入到每一个客户。因此,如果你有5个订单和3个客户,你将得到15个条目。

例如:

代码语言:javascript
复制
Orders                  |     Customers
OrderID  CustomerID     |     CustomerID  Name
1        A              |     A           Adam
2        B              |     B           Bill
3        C              |     C           Casey
4        B              |     
5        C              |     

你会得到

代码语言:javascript
复制
1-A
1-B
1-C
2-A
2-B
2-C
...
5-A
5-B
5-C

现在,请注意,两个客户每人有两个订单。由于您知道表之间的公共键,所以您将只获得以下5个条目

代码语言:javascript
复制
select o.orderID, c.CustomerID, c.Name
   from 
      Orders o
         JOIN Customers c
            on o.CustomerID = c.CustomerID

你就会得到所期望的..。

代码语言:javascript
复制
1 A Adam
2 B Bill
3 C Casey
4 B Bill
5 C Casey

当进入左联接(或右联接)时,前提仍然成立。始终应用已知的密钥关系。如果它们匹配,伟大(内部连接),如果不是(左连接),那么查询的左侧表中的记录仍将包括在即使没有匹配的右侧。我最近看到了一个联合澄清的例子,并将试图找到它。

现在根据这个基本的解释,考虑在您的系统中有3个表..。每个记录分别有5000、2000和3000条记录。如果在各个表之间不使用联接条件进行查询,则最终会得到30,000,000条记录,而且显然是一团糟。

因此,在编写查询时,我总是尝试以这种方式开始。查看表A中所有需要从表A中获取的表,直到表D中的某个表。我需要查看每个表之间的任何关系,在查询中始终有它们(前提是您需要所有的表)。一旦获得了表,现在得到了所需的所有列,然后考虑所需的条件。它们可以应用在where子句中(通常用于第一个表),但也可以在查询中包含其他别名。但是,这可能有点棘手,特别是在处理左联接时。如果您有适用于其中一个已连接表的特定条件,则可以在该级别添加逻辑“和”条件。

此外,在执行查询时,要养成为长时间命名的表使用别名以简化查询可读性的习惯。此外,在具有多个表的查询中始终限定table.column或alias.column。如果人们试图帮助你,而他们不知道哪一栏是在哪一张桌子上,那就很难理解.更别提在你接管或更新查询之后的人了。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25171664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档