MySQL查询之内连接,外连接查询场景的区别与不同
前言
我在写sql
查询的时候,用的最多的就是where
条件查询,这种查询也叫内连查询inner join
,当然还有外连查询outer join
,左外连接,右外连接
查询,常用在多对多关系中,那他们区别和联系是什么呢?
内连接inner join
内连接最常用定义:
- 连接结果仅包含
符合连接条件
的行组合起来作为结果集,参与连接的两个表
都应该符合连接条件使用关键词:INNER JOIN
连接多张表
也就是返回两个表的交集(阴影)部分,如下图所示:
如下sql查询语句
查询所有分配了部门信息的用户信息
也就是部门id在用户表,和部门表都存在行符合条件数据才展示
select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME
from t_user u inner join
t_dept d
on u.DEPT_ID = d.DEPT_ID
内连接还有一种隐式的写法,即不需要显示的指定 INNER JOIN 关键字
等价于
select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME
from t_user u,
t_dept d
where u.DEPT_ID = d.DEPT_ID
一般我们常用直接使用where
关键词查询连接条件这样更方便简单
外连接outer join
左(外)连接 left join
定义:
- 左(外)连接,
左表
的记录将会全部
表示出来,而右表
只会显示符合搜索条件
的记录。右表
记录不足的地方均为NULL
,如下图所示:
- 语法
LEFT JOIN ON
LEFT OUTER JOIN ON
left join
是 left outer join
的简写,它的全称是左外连接,是外连接中的一种。
如下sql查询语句
查询所有员工信息(包含部门信息)
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u left outer join
t_dept d
on u.DEPT_ID = d.DEPT_ID
等价于
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u left join
t_dept d
on u.DEPT_ID = d.DEPT_ID
如下图我们可以看到,左外连接 t_user 表里面 USERNAME 为 kenx 的记录,其 DEPT_ID 为 15,但 DEPT_ID 为 15 的记录在 t_dept 表里面是不存在的,此时,我们用的是左外连接,因此,可以查出该条记录,但 t_dept 表里面的字段的值都是 NULL。
右(外)连接 right join
定义:
- 右(外)连接,
右表
的记录将会全部表示出来,而左表
只会显示符合搜索条件
的记录。左表
记录不足的地方均为NULL
,如下图所示:
- 语法
RIGHT JOIN ON
RIGHT OUTER JOIN ON
right join
是 right outer join
的简写,它的全称是右外连接,是外连接中的一种。
如下查询sql 语句
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u right join
t_dept d
on u.DEPT_ID = d.DEPT_ID
等价于
select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME
from t_user u right outer join
t_dept d
on u.DEPT_ID = d.DEPT_ID
如下图 与
左外连接
刚好相反 查询出了所有部门信息,不符合条件的用户信息字段都为NULL
总结
内连接
:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。外连接
:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。左外连接
:左边表数据行全部保留,右边表保留符合连接条件的行。右外连接
:右边表数据行全部保留,左边表保留符合连接条件的行。全外连接
:左外连接 union 右外连接,Mysql 中暂不支持。
MySQL查询之内连接,外连接查询场景的区别与不同的更多相关文章
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- sql内连接外连接自然连接
为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...
- oracle 内连接 外连接 查询 笔记
elect ename,job,sal from emp where deptno>10 order by sal desc; 联合查询,PK dept.deptno FK emp.deptno ...
- 【SQL】多表查询中的 外连接 ,on,where
先简单粗暴给个结论,多表连结查询中,on比where更早起作用,系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行匹配过滤,where后语句为真,则能查询出来,而通过外连接 ...
- mysql 内连接 左连接 右连接 外连接
mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...
- mysql中的内连接,外连接实例详解
内连接: 只连接匹配的行左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边 ...
- MySQL 视图 事务 索引 外连接
视图 1.定义 select 语句的结果集,是一张虚拟的表2.创建视图语句create view 视图名 as select语句3.查看视图show views;4.使用视图select * from ...
- SQL中的内连接外连接和交叉连接是什么意思?
内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...
- 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右 ...
随机推荐
- Java流程控制02——顺序结构
- React Class组件生命周期
一.react组件的两种定义方式 1.函数组件,简单的函数组件像下面这样,接收Props,渲染DOM,而不关注其他逻辑 function Welcome(props) { return <h1& ...
- mysql《一》
一.启动和停止服务器 通过管理员权限打开cmd命令指示符 通过 net stop mysql(自己的服务器名字) 停止服务器 通过 net start mysql(自己的服务器名字) 启动服务器 ...
- 超详细 Java 15 新功能介绍
点赞再看,动力无限.微信搜「程序猿阿朗 」,认认真真写文章. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. Java 15 在 2 ...
- 操作系统思考 第十一章 C语言中的信号量
第十一章 C语言中的信号量 作者:Allen B. Downey 原文:Chapter 11 Semaphores in C 译者:飞龙 协议:CC BY-NC-SA 4.0 信号量是学习同步的一个好 ...
- DVWA靶场之Command Injection(命令行注入)通关
Command Injection Low: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUES ...
- 获取访问者真实ip地址?我觉得不可能
我们真的能通过请求来获取用户真实的ip地址嘛? 答案是不能,如果能,肯定是我学的不够深入,欢迎交流指正. 那么写这篇文章的意义是什么?我们接着往下看. IP地址相当于电脑在网络上的身份证,但事实上IP ...
- windows上python3安装
下载python 下载地址 https://www.python.org/downloads/windows/ 安装python 1.添加python到环境变量 2.自定义安装 3.下一步 4.选择安 ...
- 骨架屏css样式
.chiaroscuro { background: #f2f2f2; animation-duration: 1.5s; animation-name: blink; animation-itera ...
- 实现动态加载一个 JavaScript 资源
var script = document.createElement("script"); var head = document.getElementsByTagName(&q ...