sql表连接查询使用方法(sql多表连接查询)

日期:2020-04-29编辑作者:数据库

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

复制代码 代码如下:SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,T_Order.FId, T_Order.FNumber, T_Order.FPriceFROM T_CustomerCROSS JOIN T_Order

其结果相当于:

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

复制代码 代码如下:SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

在使用表连接的时候可以不局限于只连接两张表,因为有很多情况下需要联系许多表。例如,T_Order表同时还需要连接T_Customer和T_OrderType两张表才能检索到所需要的信息,编写如下SQL语句即可:复制代码 代码如下:SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FIdINNER JOIN T_OrderTypeON T_Order.FTypeId= T_OrderType.FId

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

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

下面看看隐式的例子:复制代码 代码如下:SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,T_Order.FId, T_Order.FNumber, T_Order.FPriceFROM T_Customer, T_Order

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

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

复制代码 代码如下:SELECT FNumber,FPriceFROM T_OrderWHERE FCustomerId=2

复制代码 代码如下:SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oFULL OUTER JOIN T_Customer cON o.FCustomerId=c.FId

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

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

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

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

复制代码 代码如下:SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdWHERE o.FPrice=150

内连接:内连接组合两张表,并且只获取满足两表连接条件的数据。复制代码 代码如下:SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FId

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

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

复制代码 代码如下:SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdUNIONSELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

复制代码 代码如下:SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

本文由www.129028.com金沙发布于数据库,转载请注明出处:sql表连接查询使用方法(sql多表连接查询)

关键词:

SQL Server 2000的安全配置

SQLserver2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然。这里,我...

详细>>

如何查看某个查询用了多少TempDB空间www.129028.com金沙

DECLARE @read BIGINT, @write BIGINT; SELECT @read = SUM(num_of_bytes_read), @write = SUM(num_of_bytes_written) FROM tempdb.sys.database_files AS DBFJOI...

详细>>

浅析SQL语句中GROUP BY的用法

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM这个字段分组,那其他字...

详细>>

微软总是试图使它的软件安装尽可能地简单顺www.129028.com金沙

如果你没有特意记录安装日期,那么有没有办法从SQL Server里查询到呢?想想我们在安装的时候,肯定会有Windows认证登...

详细>>