当前位置: 首页 > news >正文

MySQL中多表查询之外连接

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

-- 创建教师表
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的主键安排的序

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络基础之(11)优秀学习资料
  • Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级
  • 蓝桥杯 2024 年第十五届省赛真题 —— 最大异或结点
  • Linux系统编程——生产者消费者模型
  • python基础---2.流程控制及函数
  • 2024Summer周报三
  • nodejs - express 学习笔记
  • 【Qt 】JSON 数据格式详解
  • 【传知代码】智慧医疗:纹理特征VS卷积特征(论文复现)
  • 计算机网络 6.1Internet概念
  • STM32 裸机 LWIP RAW接口 TCP客户端和服务端,以及UDP收发实现
  • Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
  • python机器学习8--网络
  • 【React】JSX 实现列表渲染
  • Linux进程控制——进程等待
  • 2017-09-12 前端日报
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Apache Pulsar 2.1 重磅发布
  • Java比较器对数组,集合排序
  • Java读取Properties文件的六种方法
  • Java多线程(4):使用线程池执行定时任务
  • k8s如何管理Pod
  • node入门
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊flink的BlobWriter
  • 让你的分享飞起来——极光推出社会化分享组件
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信开源mars源码分析1—上层samples分析
  • 一天一个设计模式之JS实现——适配器模式
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​zookeeper集群配置与启动
  • #define与typedef区别
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (javaweb)Http协议
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二)linux使用docker容器运行mysql
  • (二十三)Flask之高频面试点
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (源码分析)springsecurity认证授权
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)虚函数剖析
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net dataexcel winform控件 更新 日志
  • .NET 解决重复提交问题
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • [ JavaScript ] JSON方法