【MySQL数据库】:MySQL内外连接

 

目录

 

内外连接和多表查询的区别

内连接

外连接 

左外连接

右外连接 

简单案例 


内外连接和多表查询的区别

  • 在 MySQL 中,内连接是多表查询的一种方式,但多表查询包含的范围更广泛。
  • 外连接也是多表查询的一种具体形式,而多表查询是一个更广泛的概念。

内连接(INNER JOIN)主要用于获取两个或多个表中相互匹配的数据行组合。它返回仅在连接条件满足时,两个表中相关行的交集部分。

而多表查询不仅仅局限于内连接,还可能包括其他连接类型,如左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全外连接(FULL OUTER JOIN)等。

内连接

内连接确保了结果集是基于关联条件的精确匹配,
排除了那些在一个表中有而在另一个表中没有对应匹配的行。
SELECT ... FROM t1 INNER JOIN t2 
ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • 内连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

雇员信息表中包含三张表,分别是员工表(emp)、部门表(dept)和工资等级表(salgrade)。

员工表(emp)中包含如下字段:

  • 雇员编号(empno)
  • 雇员姓名(ename)
  • 雇员职位(job)
  • 雇员领导编号(mgr)
  • 雇佣时间(hiredate)
  • 工资月薪(sal)
  • 奖金(comm)
  • 部门编号(deptno)


部门表(dept)中包含如下字段:

  • 部门编号(deptno)
  • 部门名称(dname)
  • 部门所在地点(loc)


工资等级表(salgrade)中包含如下字段:

  • 等级(grade)
  • 此等级最低工资(losal)
  • 此等级最高工资(hisal)

显示SMITH的名字和部门名称 

复合查询的做法就是,取员工表(emp)和部门表(dept)的笛卡尔积,在where子句中指明筛选条件为员工表(emp)的部门号等于部门表(dept)的部门号,筛选出每个员工匹配的部门信息,并指明员工姓名为SMITH,筛选出SMITH的信息和其所在部门的信息。

select ename,dname from emp,dept 
where emp.deptno=dept.deptno and ename='SMITH';

实际内连接本质就是 多表查询德一种

  • 将员工表(emp)和部门号(dept)放在from子句中并通过 inner join 关键字隔开。
  • on 子句后指明内连接的条件为员工表(emp)的部门号等于部门号(dept)的部门号,保证筛选出来的数据是有意义的。
  • and 之后指明筛选条件为员工的姓名为SMITH。
select ename,dname from emp inner join dept on
emp.deptno=dept.deptno and ename='SMITH'; 

外连接 

左外连接

  • 它会以左边的表为基础,将左边表中的所有记录都包含在结果集中。
  • 对于左边表中的每一条记录,会去右边的表中查找匹配的记录,如果找到匹配的记录,则将两表相关联的数据组合显示;
  • 如果没有找到匹配的记录,那么右边表相关列的值会显示为 NULL。
SELECT ... FROM t1 LEFT JOIN t2 ON 
连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • 左外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

给出一张学生表(stu)和一张成绩表(exam)

 

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

如果直接使用内连接将学生表和成绩表连接起来,然后筛选出学生学号等于考试学生学号的记录,那么只能筛选出有考试成绩的学生信息。

select stu.id,name,score from stu inner join exam on stu.id=exam.id;

这个时候我们就要使用左外连接了!!!

select stu.id,name,score from stu left join exam on stu.id=exam.id;

右外连接 

  • 右外连接(RIGHT OUTER JOIN)是以右边的表为基础,将右边表中的所有记录都包含在结果集中。
  • 对于右边表中的每一条记录,会去左边的表中查找匹配的记录,如果找到匹配的记录,则将两表相关联的数据组合显示;
  • 如果没有找到匹配的记录,那么左边表相关列的值会显示为 NULL。
SELECT ... FROM t1 RIGHT JOIN t2 ON 
连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • 左外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

查询所有学生的成绩,就算这个成绩没有学生与它对应,也要将成绩信息显示出来 

select * from exam right join stu on stu.id=exam.id;

简单案例 

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

 题目要求同时列出没有员工的部门,也就是部门表当中的内容需要完全被显示出来,如果在连接部门表(dept)和员工表(emp)时将部门表(dept)放在左侧,那么就可以使用左外连接。

select dname,emp.* from dept left join emp on dept.deptno=emp.deptno;

如果在连接部门表(dept)和员工表(emp)时将员工表(emp)放在左侧,那么就可以使用右外连接。

select dname,emp.* from emp right join dept on dept.deptno=emp.deptno;

 

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

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

相关文章

React-生成随机数和日期格式化

生成随机数 uuid文档:https://github.com/uuidjs/uuid npm install uuid import {v4 as uuidV4} from uuid 使用: uuidV4() 日期格式化 dayjs文档:安装 | Day.js中文网 npm install dayjs import dayjs from dayjs

LCTF 2018 bestphp‘s revenge

