【博学谷学习记录】超强总结,用心分享|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语言基本知识,例如:字符串.列表.类.数据库读写等,设计.实现一个 ...
随机推荐
- git和提交分支
实习到今天,已经开始做项目一段时间了,当然只是实习生的个人项目. 项目是导师发在git上面的,要求我们用git的PR提交 可是我不会啊...git仅仅是简单的个人提交总的项目到仓库里,什么新建分支,p ...
- .NET性能优化-使用SourceGenerator-Logger记录日志
前言 在现在许许多多的应用系统中,日志非常关键,它即是排查问题的强力工具,也是程序员居家旅行工作甩锅必备良品. 在团队中编码中,我们都要求对于那些会变更数据的接口.调用第三方的接口记录请求和响应参数, ...
- 【AGC】引导用户购买提升用户留存率
借助AGC的云数据库.云托管.应用内消息.App Linking等服务,您可以给不同价值用户设置不同的优惠套餐活动,引导用户持续购买,增强用户黏性.判断用户价值,发送营销短信,引导用户参与营销活动,提 ...
- python推导式与海象运算符
背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...
- React报错之JSX element type does not have any construct or call signatures
正文从这开始~ 总览 当我们试图将元素或react组件作为属性传递给另一个组件,但是属性的类型声明错误时,会产生"JSX element type does not have any con ...
- 在使用amoeba连接数据库时,报错java.lang.Exception: poolName=slaves, no valid pools
项目场景:Mysql 实现数据库读写分离 搭建3台MySQL服务器,完成主从复制,搭建一台amoeba服务器,完成MySQL的读写分离 问题描述: 问题1. 在服务搭建完毕后,利用客户机连接amoeb ...
- 基于vue的脚手架开发与发布到npm仓库
什么是脚手架 在项目比较多而且杂的环境下,有时候我们想统一一下各个项目技术栈或者一些插件/组件的封装习惯,但是每次从零开发一个新项目的时候,总是会重复做一些类似于复制粘贴的工作,这是一个很头疼的事情, ...
- Excelize 发布 2.3.0 版本, Go 语言 Excel 文档基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- linux之间上传下载--SCP
1.远程拷贝文件 [root@rhel8-client01 yum.repos.d]# scp root@192.168.72.149:/etc/yum.repos.d/* . (.表示拷贝到当前文件 ...
- JS/java实现QQ空间自动点赞
使用方法: 1:进入QQ空间 2:复制下面代码 3:按F12或右键审查元素 进入控制台 也就是console 4:粘贴 回车键 喝口水 5:如果嫌慢的话可以 修改这段代码. window.setI ...