SQLSERVER 的表连接

SQLSERVER 的表连接,第1张

概述所谓表连接,就是通过关联多张表,从而检索出需要的数据。实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的 *** 作。比如需要从A表找出限制性的条件来从B表中检索数据。不但需要分多表来 *** 作,而且效率也不高。比如书中的例子: SELECT FIdFROM T_CustomerWHERE FName='MIKE' 这个SQL语句返回2,也就是姓名

所谓表连接,就是通过关联多张表,从而检索出需要的数据。实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的 *** 作。比如需要从A表找出限制性的条件来从B表中检索数据。不但需要分多表来 *** 作,而且效率也不高。比如书中的例子:

SELECT FIDFROM T_CustomerWHERE Fname='MIKE'

这个SQL语句返回2,也就是姓名为MIKE 的客户的FID值为2,这样就可以到T_Order中检索FCustomerID等于2 的记录:

SELECT FNumber,FPriceFROM T_OrderWHERE FCustomerID=2

下面我们详细来看看表连接。表连接有多种不同的类型,有交叉连接(CROSS JOIN)、内连接(INNER JOIN)、外连接(OUTTER JOIN)。

(1)内连接(INNER JOIN):内连接组合两张表,并且只获取满足两表连接条件的数据。

SELECT o.FID,o.FNumber,o.FPrice,c.FID,c.Fname,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerID= c.FID

注:在大多数数据库系统中,INNER JOIN中的INNER是可选的,INNER JOIN 是默认的连接方式。

在使用表连接的时候可以不局限于只连接两张表,因为有很多情况下需要联系许多表。例如,T_Order表同时还需要连接T_Customer和T_OrderType两张表才能检索到所需要的信息,编写如下SQL语句即可:

SELECT o.FID,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerID= c.FIDINNERJOIN T_OrderTypeON T_Order.FTypeID= T_OrderType.FID

(2)交叉连接(CROSS JOIN):交叉连接所有涉及的表中的所有记录都包含在结果集中。可以采用两种方式来定义交叉连接,分别是隐式和显式的连接。

下面看看隐式的例子:

SELECT T_Customer.FID,T_Customer.Fname,T_Customer.FAge,T_Order.FID,T_Order.FNumber,T_Order.FPriceFROM T_Customer,T_Order

使用显式的连接则需要使用CROSS JOIN,例子如下:

SELECT T_Customer.FID,T_Order.FPriceFROM T_CustomerCROSSJOIN T_Order

(3)外连接(OUTTER JOIN):内部连接只获取满足连接条件的数据,而对于外部连接来说,主要是解决这样的一种场景。满足条件的数据检索出来,这个没有疑问,外部连接还会检索另一部分数据,那就是将不满足条件的数据以NulL来填充。先来看一下外连接的分类:左外部连接(left OUTER JOIN)、右外部连接(RIGHT OUTER JOIN)和全外部连接(FulLOUTER JOIN)。

I、左外部连接(left OUTER JOIN):前头也说了,将不满足条件的数据以NulL来填充。那么具体是哪些需要以NulL来填充呢,对于左外连接来说的话,连接条件当中,如果出现满足条件的左表的数据在右表中没有相应匹配时,需要把相应的右表字段填充NulL值。也就是说左外部连接的主体是左表,右表来配合。

SELECT o.FNumber,o.FCustomerID,c.FAgeFROM T_Order oleftOUTERJOIN T_Customer cON o.FCustomerID=c.FID

注:如果使用左外部连接的话,通过where语句能过滤其中不符合的数据

SELECT o.FNumber,c.FAgeFROM T_Order oleftOUTERJOIN T_Customer cON o.FCustomerID=c.FIDWHERE o.FPrice>=150

II、右外部连接(RIGHT OUTER JOIN):右外部连接与左外连部接相反,将会被填充NulL值的是左表的字段。也就是说右外部连接的主体是右表,左表来配合。

SELECT o.FNumber,c.FAgeFROM T_Order oRIGHTOUTERJOIN T_Customer cON o.FCustomerID=c.FID

注:同左外连接一样,可以使用where语句进行过滤

III、全外部连接(FulLOUTER JOIN):全外部连接是左外部连接和右外部连接的合集。也就是既包括左外部连接的结果集,也包括右外部连接的结果集。

SELECT o.FNumber,c.FAgeFROM T_Order oFulLOUTERJOIN T_Customer cON o.FCustomerID=c.FID

其结果相当于:

SELECT o.FNumber,c.FAgeFROM T_Order oleftOUTERJOIN T_Customer cON o.FCustomerID=c.FIDUNIONSELECT o.FNumber,c.FAgeFROM T_Order oRIGHTOUTERJOIN T_Customer cON o.FCustomerID=c.FID

总结

以上是内存溢出为你收集整理的SQLSERVER 的表连接全部内容,希望文章能够帮你解决SQLSERVER 的表连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)