首页 > 数据库 >mysql join、leftjoin、rightjoin、unijoin使用解释

mysql join、leftjoin、rightjoin、unijoin使用解释

时间:2024-07-24 15:07:25浏览次数:10  
标签:null join unijoin class classes user mysql 号楼 id

参考文章:https://blog.csdn.net/chenmozhe22/article/details/83242481

1.左连接------left join:
查询的结果为:两个表格通过on关联的行,显示两个表格的该行的字段
左表所有数据信息全部不变,右表再去匹配左表
如果左边表格有数据,但右边表格没数据,则右表则使用null填充

table: students

id username sex classify score class_id
10000 alien 女 作家 57 1
10001 zhang 男 词人 27 2
10002 ping 女 酱油 31 3
10003 user-3 女 诗人 68 3
10004 user-4 男 作家 6 2
10012 user-12 女 词人 54 5
10018 user-18 自由职业 88 8
table: classes

class_id class_object class_name class_address
1 python2018级 张三 1号楼208室
2 java2017级 王五 8号楼606室
3 go2019级 李四 9号楼168室
9 大数据2018级 jack ma 6号楼222室

select * FROM students s left join classes c on s.class_id=c.class_id;

 


result:

id username sex classify score class_id class_id(1) class_object class_name class_address
10000 alien 女 作家 57 1 1 python2018级 张三 1号楼208室
10001 zhang 男 词人 27 2 2 java2017级 王五 8号楼606室
10004 user-4 男 作家 6 2 2 java2017级 王五 8号楼606室
10002 ping 女 酱油 31 3 3 go2019级 李四 9号楼168室
10003 user-3 女 诗人 68 3 3 go2019级 李四 9号楼168室
10012 user-12 女 词人 54 5 null null null null
10018 user-18 自由职业 88 8 null null null null
注意:

1.左表的排序,最终根据左表的class_id正序排列了
2.右表中,没有满足s.class_id=c.class_id的信息,全部都使用null填充了


2.右连接------right join:
查询的结果为两个表匹配到的数据
右表所有数据信息全部不变,左表再去匹配右表的数据
如果左表不存在数据, 左表则使用null填充与右表匹配

 


select * FROM students s right join classes c on s.class_id=c.class_id;

result:

id username sex classify score class_id class_id class_object class_name class_address
10000 alien 女 作家 57 1 1 python2018级 张三 1号楼208室
10001 zhang 男 词人 27 2 2 java2017级 王五 8号楼606室
10002 ping 女 酱油 31 3 3 go2019级 李四 9号楼168室
10003 user-3 女 诗人 68 3 3 go2019级 李四 9号楼168室
10004 user-4 男 作家 6 2 2 java2017级 王五 8号楼606室
null null null null null null 9 大数据2018级 jack ma 6号楼222室
注意:

1.所有的classes表的信息都显示出来了,且最终显示出来的结果信息,classes相关的行数,要比原始的数据多
2.students表中的class_id 没有在classes表class_id中的,都没有显示出来,例如class_id为[5,8]的信息都没显示
3.排序问题,先找到classes表中的class_id,然后再去students表中,从上到下去找对应s.class_id=c.class_id的相关信息;总体先按照classes原有的排序排列,如果classes表中的数据筛选完了,再去students中查找,看看是否还有没有对应classes信息,如果有就再填补classes信息,否者不填补筛选结束。


3.内连接------inner join:
查询的结果为两个表匹配到的数据,
最终显示完全符合左右2个表格的数据,即左右两个表格都有数据的才显示
如果某条数据左边或右边表格没有数据,则不显示

 


select * FROM students s inner join classes c on s.class_id=c.class_id;

result:

id username sex classify score class_id class_id class_object class_name class_address
10000 alien 女 作家 57 1 1 python2018级 张三 1号楼208室
10001 zhang 男 词人 27 2 2 java2017级 王五 8号楼606室
10002 ping 女 酱油 31 3 3 go2019级 李四 9号楼168室
10003 user-3 女 诗人 68 3 3 go2019级 李四 9号楼168室
10004 user-4 男 作家 6 2 2 java2017级 王五 8号楼606室
1.inner join 这个关联查询,最终得到的结果是2个表格,都符合s.class_id=c.class_id条件的信息才显示出来。
2.每个表格单独存在的信息,都不显示在最终的结果中。


