mysql之内连接,外连接(左连接,右连接),union,union all的区别
内连接,外连接,左连接,右连接,全连接
测试数据:
CREATE TABLE `a_table` (
`a_id` int(11) DEFAULT NULL,
`a_name` varchar(10) DEFAULT NULL,
`a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into a_table values(1,"老潘","总裁部"),(2,"老王","秘书部"),(3,"老张","设计部"),(4,"老李","运营部");
select * from a_table;
create table `b_table` (
`b_id` int(11) DEFAULT NULL,
`b_name` varchar(10) DEFAULT NULL,
`b_part` varchar(10) DEFAULT NULL
)ENGINE = INNODB DEFAULT CHARSET = utf8;
insert into b_table values(2,"老王","秘书部"),(3,"老张","设计部"),(5,"老刘","人事部"),(6,"老黄","生产部");
select * from b_table;
内连接 :
inner join...on
join...on
cross join...on
以上三种都是内连接语法
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part |
+------+--------+-----------+
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
# 内连接
mysql> select * from a_table a inner join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part | b_id | b_name | b_part |
+------+--------+-----------+------+--------+-----------+
| 2 | 老王 | 秘书部 | 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 | 3 | 老张 | 设计部 |
+------+--------+-----------+------+--------+-----------+
2 rows in set (0.02 sec)
# 同时可以使用以下的三种方法:
mysql> select * from a_table, b_table where a_table.a_id = b_table.b_id;
mysql> select * from a_table a cross join b_table b on a.a_id=b.b_id;
mysql> select * from a_table a join b_table b on a.a_id=b.b_id;
组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

左连接(左外连接)
left join ... on ...
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part |
+------+--------+-----------+
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
# 左连接
mysql> select * from a_table a left join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part | b_id | b_name | b_part |
+------+--------+-----------+------+--------+-----------+
| 2 | 老王 | 秘书部 | 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 | 3 | 老张 | 设计部 |
| 1 | 老潘 | 总裁部 | NULL | NULL | NULL |
| 4 | 老李 | 运营部 | NULL | NULL | NULL |
+------+--------+-----------+------+--------+-----------+
4 rows in set (0.04 sec)
说明:left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

右连接(右外连接)
right join ... on ...
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part |
+------+--------+-----------+
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from a_table a right join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part | b_id | b_name | b_part |
+------+--------+-----------+------+--------+-----------+
| 2 | 老王 | 秘书部 | 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 | 3 | 老张 | 设计部 |
| NULL | NULL | NULL | 5 | 老刘 | 人事部 |
| NULL | NULL | NULL | 6 | 老黄 | 生产部 |
+------+--------+-----------+------+--------+-----------+
4 rows in set (0.00 sec)
说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

union
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part |
+------+--------+-----------+
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from a_table union select * from b_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
6 rows in set (0.00 sec)
一张表中显示了两张表的数据(不重复的数据),先查询的表,其结果放在前面。
union all
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part |
+------+--------+-----------+
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
4 rows in set (0.00 sec)
mysql> select * from a_table union all select * from b_table;
+------+--------+-----------+
| a_id | a_name | a_part |
+------+--------+-----------+
| 1 | 老潘 | 总裁部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 4 | 老李 | 运营部 |
| 2 | 老王 | 秘书部 |
| 3 | 老张 | 设计部 |
| 5 | 老刘 | 人事部 |
| 6 | 老黄 | 生产部 |
+------+--------+-----------+
8 rows in set (0.00 sec)
一张表中显示了两张表的所有数据,先查询的表,其结果放在前面。
mysql之内连接,外连接(左连接,右连接),union,union all的区别的更多相关文章
- SQL——左连接(Left join)右连接(Right join)内连接(Inner join)
概念(定义) 首先还是介绍一下这三个的定义 Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来.结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足 ...
- mysql——多表——外连接查询——左连接、右连接、复合条件查询
), d_id ), name ), age ), sex ), homeadd ) ); ,,,'nan','beijing'); ,,,'nv','hunan'); ,,,'nan','jiang ...
- MySQL的左连接、右连接和全连接的实现
表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...
- 【数据库】MySQL的左连接、右连接和全连接的实现
表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...
- MySQL中的内连接、左连接、右连接、全连接、交叉连接
创建两个表(a_table.b_table),两个表的关联字段分别为:a_table.a_id和b_table.b_id CREATE TABLE a_table ( a_id int NOT NUL ...
- Mysql之左连接右连接内连接——示例 (转)
下面是两张表 表stu 表tech 1.右连接 当使用右连接语句查询时,返回结果如下: 1 SELECT stu.id,stu.name,stu.classe_name,tech.id,tech.na ...
- 【SQL】连接 —— 内连接、外连接、左连接、右连接、交叉连接
连接 · 内连接 · 外连接 · 左连接 · 右连接 · 全连接 · 交叉连接 · 匹配符号(+) 连接 根据表之间的关系,呈现跨表查询的结果. 外连接 内连接 左连接 右连接 全 ...
- SQL Server之内连接 左连接 右连接 全连接 交叉连接
SELECT * FROM Table_A GO SELECT * FROM Table_B GO --内连接 SELECT a.*, b.* FROM Table_A a JOIN Table_B ...
- mysql概要(六)连接(内连接,左,右外连接
内连接 [join on / from 表1,表二 ]效果一样 区别是:可以理解为首先取得笛卡儿积后,再匹配/还是根据条件获得笛卡尔积 内连接:取俩表的交叉匹配数据:(mysql 内连接 左连接 右连 ...
- 左连接,右连接,内连接,Union
数据库的三种常用连接解析: 官方解释: 1.left [outer] join(左外联接) 返回 包括左表中的所有记录和右表中联结字段相等的记录 2.right [outer] join(右外联接) ...
随机推荐
- 关于使用阿里云MAVEN镜像仓库
由于国内的某些不可明确的原因 国内连接google的时候十分慢,使得看github上的项目十分慢,这里我们可以修改build.gradle下的文件来使用阿里云仓库同步 会更快: // Top-leve ...
- VIM - 问题: 简单变换
1. 概述 学习 Java 反射的时候, 碰到的简单问题 手动可以处理, 但是真的很浪费时间 想熟悉一下工具的使用 2. 题目 源 Modifier.isAbstract(int modifiers) ...
- Educational Codeforces Round 80 (Rated for Div. 2)C(DP)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ][],temp[][]; int ...
- spark-shell中往mysql数据库写数据报错
今天在看spark方面的知识的时候,在spark-shell中往mysql写数据时报错,错误信息如下: ERROR Executor: Exception in task 0.0 in stage 4 ...
- opencv python:图像梯度
一阶导数与Soble算子 二阶导数与拉普拉斯算子 图像边缘: Soble算子: 二阶导数: 拉普拉斯算子: import cv2 as cv import numpy as np # 图像梯度(由x, ...
- PHP中PHP $_POST和PHP $_REQUEST及PHP $_GET的用法及区别
笔者最近开始学习PHP语言大法,记录一下学习过程中遇到的知识点. 今天介绍的是php中有关 php $_post 和 php $_request 及 php $_get 的用法及区 ...
- Spring Boot 如何动态切换数据源
本章是一个完整的 Spring Boot 动态数据源切换示例,例如主数据库使用 lionsea 从数据库 lionsea_slave1.lionsea_slave2.只需要在对应的代码上使用 Data ...
- 入门chrome插件开发教程和经验总结,一篇就搞掂!
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_44244857/articl ...
- [JavaScript] 两个数相除有余数时结果加1
实现代码 ; ; ?(total/item):(Math.floor(total/item)+); console.log(page)
- 洛谷 P1464 Function(简单记忆化)
嗯... 让一切从水开始吧... 水过初赛,但愿复赛能够接着水过... 这道题不记忆化会tle,所以用空间换时间,将每次的答案(只有20*20*20个)存下来,如果之前已经求过,就不需要重复求了... ...