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

本文介绍了SQL Server中的高级联结表概念,包括内联结、外联结(LEFT JOIN、RIGHT JOIN)和全联结。通过实例展示了如何使用别名简化查询,以及在外联结中如何处理没有关联行的行。同时,解释了带有聚集函数的联结操作,如COUNT函数在联结查询中的应用。总结指出,使用联结时应提供联结条件,避免笛卡尔积,并且可以灵活结合不同类型的联结。

高级联结表


迄今为止我们所使用的只是内联结的简单联结,但SQL除了内联结还有外联结(OUTER JOIN),当然也有人叫左联结、右联结以及全联结,其实都是一个意思,只要理解了内联结和外联结,左右联结就不难了,这也使最常用的高级联结了。

注意:在学习高级联结前,我们先来学习一个特殊功能表别名,故名思意就是给表起个别名,这样可以在一条SELECT中多次使用同一个表,别名只是在查询中使用,不会返回

1.1 使用别名

下面我们来看一个例子:

SQL语句:

SELECT cust_name,cust_contact
From Customers AS C,Orders AS O,OrderItems AS OI 
WHERE C.cust_id=o.cust_id
AND OI.order_num=o.order_num
AND prod_id='RGAN01'

输出结果

SQL语句分析:可以看到FROM子语句中的三个表全都有别名,Customers AS C 使用C作为别名,如此等等,这样的话就可以省略Customers了,别名不仅可以在SELECT子语句中使用,还可以在WHERE、ORDER BY中使用。

1.2 外联结

许多联结都是将一个表中的行与另一个表中的行进行关联,但有时候需要包含那些没有关联行的那些行,这些联结包含了那些在相关表中没有关联行的行的联结就叫外联结,听起来不叫拗口,也不容易理解,没关系用心体会下,下面的例子:

SQL语句:

SELECT Customers.cust_id,orders.order_num
From Customers LEFT OUTER JOIN Orders
ON Customers.cust_id=ORDERS.cust_id

输出结果:


SQL语句分析:

可以看到使用外联结时筛选出了一条order_num为NULL的数据,这里其实可以这样理解,LEFT是以匹配语句的左侧数据表为准,将左侧表中的所有数据筛选出,出现NULL就意味着这条数据并不满足筛选条件,当然RIGHT也就是以右侧表为准,上局语句中的左侧表就是Customers了。

注意:

  • 说实话这地方确实难以理解,有时候在实际情况中也是难以取舍
  • 内联结INNER JOIN也可使用LEFT 和RIGHT,内联结使用LFET和RIGHT时,可以省略INNER,直接用LEFT JOIN即可
  • 外联结OUTER JOIN在使用的使用必须配LEFT和RIGHT一起使用
  • 这里可以说一下我的理解供大家理解,内联结就是很严谨匹配,只有符合筛选条件的才能被筛选出,外联结就是可以筛选出那些不满足筛选条件的数据,LEFT和RIGHT就是体现哪侧优先原则,FULL就更好理解了就是全部

1.3 带聚集函数的联结

聚集函数使用来汇总数据的,迄今为止我们局的聚集函数都是从一个表中汇总数据,但是这些函数也是可以与联结一起使用的。下来我们看一个例子:

SQL语句:

SELECT cUSTOMERS.cust_id,COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id

输出结果:

sql语句解析:这条SELECT语句是使用INNER JOIN将Customers和Orders表相互关联。Group BY 子语句按顾客进行分组数据,函数条用COUNT对每个客户的订单技术,并将它们作为num_ord返回

总结:

  • 一般我们使用的内联结,但是用外联结也有效。
  • 使用联结时应总是提供联结条件,否则会得出笛卡尔积
  • 在一个联结中可以包含多个表,甚至可以对每个联结采用不同的联结类型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值