mysql 左连接、右连接和内连接
发布时间:2024-01-22 10:14:39
脚本如下:
drop table table1;
CREATE TABLE `andrew`.`table1`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE1(name, city) values ('Person A', 'BJ');
insert into TABLE1(name, city) values ('Person B', 'BJ');
insert into TABLE1(name, city) values ('Person C', 'SH');
insert into TABLE1(name, city) values ('Person D', 'SZ');
commit;
drop table table2;
CREATE TABLE `andrew`.`table2`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE2(name, city) values ('Person W', 'BJ');
insert into TABLE2(name, city) values ('Person X', 'SH');
insert into TABLE2(name, city) values ('Person Y', 'SH');
insert into TABLE2(name, city) values ('Person Z', 'NJ');
commit;
1. 外连接 – 左连接结果
table1居左,故谓之左连接。这种情况下,以table1为主,即table1中的所有记录均会被列出。有一下三种情况:
a. 对于table1中的每一条记录对应的城市如果在table2中也恰好存在而且刚好只有一条,那么就会在
返回的结果中形成一条新的记录。如上面Person A和Person B对应的情况。
b. 对于table1中的每一条记录对应的城市如果在table2中也恰好存在而且有N条,那么就会在返回的结果中形成N条新的记录。如上面的Person C对应的情况。
c. 对于table1中的每一条记录对应的城市如果在table2中不存在,那么就会在返回的结果中形成一条
条新的记录,且该记录的右边全部NULL。如上面的Person D对应的情况。
不符合上面三条规则的记录不会被列出。
2. 外连接 – 右连接结果
table2居右,故谓之右连接。这种情况下,以table2为主,即table2中的所有记录均会被列出。有一下三种情况:
a. 对于table2中的每一条记录对应的城市如果在table1中也恰好存在而且刚好只有一条,那么就会在
返回的结果中形成一条新的记录。如上面Person X和Person Y对应的情况。
b. 对于table2中的每一条记录对应的城市如果在table1中也恰好存在而且有N条,那么就会在返回的结果中形成N条新的记录。如上面的Person W对应的情况。
c. 对于table2中的每一条记录对应的城市如果在table1中不存在,那么就会在返回的结果中形成一条
条新的记录,且该记录的左边全部NULL。如上面的Person Z对应的情况。
不符合上面三条规则的记录不会被列出。
3. 内连接
内连接的数据记录中,不会存在字段为NULL的情况。可以简单地认为,内链接的结果就是在左连接或者右连接的结果中剔除存在字段为NULL的记录后所得到的结果。甚至可以认为,如果两个表中仅分别剩下内连接运算后所得的数据记录,如table1中只有Person A、Person B和Person C,table2中只有Person W、Person X和Person Y,那么这两个表的之间的左连接和右连接的返回的结果是一样的。
注意:select * from table1 a inner join table2 b on a.city = b.city 和select * from table1 a join table2 b on a.city = b.city 的效果是一样的,即如果join的左边没有诸如left、right或者inner这样的关键字时,缺省的是内连接。另,MySQL不支持full join。
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下服务端#!/usr/bin/env python#
- list1 和list2 两个list , 想要得到list1是不是包含 list2 (是不是其子集 )a = [1,2] b = [1,2
- 本文主要是针对 cumsum函数的一些用法。具体应用场景看下面的数据集。第一列是userID,第二列是安装的时间,第三列是安装的次数。我们现
- 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法
- 概述laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。因为使用了服务容器,laravel中大部分
- 目录前言二叉树节点定义递归构建二叉树前言本文的内容是数据结构中二叉树部分最基础的,之所以写一下主要是为了方便刷题的时候,能够在自己电脑上很快
- golang1.16也在今天正式发布了。原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下g
- 这里介绍一个nii文件保存为png格式的方法。这篇文章是介绍多个nii文件保存为png格式的方法:https://www.jb51.net/
- 本文实例讲述了Python操作word常见方法。分享给大家供大家参考,具体如下:这里介绍两种方式:使用win32com使用docx1. 使用
- 本文实例讲述了python实现在控制台输入密码不显示的方法。分享给大家供大家参考。具体实现方法如下:import console;names
- 二元运算符特殊方法+__add__,__radd__-__sub__,__rsub__*__mul__,__rmul__/__div__,_
- 关于 Python requests ,在使用中,总结了一些小技巧把,记录下。1:保持请求之间的Cookies,我们可以这样做。
- 1. 反射简介1.1 反射是什么?Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支持的内在操作,但是在编译时并不知道
- 大家在用asp开发程序的时候,有时候会碰到以下的错误提示:Active Server Pages 错误 'ASP 0141'
- 一、base64模块base64模块提供了在二进制数据和可打印ASCII字符间编解码的功能,包括 RFC3548中定义的Base16, Ba
- 1.基本信息? Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理。Pa
- udp实现同时收发信息import socketimport threadingdef fa(udp_socket,recv_ip,recv
- 1.当前时间戳转换为指定格式的日期# -*- coding: utf-8 -*-# @Time : 2019/5/31 10:5
- 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍;1. 标准化(Sta
- sort()方法排序列表中的对象,比较使用func(如果给定)。语法以下是sort()方法的语法:list.sort([func