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

MySQL表的内连和外连(重点)

目录

内连接

 案例

 外连接

左外连接

 案例

右外连接 

 案例


表的连接分为内连和外连

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

 备注:前面学习的都是内连接的一种

 案例

显示SMITH的名字和部门名称

名字在员工表中出现但是员工表中没有部门名称只有代码号,部门名称在部门表中;所以我要的两个数据一定是在两个表中来的;所以要对emp表和dept表做笛卡尔积(形成新的表)



mysql> select * from emp,dept where emp.deptno=dept.deptno;//where筛选;多个表的话用.来描述特列

如果只mysql> select * from emp,dept ;错误输出,他会列出count(emp)*count(dept)行信息,相当于emp的每一行与dept的每一行匹配完后继续下一行在匹配,会有不需要的和错误的信息
方法1:筛选出名字和部门(where):mysql> select emp.ename,dept.dname  from emp,dept where emp.deptno=dept.deptno;//两表合并,筛选出正确数据
mysql> select ename,dname  from emp,dept where emp.deptno=dept.deptno and ename='SMITH';


方法2:筛选出名字和部门(内连接):

mysql> select * from emp inner join dept on emp.deptno=dept.deptno;

mysql> select ename,dname  from emp inner join dept on emp.deptno=dept.deptno;

mysql> select ename,dname  from emp inner join dept on emp.deptno=dept.deptno where ename='SMITH';//用where筛选出特定的

mysql> select ename,dname  from emp inner join dept on emp.deptno=dept.deptno and ename='SMITH';//用and也行

 外连接

外连接分为左外连接和右外连接

左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接如果在进行连接查询一定涉及到多表,想让左侧的表完全显示,不让左侧的表信息做任何的过滤或筛选,把左侧的表做保留如果和右侧的表配不上则右侧的内容都为空都可以但必须把左侧的表保持全貌

语法:select 字段名  from 表名1 left join 表名2 on 连接条件

 案例

 建两张表:

mysql> create table stu (id int, name varchar(30));//学生表

mysql> insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');

mysql> create table exam (id int, grade int);//成绩表

mysql> insert into exam values(1, 56),(2,76),(11, 8);

发现有的信息不匹配

 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来(组织考试了但是有人不参加那么就没有成绩)

mysql> select * from stu left join exam on stu.id=exam.id;//筛选全部
mysql> select stu.id,stu.name,exam.grade from stu left join exam on stu.id=exam.id;//筛选特定有用的

右外连接 

如果联合查询,右侧的表完全显示我们就说是右外连接。

语法:select 字段 from 表名1 right join 表名2  on 连接条件;

跟左外连接一样只不过这次保留右边的表使之不做任何信息的筛选和过滤,对左边的表做过滤;

 案例

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

mysql> select * from stu right join exam on stu.id=exam.id;//保留右边的

mysql> select stu.id,stu.name,exam.grade from stu right join exam on stu.id=exam.id;//指定保留

其实左右连接一样的。要是把表换一下那左右就是一样的;

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

对exam表做左右连接改变两个表的位置即可达到相同效果

 列出部门名称和这些部门的员工信息,同时列出没有员工的部门;(总体来说还是以部门表为主)可以使用左右连接的一种

mysql> select * from emp right join dept on emp.deptno=dept.deptno order by dept.deptno;//采用右连接
mysql> select * from dept left join emp on emp.deptno=dept.deptno order by dept.deptno;//采用左连接

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 如何不用再每次新建线程,直接使用公共线程池
  • IoTDB 集群高效管理:一键启停功能介绍
  • 数据结构——排序算法(冒泡、快速、选择、插入)
  • Qt中使用RapidJSON
  • Gitea 仓库事件触发Jenkins远程构建
  • 从零编写一个神经网络完成手写数字的识别分类(pytorch实现)
  • 通过Bugly上报的日志查找崩溃闪退原因
  • Rust: 关于Pin以及move前后分析
  • Python基础-循环语句
  • 安全防御,防火墙配置NAT转换智能选举综合实验
  • 在家上网IP地址是固定的吗?
  • Is Temperature the Creativity Parameter of Large Language Models?阅读笔记
  • GitHub+Picgo图片上传
  • Web学习day04
  • 未来互联网的新篇章:深度解析Facebook的技术与战略
  • 【译】JS基础算法脚本:字符串结尾
  • #Java异常处理
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • codis proxy处理流程
  • JS数组方法汇总
  • Python爬虫--- 1.3 BS4库的解析器
  • Redis 中的布隆过滤器
  • Sass 快速入门教程
  • SpriteKit 技巧之添加背景图片
  • vue-cli3搭建项目
  • 闭包,sync使用细节
  • 深度学习在携程攻略社区的应用
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 系统认识JavaScript正则表达式
  • 应用生命周期终极 DevOps 工具包
  • 用Canvas画一棵二叉树
  • 运行时添加log4j2的appender
  • 白色的风信子
  • 阿里云ACE认证之理解CDN技术
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (阿里云万网)-域名注册购买实名流程
  • (八十八)VFL语言初步 - 实现布局
  • (二十四)Flask之flask-session组件
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (强烈推荐)移动端音视频从零到上手(下)
  • (学习日记)2024.01.19
  • (一) storm的集群安装与配置
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)setTimeout 和 setInterval 的区别
  • (转)菜鸟学数据库(三)——存储过程
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core引入性能分析引导优化
  • .NET gRPC 和RESTful简单对比
  • .NET Micro Framework初体验
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter