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


猜你喜欢
- 本文讲述了关于HTML5的data-*自定义属性。分享给大家供大家参考,具体如下:一、关于html元素的特性1.html元素都存在一些标准的
- 题目描述1275. 找出井字棋的获胜者 - 力扣(LeetCode)A 和 B 在一个 3 x&nb
- 本文为大家分享了python实现外卖信息管理系统的具体代码,供大家参考,具体内容如下一、需求分析 需求分析包含如下:1、问题描述 以外卖信息
- VuePressvuepress是尤大大4月12日发布的一个全新的基于vue的静态网站生成器,实际上就是一个vue的spa应用,内置webp
- 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表。javascript创建对象时采用了写时复制
- 1 , javascript字符集:javascript采用的是Unicode字符集编码。为什么要采用这个编码呢?原因很简单,16位的Uni
- 下面列出Python正则表达式的几种匹配用法:此外,关于正则的一切http://deerchao.net/tutorials/regex/r
- 调取摄像头的实现import numpy as npimport cv2cap = cv2.VideoCapture(0)#参数为0时调用本
- 为了实现将RAW格式照片一键改变整体风格,且有多种风格选择,我们可以使用神经风格迁移技术。神经风格迁移是一种基于深度学习的方法,可以将一张图
- 下载地址官方下载:CUDA和CUDNN.安装CUDA安装之前,建议关掉360安全卫士双击cuda_11.0.3_451.82_win10.e
- 写这篇博客主要是因为在修改DataFrame列值的时候经常遇到bug,但到目前还没把这种错误复现出来。DataFrame是Pandas中的主
- 今天有人问我一个问题:如何通过js脚本复制网页上的一个表格?看起来似乎比较有难度,不过还是搞定了,顺便把解决这个问题的过程记录下来,希望能对
- vue开发依赖的相关配置Vue SSR 指南今天先做客户端方面的配置,明天再做服务端的部分。那么马上开始吧~修改部分代码脚手架生成的代码肯定
- 1.VsCode官方插件地址:https://marketplace.visualstudio.com/vscodehttp://code.
- Residual BlockResNet中最重要的组件是残差块(residual block),也称为残差单元(residual unit)
- 热加载是指可以在不重启服务的情况下,保存后即可让更改的代码生效的一种开发模式。热加载可以显著的提升开发和调试的效率,有了热加载后,说明你不用
- SQL Server数据库查询优化的常用方法总结:本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。技巧一:问
- 空间关系变化始于相遇,所以交点是一切的核心。相交判定首先考察一束光线能否打在某个平面镜上。光线被抽象成了一个列表[a,b,c],平面镜则被抽
- 你一定很熟悉Youtube了,知道它是一个视频分享网站。是的,youtube目前十分流行,你也许会常常访问。这里有一些关于youtube u
- 如何清除Vbscript惹出来的中文乱码? <script language=vbscript runat=s