首页 > 数据库 >MySQL中多表查询之外连接

MySQL中多表查询之外连接

时间:2024-07-24 16:28:25浏览次数:14  
标签:左外 -- s1 t1 MySQL id 查询 中多表 连接

 首先先来介绍一下我做的两个表,然后再用他们两个举例说明。

-- 创建教师表
create table teachers(
id_t int primary key auto_increment, -- 老师编号
name_t varchar(5) -- 姓名
);
-- 创建学生表
create table students(
id_s int primary key auto_increment, -- 编号
name_s varchar(5), -- 姓名
gender_s char(1), -- 性别
age_s int, -- 年龄
admission_date date, -- 入学日期
teacher_s int -- 教学老师
);

这是学生表

这是教师表

 

外连接

其中外连接又分为左外连接和右外连接。

其实这两个都可以查表1 表2的所有数据,那他们具体有什么不一样呢

左外连接(LEFT JOIN)会返回左表中的所有记录,无论它们是否在右表中找到匹配的记录。如果在右表中没有找到匹配的记录,则结果集中右表的字段将为NULL。

右外连接(RIGHT JOIN)与左外连接正好相反,它会返回右表中的所有记录,无论它们是否在左表中找到匹配的记录。如果在左表中没有找到匹配的记录,则结果集中左表的字段将为NULL。

那我们先给这个表加一行存在null值的数据。

insert into students values (8,'胡二','女',19,'2021-9-1',null);

-- 右外连接
select * from teachers  t1 right join students s1 on t1.id_t = s1.teacher_s;

-- 左外连接
select * from teachers  t1 left join students s1 on t1.id_t = s1.teacher_s;

以上我们可以看出,左右外连接是由左右表作为主体全部显示的,如果这时另一个表没有主体表的值,那么主体表全部显示,另一个表全部显示null值或不存在(我貌似说不清,反正看一看上面例子就可以清楚了)

========================================================

我们具体再实验一下如果没有null值的查询结果吧

-- 右外连接
select * from teachers  t1 right join students s1 on t1.id_t = s1.teacher_s;

-- 左外连接
select * from teachers  t1 left join students s1 on t1.id_t = s1.teacher_s;

我们可以清晰的看出来这两个的查询结果一样,但是顺序却不同。

将t1看作左表,s1看作右表

查询出左右顺序,是按你写的查询语句左右表的位置来说的(就是见上语句,t1在左,s1在右,所以查询出来的结果就是教师表在学生表的右边)

右外连接:右边的表是主体,是按s1的主键安排的序

左外连接:左边的表是主体,是按t1的主键安排的序

标签:左外,--,s1,t1,MySQL,id,查询,中多表,连接
From: https://blog.csdn.net/2401_84246493/article/details/140664085

相关文章

  • MYSQL中SHOW PROCESSLIST使用
    SHOWPROCESSLIST是显示用户正在运行的线程,需要注意的是,除了root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS权限。通常我们通过top检查发现mysqlCPU或者iowait过高那么解决这些问题......
  • Mysql性能优化
    以下配置需要找到MySQL的my.cnf的配置文件,在文件中修改,增加或者修改以下配置字符集character_set_server=utf8init-connect='SETNAMESutf8'validate_password=OFF大小写lower_case_table_names=1扩展设置最大链接数初始100,链接超过之后就不能连接max_connections=5......
  • mysql join、leftjoin、rightjoin、unijoin使用解释
    参考文章:https://blog.csdn.net/chenmozhe22/article/details/832424811.左连接------leftjoin:查询的结果为:两个表格通过on关联的行,显示两个表格的该行的字段左表所有数据信息全部不变,右表再去匹配左表如果左边表格有数据,但右边表格没数据,则右表则使用null填充table:students......
  • MySQL 8.0 字符集与比较规则介绍
    前言:我们都知道MySQL8.0与MySQL5.7的区别之一就是默认字符集从latin1改成了utf8mb4,除此之外,MySQL8.0下的字符集和比较规则还有没有其他变化呢?本篇文章我们一起来学习下。utf8mb4字符集在MySQL8.0中,utf8mb4字符集是默认的字符集设置,它是一个真正的4字节UTF-......
  • 多个list取交集,查询的问题
    查询条件有多个,但对应数据库就1个字段,此时,查询条件需要取交集。Collection<String>districtCodes=queryPageDTO.getDistrictCodes();Set<String>levelCityCodes=handleCityLevel(queryPageDTO);Set<String>levelRegionCityCodes=handleCityLevelRegion(queryPageDTO);/......
  • 快速在线安装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的事务......
  • 通过子树 id 查询所有父级
    思路:向上查找父级树loopTreeFindChecked(node){constfindParentTree=(data,parentId)=>{if(!data)return;data.forEach(item=>{if(item.id===parentId){this.checkedTreeList.unshift({id:parentId,......