数据库中多表联查可以通过连接运算实现,即将多张表通过主外键关系关联在一起进行查询,分为非等值查询和等值查询两大类。

一.非等值查询:

语法:

select * from 表1,表2

此查询方式的实质是笛卡尔积的应用,即表1有x行,表2有y行,得到的结果就是x*y行。因此非等值查询在应对数据量较小的情况时可以选择,但当数据量庞大时,采用非等值查询方式会造成大量的数据,从而降低效率,因此不推荐使用非等值查询。

二.等值查询

语法:

select * from 表1,表2 where 表1.字段1 = 表2.字段2....

等值查询是通过where 后面的判断条件去获取自己需要的数据,可以分为以下三种:

1.左连接: left join

select * from 表1 left join 表2 on 表1.字段1 = 表2.字段1

以left join 左边的表(表1)为主表,从左表中返回所有的记录,即便在右表(表2)中没有匹配的行。如下图所示:left join取得就是左表红色区域的数据

取左表中独有的数据:on 的后面,根据条件进行过滤筛选,再生成临时查询结果。where 的后面,从临时查询结果中再根据条件进行筛选,生成最终结果。

select * from A left join Bon A.id = B.id where B.id is null

如下图:

2.右连接:right join


select * from 表1 right join 表2on 表1.字段1 = 表2.字段1

与 left join 相对应,右边的表(表2)为主表,从右表中返回所有的记录,即便在左表(表1)中没有匹配的行。如下图

取右表独有的数据:

select * from A right join B on A.id = B.id where A.id is null

如下图:

3.交集:inner join


select * from A inner join B on A.id = B.id

组合两个表中的记录,只要在公共字段中有相符合的值,都会被取到,即在表中至少一个匹配时,就会返回记录,实际结果为两张或多张表的交集。

注意: inner join不会统计空值

4.并集:union与union all

union与union all都是求多表的并集,但两种方式得到的结果截然不同,具体如下。

union 语法:

select * from A union (select * from B)

取得是下图中红色区域的数据:

可以看到,union合并的是结果集,不区分来自于哪一张表,所有可以合并多张表查询出来的数据,但是会过滤掉重复的数据。

注意:

1.当表列名不一致时,会以第一张表的表头为准

2.不同数据类型可以并到一个列中

3.如果查询的表的列数量不相等是,就会报错

4.每个字句中的的排序是没有意义的,mysql在进行合并的适合会忽略掉,如需要排序,可以对合并后的整张表进行排序union all 语法:


select * from A union all (select * from B)

取得是下图中红色区域的数据:

可以看到,union all 得到的结果也是结果的并集,但是不会把重复的数据过滤掉,而是全部显示出来。

联表查询中on和where的区别

1.on在内连接中可省略,外连接不可省略;

2.on在内连接中执行效果和外连接执行效果不同;left join...on查询不能过滤掉左表中的数据,而内连接on查询可以过滤掉全局数据。

3.外连接中on和where不同,on筛选笛卡尔积过滤条件,where筛选具体业务

MySql 数据库多表链接查询的方式相关推荐

  1. java JDBC连接MySQL数据库调用存储过程进行查询

    java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...

  2. mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...

    [单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...

  3. kettle 查询数据库写入文件_怎么连接数据库-详解如何用kettle连接mysql数据库并导出sql查询结果...

    概述 今天主要介绍下kettle怎么去连接mysql数据库及导出sql查询结果. 1.数据库链接驱动 如果没有安装对应的数据库驱动,在数据库连接的过程中,可能会报某个数据库连接找不到的异常,因此需要下 ...

  4. python操作数据库的几种方法_python对mysql数据库操作的三种不同方式

    原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...

  5. python查询mysql数据库_python针对mysql数据库的连接、查询、更新、删除操作示例...

    本文实例讲述了python针对mysql数据库的连接.查询.更新.删除操作.分享给大家供大家参考,具体如下: 连接 一 代码 import pymysql # 打开数据库连接 db = pymysql ...

  6. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

  7. mysql数据库的xml模糊查询

    mysql数据库的xml模糊查询 mybatis框架的xml中<= , >=解析会出现问题,编译报错,所以需要转译 正常的是使用%xxxx% ,现在需要使用 concat('%',#{xx ...

  8. mysql数据库导入数据的几种方式

    mysql数据库导入数据的几种方式 适用于大量数据的导入 一.excel方式导入 1.将需要的数据放到表格中,需要注意表格中的列必须与要导入的表保持一致 2.导入步骤 二.csv文件导入 1.一般拿到 ...

  9. mysql数据库删除数据的三种方式:

    mysql数据库删除数据的三种方式: delete from table where 直接删除表中的某一行数据,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.所以delete相 ...

最新文章

  1. Can I compile and run Dx11Shader for Maya 2015 on my side?
  2. miniconda安装,及channels配置,安装其他软件
  3. 高盛:人工智能报告中文版(45页)
  4. 朱翊:从鼎级云珍冰箱看卡萨帝的百年品牌逻辑
  5. 【深度学习】图像自动处理工具SimpleITK的使用(Python)
  6. theme vscode 护眼_VS code 豆沙绿护眼主题
  7. 杭电1232 畅通工程
  8. 如何用堆栈和循环结构代替递归调用--递归转换为非递归的10条军规
  9. Google Maps API 代码
  10. MySQL笔记-Windows安装MySQL5.7
  11. html5设置播放按钮,HTML5 Flowplayer的附加播放按钮
  12. 蓝绿部署、滚动部署、灰度发布、金丝雀发布-概念介绍---应用部署001
  13. javascript 模块化(一)——SeaJS
  14. IIS下发布关于Excel导入导出时遇到的问题集锦(转)
  15. jquery操作复选框(checkbox)
  16. 数据--第52课 - 哈希表及其实现
  17. 2020-07-16-----web前端开发中用到的PS基础操作(PS取色、PS测量、PS切片)
  18. java突然无法加载主类_JAVA之中出现无法加载主类的情况解决方法
  19. CMMI 项目计划实战
  20. DataNucleus JDO基础入门

热门文章

  1. '/',‘\\’与‘\’的区别
  2. 深信服服务器装系统,深信服新上网行为管理系统安装调试手册..doc
  3. wshop微信商城数据库结构简要解析
  4. 一个苏州IT人的5年挨踢经历-------未来篇
  5. commbean java_Oracle Java 7 JmxMBeanServer类远程代码执行漏洞
  6. Linux/Unix开发之make和makefile详解
  7. Linux下黑白棋c语言程序,黑白棋(C语言源程序)
  8. 每天实现一个小特效:百度新闻导航栏特效
  9. CryEngine的maya插件安装
  10. 安卓巴士Android开发者门户