SQL之连接表

本文详细介绍了SQL中的内联接、自然连接和外连接,阐述了为何使用多个表以及如何通过JOIN操作避免数据冗余,提升查询性能。通过实例说明了如何利用WHERE子句进行精确匹配,以及表别名在简化SQL语句中的应用。
摘要由CSDN通过智能技术生成

SQL最强大的功能之一就是能够使用联结(join)表。
看个实际例子。假设我们有一个产品信息表,主要包括产品ID,供应商ID,价格等信息,还有一个供应商表,主要包括供应商ID,供应商地址,联系方式等。那么为啥要把供应商信息单独放一个表呢?

优点如下:
1.同一供应商生产的每个产品,其供应商信息是相同的,在产品信息表中重复记录这些信息浪费空间和时间;
2. 假设供应商信息变动,比如电话等,只需要在供应商表中修改相应的一次就够了;
3. 不重复使得数据一致性好,出错概率小。

SELECT联结表如下:

select vend_name,prod_name
from vendors,products
where vendors.vend_id=products.vend_id;

注意,vend_name,prod_name来自两个不同的表,所以from需要两个表。where子句很重要,使结果只包含给定条件的行。没有where条件,第一个表的每一行将与第二个表每一行配对,称为笛卡尔积,也就是说,表1有M行,表2有N行,最终结果为M*N行,这显然不符合我们的预期。
而where条件是隐含在语义中的,我们要查询一件产品的名字及其供应商名字,而两个表公有的属性是供应商的ID,因此需要通过这个来配对,不需要别的供应商的名字。

上面这种联结也叫内联结或等值联结。
等同于下面的语法

select vend_name,prod_name
from vendors INNER JOIN products
ON vendors.vend_id=products.vend_id;

当然可以联结多个表,表越多,性能越差。

并且,表也可以使用别名,主要是为了缩短SQL语句,如下

select vend_name,prod_name
from vendors AS V INNER JOIN products AS P
ON V.vend_id=P.vend_id;

但是,表别名只用于查询,不返回客户端,这和列别名有区别,
并且,别名可以帮助同一个表逻辑上查询为两个表。用自联结代替子查询。

自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。
左连接LEFT JOIN的含义就是求两个表A表和B表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表A表中剩余的记录。
其他的类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值