什么是SQL联结?怎么理解SQL联结?

SQL语句中的联结:
这是联结的第一种简单方式:等值联结

SELECT vend_name,prod_name,prod_price
FROM Vendors,Products
WHERE Vendors.id = Products.vend_id;


这里实际发生了什么?

1 将第一个表的每一行与第二个表的每一行进行匹配

2 按where对这些匹配的行进行过滤,筛选出符合条件的行


如果没有where子句又会发生什么呢?

将第一个表的每一行和第二表的每一行配对
不管逻辑上是否能匹配

其结果是
检索出行的数目是第一个表的行数乘以第二个表中的行数

这个结果叫笛卡尔积

加上where子句是什么效果呢?

将第一张表的每一行和第二张表中有共同字段且共同值的那些行匹配

能匹配的这两行就拼接成一个虚拟行
结果是虚拟行的列数是两张表的列数之和

 
保证联结必须有where子句
同时where子句必须正确!!

联结第二种方式:内联结

SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
ON Vendors.id = Products.vend_id;

1 这种方式虽然语法上麻烦但是清晰的展示了过程

  也就是
  先将第一个表的每一行与第二张表的每一行进行匹配(求笛卡尔积)
  然后再按给定的条件筛选出符合条件的行

  这实际是计算机的工作方式

  人比较聪明
  人可能这样工作:
  用第一章表的每一行只匹配出第二张表的符合条件的那些行
  以此类推,直到最后一行
  
  可惜这种方式计算机做不到

  为什么比较人类和计算机的方式呢
 
  没发现比较了之后,更容易理解计算机的方式呢?

猜你喜欢

转载自blog.csdn.net/weixin_42204641/article/details/81461862