SQL SERVER 入门进阶教程——联结表

本文介绍了SQL中的联结表概念,强调了关系数据库中联结表的重要性,如减少数据冗余和便于信息更新。通过示例详细讲解了如何创建联结,包括内联结的使用和多表联结的操作,强调了在联结表时WHERE或ON子语句的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

联结表


提示:学习联结表前先熟悉一下什么是联结表,为什么使用联结表

其实SQL最强大的功能之一就是能在数据查询的执行重使用联结表。这里还要理解一下关系数据库,关系数据库就是设计时将信息分解成多个表,一类数据一个表,各个表通过某些共同的值相互关联。举个栗子:比如要设计一个数据库用来存储供应商信息和供应商产品信息,如果要是使用一个表是可以是实现的就是会出现很多重复数据。那么使用关系表的话就可以使用两个表实现,一个表存储供应商信息,一个表存储产品信息,每个供应商占一行,使用具有唯一标识,此标识就被称为主键,产品信息每行都有与其一致的主键,这样就可以通过关联表的方式将两个表联结起来,这样做的好处就是:

  • 信息不重复,不会浪费时间和空间
  • 如果信息变动,可以更改单表记录,其他表数据不需变动
  • 单表数据一致,方便处理数据
注意:联结表并不是数据库实际存在的物理表,他只在执行查询期间存在。

1.1 创建联结

创建联结非常简单,只要指定要联结的所有表以及联结他们的方式即可
下面我们来看一个例子:

SQL语句:

SELECT vend_name,prod_name,prod_price 
From Vendors,Products 
WHERE Vendors.vend_id=Products.vend_id

输出结果

SQL语句分析:SELECT语句与前面所有语句一样要指定检索的列,这里最大的区别就是所指定的两列(prod_name,prod_price)在一个表中,而第三列(vend_name)在另一个表中。我们再来看FROM子语句,与以前的SELECT语句不一样的是,这条语句的FROM子语句列出两个表,Vendors和Products,他们是这条语句联结表的名字,这条语句意思是将Vendors表中的vend_id与Products表中的vend_id匹配起来。

重点了解:

  • 联结表WHERE条件语句中必须限定列名,就是要加上表名,否则会有歧义
  • 联结表时必须使用条件子语句,WHERE或ON,没有使用条件子语句返回的结果位笛卡尔积,检索出的行的数目将是第一个表中的行数乘以第二个表的行数

1.2 内联结

我们目前使用的联结都称为内联结,它使用关键字INNER JOIN,他的使用稍微有点不同,下来我们看一个例子:

SQL语句:

SELECT vend_name,prod_name,prod_price 
From Vendors  INNER JOIN Products 
ON Vendors.vend_id=Products.vend_id

输出结果:

SQL语句分析:

这条语句中使用的SELECT与前面的SELECT语句相同,但FROM子语句不同,这里两个表之间的关系时以INNER JOIN指定的部分FROM子语句。这里使用这种语法,联结条件用特定的ON子语句而不是WHERER子语句。

1.3 多表联结

SQL并不限制一条SELECT语句中可以联结表的数量,都是相同的基本规则,首先列出所有表,然后定义表之间的关系。下来我们看一个例子:

SQL语句:

SELECT vend_name,prod_name,prod_price,quantity
From OrderItems,Vendors,Products 
WHERE Vendors.vend_id=Products.vend_id
AND OrderItems.prod_id=Products.prod_id
AND order_num=20007

输出结果:


总结:

联结时SQL中一个最重要的特性,内联结(INNER JOIN)也是常用的联结,使用联结时需要遵循基本规则,先用FROM列出所有表,然后使用WHERE或ON定义表之间的关系,至于什么时候使用INNER JOIN这个遵循方便原则。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值