4.全部集合------union:
查询两个表中相同的N个字段,先单独分组a,b临时表, 然后a,b再去重(可以理解为先分组再去重)
最终显示的是,N个选择的字段,并且代表2个表格里面所有的分组(group by)
删除两个表格里面重复的数据,最终只保留一条
注意点:

1.在union左右两个表格的结构必须一样,例如包括的字段数量、名称都一致
2.重复的数据只显示一份,删掉另一份,最终只保留2个表格里面全部的存量数据。

 


【原始表格:】

 


【上表重复的部分:】

 

 

SELECT id,num FROM num_a UNION SELECT id, num FROM num_b

 


原文链接:https://blog.csdn.net/chenmozhe22/article/details/83242481

 

标签:null,join,unijoin,class,classes,user,mysql,号楼,id
From: https://www.cnblogs.com/wjs2019/p/18320944

相关文章

  • MySQL 8.0 字符集与比较规则介绍
    前言:我们都知道MySQL8.0与MySQL5.7的区别之一就是默认字符集从latin1改成了utf8mb4,除此之外,MySQL8.0下的字符集和比较规则还有没有其他变化呢?本篇文章我们一起来学习下。utf8mb4字符集在MySQL8.0中,utf8mb4字符集是默认的字符集设置,它是一个真正的4字节UTF-......
  • 快速在线安装mysql5.7
    在线安装安装mysql安装源下载安装包wgethttps://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装MySQL源yum-ylocalinstallmysql57-community-release-el7-11.noarch.rpm安装mysqlyum-yinstallmysql-community-server--nogpgcheck启动mysql......
  • 超强mysql灾难恢复工具--ibd2sql
    超强mysql灾难恢复工具--ibd2sql小董学编程 DBA札记  2024年07月19日16:51 上海 1人听过DBA札记dba数据库知识科普踩坑指南经验分享原理解读88篇原创内容公众号前言昨晚23:00,刚躺到床上准备刷会儿抖音睡了。好友微信视频求救,说他的mysql......
  • pyMysql插入数据格式化问题!(秒解决)
    运行以下代码出现的问题:%dformat:anumberisrequired,notstr。username=input("请输入用户名:")password=input("请输入密码:")password=hashlib.md5(password.encode("utf-8")).hexdigest()real_name=input("请输入真实姓名:")......
  • [Mysql]InnoDB和MyISAM
    InnoDB和MyISAMInnoDB和MyISAM是MySQL数据库系统中最常用的两种存储引擎。它们各自拥有不同的特性和优化点,适用于不同的应用场景。以下是它们之间的一些主要区别:事务支持InnoDB:支持事务(ACID兼容)。它提供了提交、回滚和崩溃恢复功能,非常适合处理大量的短期事务。InnoDB的事务......
  • Day08MySQL 面试题 (五)
    MySQL面试题40、完整性约束包括哪些?数据完整性是指数据的精确(Accuracy)和可靠性(Reliability)。分为以下四类:1、实体完整性:规定表的每一行在表中是惟一的实体。2、域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。3、参......
  • 数据库入门知识点 1--初识MySQL数据库
    1、数据库(1)json,wps,txt,md,···都是保存文本数据的(数据交互麻烦,数据安全问题)(2)列表,元组,字典,集合,···(保存临时的数据,对数据进行处理的时候保存。)银行卡----存入的钱(不允许随意修改的)游戏的数据-----数据不存档--没有安全保障----第二天就会回到解放前。(3)使用专门的数据库......
  • 服务器部署环境(docker安装Mysql + Redis + MongoDB)
    1.安装Docker1、选择要安装的平台Docker要求CentOS系统的内核版本高于3.10uname-r#通过uname-r命令查看你当前的内核版本官网地址2.卸载已安装的Docker,使用Root权限登录Centos。确保yum包更新到最新。sudoyumupdate如果操作系统没有安装过Dock......
  • MySQL---------存储过程
    存储过程●介绍:存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库SQL语言层面的代码封装与复用......
  • 记录下Visual Studio 2022配置mysql
    visualstudio能够连接mysql只需要以下几步即可寻找mysql安装路径,如果你没有选择默认在C盘下ProgramFiles下mysql文件夹里,找到include和lib文件夹,分别复制路径。我们接下来来到visualstudio中,右键项目选择properties再将刚才复制的include跟lib的路径添加到Include......