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(右外联接) ...
随机推荐
- Spring AOP编程(二)-AOP实现的三种方式
AOP的实现有三种方式: l aop底层将采用代理机制进行实现. l 接口 + 实现类 :spring采用 jdk 的动态代理Proxy. l 实现类: ...
- 五种网络IO模型以及多路复用IO中select/epoll对比
下面都是以网络读数据为例 [2阶段网络IO] 第一阶段:等待数据 wait for data 第二阶段:从内核复制数据到用户 copy data from kernel to user 下面是5种网络 ...
- Go_runtime包
package main import ( "fmt" "runtime" "time" ) //写在init函数里,main函数运行之前就 ...
- composer 配置 切换中国镜像
composer 默认地址改为中国镜像地址,以及中国镜像地址还原成默认地址 一.查看当前镜像地址 在命令行输入如下命令,即可查看全局镜像地址: $ composer config -g repo.pa ...
- Xcode 内存泄露检查出现:nil returned from a method that is expected to return a non-null value iOS 解决方案。
在 使用 Xcode 检查内存泄露时(cmd+shift+B)运行,出现了一个警告:nil returned from a method that is expected to return a no ...
- HTML5地理定位(已知经纬度,计算两个坐标点之间的距离)
事实上,地球上任意两个坐标点在地平线上的距离并不是直线,而是球面的弧线. 下面介绍如何利用正矢公式计算已知经纬度数据的两个坐标点之间的距离.半正矢公式也成为Haversine公式,它最早时航海学中的重 ...
- XFire客户端调用CXF服务端(四)
前面章节:http://www.cnblogs.com/xiehongwei/p/8082337.html 已经开发出了CXF服务端,现在用XFire开发客户端调用CXF服务端,代码如下: impor ...
- Linux Ubuntu运行线程程序出现undefined reference to ‘pthread_create’和undefined reference to ‘pthread_join’错误。
Linux Ubuntu运行线程程序出现undefined reference to ‘pthread_create’和undefined reference to ‘pthread_join’错误. ...
- Java开发简单的家居购物商城系统 JSP 附源码
开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MYSQL数据库 注意:使用tomcat7运行 运行效果图 源码及原文链接:https://javadao ...
- MyBatis-Spring整合之方式4
直接删除Mybatis的配置文件,修改Beans.xml文件的sqlSessionFactory的参数内容,如下: <!--配置sqlSessionFactory--> <bean ...