sql笛卡尔积和自然连接

SQL中的笛卡尔积

AxB。可以简单理解为两个集合的乘积。

SQL语法

SELECT * FROM tb1 CROSS JOIN tb2;
-- 等价于
SELECT * FROM tb1, tb2;
-- 等价于
SELECT * FROM tb1 INNER JOIN tb2; -- 这是内连接

**CROSS JOIN不能加ON。**

从行和列两个维度来观察上例笛卡尔积的结果集可以发现:

  • 结果集的行是表1的行数乘表2的行数(2x3)

  • 结果集的列是表1的列加表2的列(3+4)

SQL中的笛卡尔积可以与SQL内连接相互转化。笛卡尔积加查询条件等价于内连接查询。

SELECT * FROM tb1, tb2
WHERE tb1.id = tb2.id;
-- 等价于
SELECT * FROM tb1 INNER JOIN tb2;
  • 从结果上来看:内连接不加关联条件的结果就是笛卡尔
  • 从执行效率和底层实现来看,内连接和笛卡尔积有区别,内连接会先通过on条件过滤两张表的数据,再取交集;笛卡尔积会先将两个表取乘积再过滤数据,所以理论上内连接效率更高
  • 笛卡尔积在表数据量大的情况下查询结果会倍增,实际应用中要加查询条件过滤数据
  • 怎么理解笛卡尔积中的查询条件,可以将笛卡尔积sql转化成内连接sql去理解

SQL中的自然连接

特殊的等值连接,要求多个表有相同的属性字段,条件为相同的属性字段值相等,且再将表中重复的属性字段去掉,称为自然连接。

SELECT * FROM tb1 NATURAL tb2;

sql笛卡尔积和自然连接_第1张图片

(1条消息) SQL 中的笛卡尔积_笛卡尔积sql_deelless的博客-CSDN博客

SQL连接的理解和使用(内连接:自然连接&等值连接,外连接:左连接&右连接&全外连接)_sql自然连接_海蒂°的博客-CSDN博客

你可能感兴趣的:(数据库,sql,数据库)