实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从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写法:(下面是从两个表里查询,显示表v_goods里的所有字段,显示admin2表里的name字段作为添加人,显示表admin2表的name字段作为操作人) 多个表的查询都可按照下面三个例句进行编写sql

SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v where 1=1;

SELECT v.*,a.name aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ;

SELECT v.*,a.name aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;

mysql 多表查询实例讲解_mysql多表连接查询实例讲解相关推荐

  1. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  2. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

  3. SQL语法之分组函数,分组查询(进阶5)and连接查询(sql92语法进阶6)

    SQL语法体系学习笔记 SQL语法之基础查询(进阶1)and条件查询(进阶2) SQL语法之排序查询(进阶3)and常见函数(进阶4) SQL语法之分组函数,分组查询(进阶5)and连接查询(sql9 ...

  4. sql中什么时候用内连接查询,什么时候用外连接查询

    需要查找两张表同时存在的数据,使用内连接 需要查找两张表中一张表存在,另一张表不存在的时候使用左外链接 或 右外链接 内连接的查询结果都是满足连接条件的元组.但有时我们也希望输出那些不满足连接条件的元 ...

  5. mysql多表查询分页面_mysql多表联合查询分点经验给大家

    你的位置: 问答吧 -> MySQL -> 问题详情 mysql多表联合查询分点经验给大家 我在工作中天天研究zen cart的程序,那个叫人痛苦,最近比较痛苦的是经常碰见mysql多表联 ...

  6. mysql查询性能测试工具_MySQL性能测试工具MySQLslap使用实例详解

    原标题:MySQL性能测试工具MySQLslap使用实例详解 MySQLslap是MySQL(了解干货请戳:干货!超过500行的Mysql学习笔记)自带的基准测试工具,优点:查询数据,语法简单,灵活容 ...

  7. mysql连接查询作业答案_MySQL连表查询练习题

    1.建库 库名:linux50 字符集:utf8 校验规则:utf8_general_ci  create database linux4 charset utf8 default collate ...

  8. mysql 多表联查的效率_Mysql 多表联合查询效率分析

    1 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN ...

  9. mysql 表 视图 索引吗_Mysql多表查询, 视图,事务,索引,函数,go连接数据库

    1.1 今日目标 理解多表查询 理解子查询 能够创建视图 能够删除视图 能够查看创建视图的SQL语句 能够理解事务的作用 能够操作事务 理解索引的作用 能够创建索引 能够删除索引 知道常用的函数 了解 ...

最新文章

  1. Zabbix 监控Mysql 主从状态(Python脚本)
  2. ffmpeg编译 c++ 常量中有换行符
  3. little kernel中如何决定app目录下应该包含哪个app
  4. 25、UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
  5. mysql死锁影响_MySQL死锁系列-常见加锁场景分析
  6. HDU1573-模线性方程
  7. gdb define command
  8. 树算法系列之二:boosting,bagging,提升树
  9. Pytorch:Tensor(张量)的使用
  10. 爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
  11. MATLAB与STK互联39:动画控制、地面两个点的大圆距离计算
  12. 美术课程对计算机的好处,电脑艺术设计的美术基本功重要性论文
  13. TIOBE 7 月编程语言排行榜:C、Java 和 Python 争夺第一
  14. nodejs aes 加解密
  15. 《财富》封面文章:重新审视世界500强,它们又卷土重来了
  16. html5 游戏 限制,HTML5新技术让游戏解决了三个大问题
  17. L1-011~L1-015
  18. python + uiautomator2 中文使用细则
  19. 独特画风-rpgmaker复古像素游戏素材
  20. 2023年2月22日PMP®项目管理认证课程正式开课

热门文章

  1. 悟空CRM横空出世 为中小型企业献智慧
  2. Java接口和Java抽象类的认识
  3. HP 520 双系统 vista xp
  4. gc日志一般关注什么_记一次生产频繁出现 Full GC 的 GC日志图文详解
  5. python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
  6. 收敛标准对卷积核数量最优值的影响
  7. STM32 基础系列教程 50 – MbedTls
  8. 杨氏干涉的模拟的MATLAB仿真
  9. Python的输入指令、格式化输出、基本运算符
  10. Javascript各种事件汇总