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

时间:2024-01-22 12:25:39 

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


SELECT FId
FROM T_Customer
WHERE FName='MIKE'

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


SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

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

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


SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

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

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


SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON 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.FPrice
FROM T_Customer, T_Order

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


SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN 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.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

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


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

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


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

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

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


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

其结果相当于:


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

标签:sql表连接查询,sql多表连接查询
0
投稿

猜你喜欢

  • Django中session登录验证操作指南

    2023-12-12 03:34:43
  • 详解python读取matlab数据(.mat文件)

    2021-03-04 19:29:29
  • 配置python连接oracle读取excel数据写入数据库的操作流程

    2024-01-14 02:30:31
  • SQL2008中通过DBCC OPENTRAN和会话查询事务

    2024-01-12 20:15:20
  • 如何用python获取到照片拍摄时的详细位置(附源码)

    2023-04-22 05:04:18
  • js控制文本框禁止输入特殊字符详解

    2024-04-25 13:07:03
  • Git分支管理策略

    2022-02-18 13:11:38
  • Python的Flask框架中实现分页功能的教程

    2022-02-22 04:41:09
  • Django后端接收嵌套Json数据及解析详解

    2021-04-24 20:11:38
  • Python自动化办公之PPT段落的使用

    2023-07-10 07:09:24
  • vue通知提醒消息举例详解

    2024-05-10 14:17:03
  • 将数据插入到MySQL表中的详细教程

    2024-01-12 22:01:21
  • mssql server .ldf和.mdf的文件附加数据库的sql语句

    2024-01-14 21:56:13
  • 布同 统计英文单词的个数的python代码

    2023-12-27 09:19:22
  • SQLServer 存储过程简介与使用方法

    2009-07-07 14:06:00
  • Flask URL传参与视图映射的实现方法

    2021-05-10 12:31:06
  • ASP 写的判断 Money 各个位值的函数

    2008-04-13 06:36:00
  • 如何解决国外空间显示乱码问题

    2007-11-18 14:28:00
  • go日志库中的logrus

    2023-07-21 13:48:02
  • Python中的装饰器使用

    2023-05-25 13:14:09
  • asp之家 网络编程 m.aspxhome.com