【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结
一、概述
在实际开发中,大部分情况下都不是在单表中进行数据操作,一般都是多张表进行联合查询。通常一个业务就会对应的有好几张表。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子句中的连接条件时,内连接不会把该记录加入到最后的结果集中,而外连接会
拓展:连接查询的优化,下期分享。
【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结的更多相关文章
- 【博学谷学习记录】超强总结,用心分享|Linux修改文件权限方法总结
一.介绍 linux中"一切皆文件".每个文件都设定了针对不同用户的访问权限. 文件权限主要针对以下三种对象: 属主:拥有者 属组:所属的组 其他人:不属于上述两类 二.文件权限 ...
- Java 学习(22):Java MySQL 连接
Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mys ...
- 原创 记录一次线上Mysql慢查询问题排查过程
背景 前段时间收到运维反馈,线上Mysql数据库凌晨时候出现慢查询的报警,并把原始sql发了过来: --去除了业务含义的sql update test_user set a=1 where id=1; ...
- SQL学习笔记四(补充-2-1)之MySQL SQL查询作业答案
阅读目录 一 题目 二 答案 一 题目 1.查询所有的课程的名称以及对应的任课老师姓名 2.查询学生表中男女生各有多少人 3.查询物理成绩等于100的学生的姓名 4.查询平均成绩大于八十分的同学的姓名 ...
- C语言学习笔记 (008) - C语言字符串操作总结大全(超详细)(转)
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...
- MyBatis学习总结(12)——Mybatis+Mysql分页查询
package cn.tsjinrong.fastfile.util; /** * @ClassName: Page * @Description: TODO(分页组件的父类,用来封装分页的 通用 ...
- JavaEE精英进阶课学习笔记《博学谷》
JavaEE精英进阶课学习笔记<博学谷> 第1章 亿可控系统分析与设计 学习目标 了解物联网应用领域及发展现状 能够说出亿可控的核心功能 能够画出亿可控的系统架构图 能够完成亿可控环境的准 ...
- 2020年度钻石C++C学习笔记(2)--《博学谷》
2020年度钻石C++C--<博学谷> 1.以下标示符中命名合法的是A A.__A__ B.ab.c C.@rp D.2Y_ 2.设 a 和 b 均为 double 型变量,且a=5.5. ...
- Android课程设计——博学谷1.0
本文讲述了如何应用大三下学期智能移动终端开发技术课程所学知识,完成包含服务器端.客户端程序的应用——博学谷登录模块的开发,结合java语言基本知识,例如:字符串.列表.类.数据库读写等,设计.实现一个 ...
随机推荐
- YII服务定位器依赖注入
<?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 18:33 * 服务定位器依赖注入 */ namespace fronten ...
- 基于 Next.js实现在线Excel
如果要从头开始使用 React 构建一个完整的 Web 应用程序,需要哪些步骤? 这当然不像把大象装进冰箱那么简单,只需要分成三步:打开冰箱,拿起大象,塞进冰箱就好. 我们需要考虑细节有很多,比如: ...
- 万答#5,binlog解析出来的日志为何无法恢复
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题描述 问题来自一位群友,简单说就是用 mysqlbinlog 工具读取 bi ...
- Git 05 文件操作
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 文件的四种状 ...
- python中的画图神器——turtle模块
turtle库的基础命令介绍(1)画布画布cancas是绘图区域,可以设置它的大小和初始位置 turtle.screensize(1000,600,'red') 大小的设置 turtle.setup( ...
- tomcat服务器和servlet的基本认识
今天下午在知乎看见了一个老哥的文章,写的是servlet写的很好,以前我对Javaweb方面的理解比较混乱今天看了这位老哥的文章后受益匪浅,知乎名叫:bravo1988 里面也有讲servlet和s ...
- C# for循环创建多线程
这里仅讨论Task多线程编程,不讨论其他可以使用多线程的情况,比如Beginxxx,Thread等 一般情况下,如果有多个线程需要同是启动,且每个线程中使用了集合collection中的序号. 比如参 ...
- JVM之HotSpot虚拟机是如何发起内存回收的? 转载
1.背景 在上一节中,我们掌握了垃圾收集的一些算法,也弄明白了分代回收的原理, 那么HotSpot虚拟机是如何发起内存回收的? 2.如何找到GC Roots根节点(枚举根节点) 从可达性分析中GC R ...
- Android平台Camera2数据如何对接RTMP推流到服务器
1. Camera2架构 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用 ...
- 变废为宝: 使用废旧手机实现实时监控方案(RTSP/RTMP方案)
随着手机淘汰的速度越来越快,大多数手机功能性能很强劲就不再使用了,以大牛直播SDK现有方案为例,本文探讨下,如何用废旧手机实现实时监控方案(把手机当摄像头做监控之用): 本方案需要准备一个手机作为采集 ...