【由浅入深学MySQL】- MySQL连接查询详解
本系列为:MySQL数据库详解,为千锋教育资深Java教学老师独家创作
致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~
文末有重点总结和福利内容!
技术类问题,也欢迎大家和我们沟通交流!
前言
从今天开始本系列内容就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。
全文大约 【1475】字, 不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......
一. 表关系
各位小伙伴在学习多表连接查询前,首先我们要介绍下表与表之间的关系。在多张表中,表和表之间是有四种关系的,分别是:一对一、一对多、多对一、多对多四种。
1. 一对一关系
所谓一对一关系就是两张表中,一张表的一条数据对应另一张表的一条数据。
下图中学生表和学生详情表的id起到了一个对应一个的关系,这就是一对一关系。
2. 一对多关系
一对多关系就是一张表的某一条数据对应另一张表的N多条数据,这种关系就是一对多。
例如下图中teacher讲师表中的tid为02的数据这条对应subject科目表中的SpringCloud、Redis、RabbitMQ这三条数据因为他们的teaid字段的值都是2。
3. 多对一关系
将一对多关系反过来看就是多对一了。
例如下图中subject科目表中的SpringCloud、Redis、RabbitMQ这三条数据都对应teacher讲师表中的这条数据。
4. 多对多关系
多对多关系需要借助一张关联表来完成。如下图,student学生表和score成绩表的关系是一对多,subject科目表和score成绩表的关系是一对多。那么student学生表和subject科目表的关系就是N:N多对多的关系。借助score成绩表作为关联表来完成多对多关系。
二. 表连接查询
下面带各位小伙伴一起学习表连接查询。
表连接查询一共分为三种分别是:内连接,左外连接,右外连接三种方式。
语法:SELECT 列名 FROM 表1 连接方式 表2 ON 连接条件
1. 内连接查询(INNER JOIN ON)
敲黑板啦,大家画重点哦
特点: 内连接是将两张表有关联关系的数据显示出来,没有关联关系的不显示。
#1.查询每个讲师所教的科目(显式内连接)
select * from teacher a INNER JOIN `subject` b on a.TId=b.teaid;
#2.查询每个讲师所教的科目(隐式内连接)
select * from teacher a , `subject` b where a.TId=b.teaid;
经验: 在 MySql 中,第二种方式也可以作为内连接查询,但是不符合 SQL 标准。
而第一种属于 SQL 标准,与其他关系型数据库通用。
2. 左外连接(LEFT JOIN ON)
特点: 左外连接是以LEFT JOIN关键字左边为左表,关键字右边为右表。左表的数据全显示出来,右表的数据有关联关系的正常显示,没有关联关系的显示null。
#查询所有学生和成绩
select * from student a LEFT JOIN score b ON a.SId = b.stuId;
注意: 左外连接,是以左表为主表,依次向右匹配,匹配到,返回结果。
匹配不到,则返回 NULL 值填充。
3. 右外连接(RIGHT JOIN ON)
特点: 右外连接是以RIGHT JOIN关键字左边为左表,关键字右边为右表。右表的数据全显示出来,左表的数据有关联关系的正常显示,没有关联关系的显示null。
#查询所有学生和成绩
select * from student a RIGHT JOIN score b ON a.SId = b.stuId;
注意: 右外连接,是以右表为主表,依次向左匹配,匹配到,返回结果。
匹配不到,则返回 NULL 值填充。
三. 结语
最后在这里对本文核心要点进行总结:
熟练掌握表与表之间的四种关系:一对一、一对多、多对一、多对多。
熟练掌握表关联查询的三种方式:内连接查询、左外连接查询、右外连接查询,并熟记他们的特点。
以上就是本文的全部内容啦,感觉有帮助的话可以关注我们持续追更!
【由浅入深学MySQL】- MySQL连接查询详解的更多相关文章
- (转)Mysql 多表查询详解
MySQL 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...
- Mysql 多表查询详解
Reference: https://blog.csdn.net/jintao_ma/article/details/51260458 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql ...
- SQL各种连接查询详解(左连接、右连接..)
一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...
- Mysql高手系列 - 第12篇:子查询详解
这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- mysql配置文件my.cnf详解
原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...
- mysql学习3:mysql之my.cnf详解
mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...
- mysql触发器trigger 实例详解
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能 ...
- MySQL权限授权认证详解
MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...
随机推荐
- Python读写Excel文件第三方库汇总,你想要的都在这儿!
常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件.http://xlrd.readthedocs.io/en/latest/1.xlrd支持 ...
- 使用loadrunner运行中问题(无代码生成解决方法)
开始录制之后,不能成功录制,工具栏events一直是2,打开新网站不跳动,结束录制之后没有代码生成 进入软件,点击工具栏的录制,选择录制选项,将http高级如下设置 同时也要修改套接字,如下配置 当开 ...
- windows微信如何双开
生活中存在同时使用两个微信的情况,一个工作一个生活,这时希望同时在电脑上登录两个账号.如何做到呢?步骤如下: 右键单击"微信"图标,选择属性,目标框内的路径就是微信安装路径,复制目 ...
- 基于Kubernetes(k8s)部署Dubbo+Nacos服务
一.说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-for ...
- 【新版】使用 go-cqhttp 扫码登录,一键接入 ChatGPT 机器人到 QQ 群
目录 项目效果 安装 go-cqhttp 虚拟文件 启动 ChatGPT 项目效果 由于 ChatGPT 目前只能在漂亮国使用,所以想要在国内使用 ChatGPT 必然险阻重重 不仅时时刻刻要跟企鹅公 ...
- JS一切皆对象理解
对象都是通过函数创建的 function Fn() { this.name = '王福朋'; this.year = 1988; } var fn1 = new Fn(); fn1是个对象,它是由函数 ...
- [软件测试] sonar 常见问题及修复思路【待完善】
1 sonar 概述 sonar 是什么? Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具. 与持续集成工具(例如 Hu ...
- [Linux]常用命令之【nl/sed/awk/wc/xargs/perl】
nl nl : 在linux系统中用来计算文件中行号. nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补 ...
- [MySQL]set autocommit=0与start transaction的区别[转载]
set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务. 1.不管autocommit 是1还是 ...
- 逍遥自在学C语言 位运算符 "|" 的5种高级用法
前言 在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是 ...