考点:Soap原生类Session反序列化CRLF注入 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); session_start(); if (isset($_GET[name])) { $_SESSION[name] $_GET[name]; } var_dump($_SESSION); $a array(reset($_…

MySQL学习——选项文件的使用

MySQL 的许多程序都可以从选项文件&#xff08;有时也被称为配置文件&#xff09;中读取启动选项。选项文件提供了一种方便的方式来指定常用的选项&#xff0c;这样你就不必每次运行程序时都在命令行上输入这些选项。 要确定一个程序是否读取选项文件&#xff0c;你可以使用 -…

vim编辑器的使用

vim编辑器 1 vim编辑器三种常见模式2 命令模式2.1 移动光标的操作2.2 对数据操作2.3 查找函数 3 底行模式3.1 不退出vim进行操作3.2 与文件进行对比 4 vim的补充知识4.1 vim的批量化注释4.2 vim窗口的非正常关闭 5 vim的配置6 配置sudoer文件 1 vim编辑器三种常见模式 我们在编…

AMD显卡和英伟达显卡哪个好?

显卡是计算机中负责处理图形和视频输出的硬件设备&#xff0c;主要分为两种类型&#xff1a;AMD的A卡和NVIDIA的N卡。那么AMD显卡和英伟达显卡哪个好&#xff1f;怎么选&#xff1f; 答&#xff1a;不能一概而论地说哪个好&#xff0c;因为它们各有优势&#xff0c;选择应基于…

【Python报错】已解决ModuleNotFoundError: No module named ‘packaging’

成功解决“ModuleNotFoundError: No module named ‘packaging’”错误的全面指南 在Python编程中&#xff0c;遇到ModuleNotFoundError: No module named packaging这样的错误&#xff0c;通常意味着你的Python环境中缺少名为packaging的模块&#xff0c;或者该模块没有被正确…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

IT学习笔记--Flink

概况&#xff1a; Flink 是 Apache 基金会旗下的一个开源大数据处理框架。目前&#xff0c;Flink 已经成为各大公司大数据实时处理的发力重点&#xff0c;特别是国内以阿里为代表的一众互联网大厂都在全力投入&#xff0c;为 Flink 社区贡献了大量源码。 Apache Flink 是一个…

微信小程序uniapp的父子之间的通信传递

1.父传递给子信息 my-test是子组件 demo是父组件 这是定义在父组件中的的info信息 要将这个传递给子组件 子组件在properties 中接收父组件传递来的数据 msg type 是类型 value是默认值&#xff0c;当父组件没有传递数据时&#xff0c;就会默认使用value的数据 子组件…

JavaScript html css前端 日期对象 date对象 日期格式化 时间戳

日期对象 Date对象 Date 对象和 Math 对象不一样&#xff0c;他是一个构造函数&#xff0c;所以我们需要实例化后才能使用 Date 实例用来处理日期和时间 Date()使用方法 示例&#xff1a;获取当前时间 let now new Date() console.log(now) 示例&#xff1a;获取指定时间…

LabVIEW液压伺服压力机控制系统与控制频率选择

液压伺服压力机的控制频率是一个重要的参数&#xff0c;它直接影响系统的响应速度、稳定性和控制精度。具体选择的控制频率取决于多种因素&#xff0c;包括系统的动态特性、控制目标、硬件性能以及应用场景。以下是一些常见的指导原则和考量因素&#xff1a; 常见的控制频率范…

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题 查看python语言服务器的日志&#xff0c;确定问题。 我的问题是加载的vscode 目录下存在一个很大的数据集目录&#xff0c;导致无法正常工作。 解决办法&#xff1a; 在vscode的pylance设置中&#xff0c;排除对应的目…

【WP】猿人学_13_入门级cookie

https://match.yuanrenxue.cn/match/13 抓包分析 抓包分析发现加密参数是cookie中有一个yuanrenxue_cookie 当cookie过期的时候&#xff0c;就会重新给match/13发包&#xff0c;这个包返回一段js代码&#xff0c;应该是生成cookie的 <script>document.cookie(y)(u)(a…

组装服务器重装linux系统【idrac集成戴尔远程控制卡】

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

亮数据代理IP助力高效数据采集

文章目录 &#x1f4d1;前言一、爬虫数据采集痛点二、代理IP解决爬虫痛点2.1 为什么可以2.2 本篇采用的代理IP 四、零代码获取数据4.1 前置背景4.2 亮数据浏览器自动抓取数据4.3 使用步骤&#xff1a; 五、数据集5.1 免费样本5.2 定制数据集 &#x1f324;️个人小结 &#x1f…

IP质量不够好,可以使用高质量的代理IP吗?

在当今互联网时代&#xff0c;IP代理是一个不可或缺的工具&#xff0c;但许多人可能对它的原理和应用感到困惑。IP代理涉及IP地址的使用和切换&#xff0c;旨在提供更好的隐私保护和访问控制。本文将介绍IP代理的工作原理以及为什么选择高质量的代理IP。 一、IP代理的基本原理…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因&#xff1a;可能是在el-form 中添加的ref 前面加了“&#xff1a;”&#xff0c;也可能是ref中的值写错了** FormInstance, FormRules

如何永久擦除Android手机中的所有个人数据?

在这个数字化的时代&#xff0c;确保您的个人数据的安全和隐私至关重要。如果您计划出售或回收您的Android手机&#xff0c;了解如何正确擦除Android手机是至关重要的。本综合指南将引导您通过安全擦除Android手机的分步过程&#xff0c;以保护您的敏感信息。 手机是极其敏感的…

CEC2017(Python):五种算法(SSA、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、麻雀搜索算法SSA 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defin…