MySQL内外连接

MySQL内外链接

  • 内连接
    • 显示SMITH的名字和部门名称
  • 外连接
    • 左外连接
      • 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
    • 右外连接
      • 把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来
      • 列出部门名称和这些部门的员工信息,同时列出没有员工的部门

内连接

什么是内连接:
在以前我们直接利用from子句对多个表做笛卡尔积的时候,MySQL会无脑的将一张表中的每一条数据与另一张表中的所有数据进行连接,然后形成一张新表,然后再由我们自己利用where子句筛选出有意义的数据,这实际上是内连接的一种,而实际上我们可以在连接的时候让MySQL不要无脑连接,可以让MySQL将满足条件的数据连接起来,这样的话我们就得到了一张有意义的表,我们就不用自己在where子句中进行筛选了,这也是内连接的一种,如果某个表中没有与另一个表匹配的数据,那么该表的数据将不会出现在结果集中。这样做的语法如下:
select 字段 from table1 inner join table2 on 连接条件;

显示SMITH的名字和部门名称

分析:
方法一:
首先我们要的数据来自于emp表和dept表,那么我们可以对这两个表做笛卡尔积,然后筛选出有意义的数据,并且ename=’SMITH‘的数据;
SQL语句:
select ename,dname from emp,dept where emp.deptno<=>dept.deptno and ename='SMITH';
在这里插入图片描述
这里是利用了前面学习的多表查询的方式,这也是内连接的一种;

方法二:
根据我们上述学的新知识,我们在连接的时候就可以按照条件连接,然后再筛选出ename=“SMITH”的数据;
SQL语句:
select ename,dname from emp inner join dept on emp.deptno<=>dept.deptno where ename="SMITH" ;
在这里插入图片描述
实际上我们也可以在连接条件里面加上ename='SMITH’这一个条件:
select ename,dname from emp inner join dept on emp.deptno<=>dept.deptno and ename='SMITH';
在这里插入图片描述
这样写的话我们就不用在where子句中进行筛选了,但是我们不建议这样写因为这种写法逻辑上没有使用where子句的写法清晰,使用where子句的写法更符合我们的编码逻辑;

外连接

在MySQL中外连接分为左外连接和右外连接
什么是外连接:
在内链接中某个表的数据与另一个表的数据在连接的时候没有匹配的数据,那么这个表中的数据是不会出现在结果集中的,但是在外连接中不是这样的,在外连接中如果某个表的数据在另一个表中没有满足条件的连接,那么这个表中的数据依然会存在与最后的结果集中,尽管其在另一个表中没有与之匹配的数据;
因此对于左外连接来说:就是在最后的结果中会显示左表中的全部数据,尽管左表中的数据在右表中没有与之匹配数数据;
对于右外连接同理:就是在最后的结果中会显示右表中的全部数据,尽管右表中的数据在左表中没有与之匹配数数据;

//创建两张表
create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);

在这里插入图片描述

左外连接

语法:
select 字段 from table1 left join table2 on 连接条件;
这里我们解释一下那个是左表,那个是右表:
table1是左表,table2是右表,从编码顺序上来区分的;

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

分析:
最后要求我们查询的数据来自stu表、exam表 因此我们肯定需要多表查询,然后的话我们又要我们显示所有学生的成绩,尽管这个学生在exam表中没有成绩,那么我们就可以将stu当作左表,exam当作右表进行左外连接;
SQL语句:select stu.id,name,grade from stu left join exam on stu.id<=>exam.id;
在这里插入图片描述

右外连接

语法:
select 字段 from table1 right table2 on 连接条件;

把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

分析:
最后要求的信息有成绩、学生姓名,学生id,然后这两个信息分别来自exam表、stu表,因此我们肯定是需要做联合查询的,这个没话说,然后的话又要我们显示所有成绩,即该成绩在学生表中没有学生与之对应,那么我们可以将exam表当作右表来进行右连接:
SQL语句:
select exam.id,name,grade from stu right join exam on exam.id<=>stu.id;
在这里插入图片描述
实际上利用左外连接查询也是可以的,将exam当左表:
SQL语句:
select exam.id,name,grade from exam left join stu on exam.id<=>stu.id;
在这里插入图片描述

实际上:还有一个全外连接的,全外连接就是左外连接与右外连接的结合,左表中的数据和右表中的数据会全部显示在最后的结果集中;
但是MySQL还没有支持全外连接,只有左外连接、右外连接;

列出部门名称和这些部门的员工信息,同时列出没有员工的部门

分析:
最后需要我们显示的有部门名、以及员工信息,那么我们需要的数据来自于dept表、emp表我们需要对这两张表做联合查询,同时题目要求我们显示所有部门,即使这个部门没有员工,那么我们就可以让dept表充当左表,然后以左外连接的方式来进行数据连接筛选:
SQL语句:
select dname,emp.* from dept left join emp on dept.deptno<=>emp.deptno;
在这里插入图片描述
右外连接与内连接的写法读者可以自行尝试一下;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/126278.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#学习 - 初识类与名称空间

类&#xff08;class&#xff09;& 名称空间&#xff08;namespace&#xff09; 类是最基础的 C# 类型&#xff0c;是一个数据结构&#xff0c;是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…

python-55-打包exe执行

目录 前言一、pyinstaller二、实践打包exe1、遇坑1&#xff1a;Plugin already registered2、遇坑2&#xff1a;OSError 句柄无效 三、总结 前言 你是否有这种烦恼&#xff1f; 别人在使用你的项目时可能还需要安装各种依赖包&#xff1f;别人在使用你的项目&#xff0c;可能…

