MySQL内外连接的具体使用
作者:2021dragon 发布时间:2024-01-17 13:52:49
MySQL内外连接
表的连接分为内连接和外连接。
内连接
内连接
内连接的SQL如下:
SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;
说明一下:
SQL中大写的表示关键字,[ ]中代表的是可选项。
内连接的条件通过
连接条件
指明,用户的其他筛选条件通过其他条件
指明。
显示SMITH的名字和部门名称
给出一张员工表和一张部门表,员工表中的ename代表的是员工的姓名,deptno代表的是员工所在部门的部门号。如下:
部门表中的dname代表的是部门名,deptno代表的是部门的部门号。如下:
现在要显示SMITH的名字和其所在部门的名称,按照复合查询的做法就是,取员工表和部门表的笛卡尔积,在where子句中指明筛选条件为员工的部门号等于部门的部门号,筛选出每个员工匹配的部门信息,并指明员工姓名为SMITH,筛选出SMITH的信息和其所在部门的信息。如下:
实际上述多表查询的方式本质就是内连接,用标准的内连接SQL编写:
将员工表和部门号放在from子句中并通过inner join关键字隔开。
在on子句后指明内连接的条件为员工的部门号等于部门的部门号,保证筛选出来的数据是有意义的。
在and之后指明筛选条件为员工的姓名为SMITH。
这样筛选出来的结果和多表查询筛选出来的结果是一样的,只不过是写法有一点不同而已。如下:
外连接
外连接分为左外连接和右外连接。
左外连接
左外连接
左外连接的SQL如下:
SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;
说明一下:
SQL中大写的表示关键字,[ ]中代表的是可选项。左外连接的条件通过连接条件
指明,用户的其他筛选条件通过其他条件
指明。
查询所有学生的成绩,就算这个学生没有成绩,也要将学生的个人信息显示出来
给出一张学生表和一张成绩表,学生表中的name代表的是学生的姓名,id代表的是学生的学号。如下:
成绩表中的id代表的是考试学生的学号,score代表的是学生的成绩。如下:
现在要显示所有学生的成绩,如果直接使用内连接将学生表和成绩表连接起来,然后筛选出学生学号等于考试学生学号的记录,那么只能筛选出有考试成绩的学生信息。如下:
而题目要求将没有成绩的学生的个人信息也要显示出来,也就是学生表当中的内容需要完全被显示出来。如果在连接学生表和成绩表时将学生表放在左侧,那么就可以使用左外连接,这时如果左侧表中的某条记录根据连接条件没有找到匹配的右侧表中的记录,就会直接显示左侧表中的记录信息,而其对应的右侧表中的列信息将会用NULL值进行填充。如下:
右外连接
右外连接
右外连接的SQL如下:
SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;
说明一下:
SQL中大写的表示关键字,[ ]中代表的是可选项。
左外连接的条件通过
连接条件
指明,用户的其他筛选条件通过其他条件
指明。
查询所有的成绩,就算这个成绩没有学生与它对应,也要将成绩信息显示出来
题目要求将没有学生与它对应的成绩信息也要显示出来,也就是成绩表当中的内容需要完全被显示出来。如果在连接学生表和成绩表时将成绩表放在右侧,那么就可以使用右外连接,这时如果右侧表中的某条记录根据连接条件没有找到匹配的左侧表中的记录,就会直接显示右侧表中的记录信息,而其对应的左侧表中的信息将会用NULL值进行填充。如下:
简单案例
列出部门名称和这些部门的员工信息,同时列出没有员工的部门
由于题目要求同时列出部门名和员工信息,因此需要将部门表和员工表连接起来,连接条件就是部门的部门号要等于员工所在的部门号。如果直接使用内连接进行查询,那么将会显示出所有满足连接条件的记录。如下:
而题目要求同时列出没有员工的部门,也就是部门表当中的内容需要完全被显示出来,如果在连接部门表和员工表时将部门表放在左侧,那么就可以使用左外连接。如下:
当然,如果要使用右外连接,那么可以在连接部门表和员工表时将部门表放在右侧。如下:
来源:https://blog.csdn.net/chenlong_cxy/article/details/128653907


猜你喜欢
- 如下所示:list = [5,6,7,9,1,4,3,2,10]list.index(9)out:3同时可以返回列表中最大值的索引list.
- 步骤1、安装Jupyterpip install jupyter2、 新建一个IPython文件3、在Terminal里启动Jupyter
- 分别针对ie和火狐分别作了对xml文档和xml字符串的解析,所有代码都注释掉了,想看哪部分功能,去掉注释就可以了。至于在ajax环境下解析x
- Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.l
- 本文实例为大家分享了OpenCV实现相机标定的具体代码,供大家参考,具体内容如下一、相机与 * 相机模型1.相机模型现代科技加持下的相机已经成
- 一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3
- 应用 Scrapy框架 ,配置动态IP处理反爬。# settings 配置中间件DOWNLOADER_MIDDLEWARES = { &nb
- 目录需求描述:需求解析:解决需求问题解决本人前端菜鸟一名,一直致力于不间断的生产管理后台的bug,并以此自勉自励。近几天接到一个需求,网上也
- 本文实例讲述了正则表达式匹配ip地址实例。代码结构非常简单易懂。分享给大家供大家参考。主要实现代码如下:import rereip = re
- 1. RS.OPEN SQL,CONN,A,B,C2. CONN.EXECUTE(SQL,RowsAffected,C)参数含义:SQL的值
- 有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候。对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Se
- python如何为创建大量实例节省内存,具体内容如下案例:某网络游戏中,定义了玩家类Player(id, name, status,....
- 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面方法一: 利用数组
- 本文实例讲述了python修改操作系统时间的方法。分享给大家供大家参考。具体实现方法如下:#-*- coding:utf-8 -*-impo
- django中的超链接,在template中可以用{% url 'app_name:url_name' param%}其中a
- 今天在编写PHPDoc的导出文档的时候发现一个很郁闷的错误,虽然这个warning不是什么重要错误,但是看着总是很不爽的。于是就去网上找了很
- 本文实例讲述了Python 日志logging模块用法。分享给大家供大家参考,具体如下:demo.py(日志,输出到控制台):import
- 现实生活中,有很多场景中的事情是同时进行的,比如开车的时候,手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的。以上这些可以理解为多任务。那
- 模式库在模式库里,我将列出所有电子商务网站需要的模式.以下将罗列出经典常用的模式案例,我也试图让这些模式看起来更有趣味性与实用性。(Yaho
- 有一台windows服务器上跑着mysql的一些应用,现在需要将mysql的数据每天备份,并通过ftp上传到指定的存储服务器上要是在linu