一、概述

  在实际开发中,大部分情况下都不是在单表中进行数据操作,一般都是多张表进行联合查询。通常一个业务就会对应的有好几张表。MySql中的连接查询分为交叉连接,内连接,外连接三部分。其中交叉连接也叫笛卡尔积,也是内连接的一种。

二、连接查询常用方法 

   准备数据表:员工信息表(emp) 以及部门信息表(demp)

       

 1、交叉连接:

  也叫笛卡尔积。特点:不使用任何选择条件,直接把表1中的每个行与表2中的每个行进行一一匹配。因此该方式会产生很多重复数据,用的比较少。下面我们根据具体例子来进行详细解读。

  案例:查询员工以及部门信息

  select * from emp,demp;

  

  我们可以看到,由于没有限定条件,该结果就是两张表记录条数的乘积,这就是笛卡尔积现象。

 2、内连接

    顾名思义,就是指两张表中有交集的部分是需要的查询数据。

    

  内连接又细化分为等值连接、非等值连接以及自连接。

  2.1 等值连接

  等值连接的最大特点就是:条件是等量关系的

  等值连接的语法格式:select 字段名 from 表1 inner join 表2 on 消除笛卡尔积的连接条件A=B;

  案例:根据部门id查询员工所对应的部门名称

  select name,dname from demp inner join emp where demp.dpmp = emp.dpmp;

  

  2.2 非等值连接

  顾名思义,非等值连接的最大特点就是:条件不是等量关系的

  非等值连接的语法格式:select 字段名 from 表1 inner join 表2 on 消除笛卡尔积的连接条件;

  案例:查询部门编号在10-20之间的员工信息以及对用的部门信息

  select * from emp inner join demp where emp.dpmp=demp.dpmp and demp.dpmp between 10 and 20;

  

  2.3 自连接

  自连接就是把一张表看成两张表,自己连接自己。通过起别名的方式, 将 1 张表变为 2 张表, 通过对应字段的对应关系, 进行条件比对, 实现连接查询。

  案例:略过。

  3、外连接

  外连接分为左连接和右链接。

  3.1 左连接:

  查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充 。

  左边是主表,内容全显示,右边是从表。

  

  案例:查询员工以及部门的全部信息

  select * from emp left join demp on emp.dpmp = demp.dpmp;

  

  3.2 右连接:

  查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充

  右连接右边的表是主表,左边的是从表。

  

  案例:查询各个部门对应的员工信息

  select * from demp left join emp on emp.dpmp = demp.dpmp;

  

三、总结 

  1,本质上来说,连接就是把各个表中的记录都取出来依次进行匹配,并把匹配后的组合发送给客户端。如果不加任何过滤条件,产生的结果集就是笛卡尔积。

  2,连接查询分为内连接和外连接以及交叉连接,其中外连接又可以分为左外连接和右外连接。

  3,内连接和外连接的根本区别是:在驱动表中的记录不符合on子句中的连接条件时,内连接不会把该记录加入到最后的结果集中,而外连接会

  拓展:连接查询的优化,下期分享。

最新文章

  1. MvcPager使用的Demo(同步分页)
  2. Orchard源码分析(1):Orchard架构
  3. opengl基础学习专题 (二) 点直线和多边形
  4. [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
  5. Android异步任务
  6. 3个同一行div的摆放div
  7. redis安装异常的解决的办法
  8. bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp
  9. Win2003及2008R2重启自动登录设置方法
  10. MarkDown语法学习
  11. Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包
  12. YAML 语言教程
  13. 【struts2】<package>的配置
  14. 在windows 2008 R2中SQl Server 2008中代理启动失败的一个原因总结
  15. JavaIO系统
  16. java开发常用的Linux命令
  17. 原生Orcale数据库连接
  18. 【洛谷5288】[HNOI2019] 多边形(二叉树模型)
  19. 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
  20. ExtJS 4.1 TabPanel动态加载页面并执行脚本【转】

热门文章

  1. angular变更检测相关文章
  2. mysql show操作
  3. GitHub Pages 站点建设
  4. Slf4j的MDC初尝试
  5. JWT签发与解析
  6. setContentView源码分析
  7. KingbaseES V8R6C5B041手工创建集群测试案例
  8. spark 执行spark-example
  9. 读完 RocketMQ 源码,我学会了如何优雅的创建线程
  10. JavaScript 闭包 —— { }