MyBatis原理分析手写持久层框架

目录 1 JDBC操作数据库问题分析2 JDBC问题分析和解决思路3 自定义持久层框架_思路分析3.1 使用JDBC和使用持久层框架区别3.2 核心接口/类重点说明3.3 项目使用端3.4 自定义框架本身3.5 最终手写的持久层框架结构参考 4 自定义持久层框架_编码5 自定义持久层框架优化 1 JDBC操作…

初始化一个 vite + vue 项目

创建项目 首先使用以下命令创建一个vite项目 npm create vite然后根据提示命令 cd 到刚创建的项目目录下&#xff0c;使用npm install安装所需要的依赖包&#xff0c;再使用npm run dev即可启动项目 配置 vite.config.js 添加process.env配置&#xff0c;如果下面 vue-route…

2023高教社杯数学建模国赛C题思路解析+代码+论文

如下为C君的2023高教社杯全国大学生数学建模竞赛C题思路分析代码论文 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差, 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&…

如何统计网站的访问量

本文介绍的是使用redis的HyperLoglog实现uv的统计功能。 背景 首先我们先明确一下uv这个名词代表的实际意义。uv代表的是通过网页访问浏览的人数&#xff0c;和文章的阅读量差不多&#xff0c;但是需要注意的是&#xff0c;一个人即使是多次访问&#xff0c;也只算一次。 所…

新风机未来什么样?

新风机在未来将会有许多令人期待的发展和改进&#xff0c;让我们一起来看一看吧&#xff01;以下是新风机未来的一些可能性&#xff1a; 智能化和智能家居&#xff1a;新风机将更多地与智能家居系统整合&#xff0c;通过物联网和人工智能技术&#xff0c;实现智能控制和智能调节…

vue+antd——实现table表格的打印——分页换行,每页都有表头——基础积累

这里写目录标题 场景效果图功能实现1&#xff1a;html代码功能实现2&#xff1a;css样式功能实现3&#xff1a;js代码补充内容page-break-inside 属性page-break-after属性page-break-before 属性 场景 最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是要实现…

Revit 几何体的三种上层应用:特征造型、体量和纯粹几何

排除掉墙梁板柱这些和建筑各专业相关的构件&#xff0c;Revit 的上层应用中&#xff0c;有三类和几何相关的应用&#xff0c;特征造型、体量和纯粹几何。这也是通常三维建模软件的几种基础建模组织形式。 特征造型 几何特征造型是一种设计方法&#xff0c;它强调使用几何学原理…

C/C++之链表的建立

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.头插 1.1简介 1.2代码实现头插 …

【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)

1 简介 Fragment是一个历史悠久的组件&#xff0c;从API 11引入至今&#xff0c;已经成为Android开发中最常用的组件之一。 Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。…

代码随想录笔记--回溯算法篇

1--回溯算法理论基础 回溯算法本质上是一个暴力搜索的过程&#xff0c;其常用于解决组合、切割、子集、排列等问题&#xff0c;其一般模板如下&#xff1a; void backTracking(参数){if(终止条件){// 1. 收获结果;// 2. return;}for(..遍历){// 1. 处理节点// 2. 递归搜索// 3.…

K8S 基础概念学习

1.K8S 通过Deployment 实现滚动发布&#xff0c;比如左边的ReplicatSet 的 pod 中 是V1版本的镜像&#xff0c;Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器&#xff0c;他会连接本pod中的其他容器&#xff0c;实现互通。p…

【Java】基于SSM的单位人事管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

[Linux]动静态库

[Linux]动静态库 文章目录 [Linux]动静态库见一见库存在库的原因编写库模拟编写静态库模拟使用静态库模拟编写动态库模拟使用静态库 库的加载原理静态库的加载原理动态库的加载原理 库在可执行程序中的编址策略静态库在可执行程序中的编址策略动态库在可执行程序中的编址策略 见…

储能直流侧计量表DJSF1352

安科瑞 华楠 具有CE/UL/CPA/TUV认证 DJSF1352-RN导轨式直流电能表带有双路直流输入&#xff0c;主要针对电信基站、直流充电桩、太阳能光伏等应用场合而设计&#xff0c;该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。在实际使用现场&#xff0c;即可计量总…

LT8711HE 是一款高性能的Type-C/DP1.2到HDMI2.0转换器

概述&#xff1a; LT8711HE是一种高性能的Type-C/DP1.2到HDMI2.0转换器&#xff0c;设计用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。LT8711HE集成了一个DP1.2兼容的接收器&#xff0c;和一个HDMI2.0兼容的发射机。此外&#xff0c;还包括两个CC控制器&#xff0c;用于CC通…

自然语言处理——数据清洗

一、什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序&#xff0c;包括检查数据一致性&#xff0c;处理无效值和缺失值等。与问卷审核不同&#xff0c;录入后的数据清理一般是由计算机而不是人工完成。 ——百度百科 二、为什么要数据清洗 现实生…

bboss 流批一体化框架 与 数据采集 ETL

数据采集 ETL 与 流批一体化框架 特性&#xff1a; 高效、稳定、快速、安全 bboss 是一个基于开源协议 Apache License 发布的开源项目&#xff0c;主要由以下三部分构成&#xff1a; Elasticsearch Highlevel Java Restclient &#xff0c; 一个高性能高兼容性的Elasticsea…

java开发之个人微信的二次开发

简要描述&#xff1a; 修改我在某群的昵称 请求URL&#xff1a; http://域名/updateIInChatRoomNickName 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参…