MySQL之表连接-> 内连接,左外连接,右外链接,全连接
1、首先创建student库
create database student;
2、 在数据库中创建boy表 和 girl表,
mysql> create table boy(
-> boyId int primary key auto_increment,
-> boyName varchar(100) not null,
-> age int,
-> connectId int)
-> auto_increment = 1;
mysql> create table girl(
-> girlid int primary key auto_increment,
-> girlName varchar(100) not null,
-> age int,
-> connectId int)
-> auto_increment = 101;
① 对boy表插入部分数据
mysql> insert into boy(boyName,age) values('李易峰',30);
mysql> insert into boy(boyName,age) values('吴奇隆',40);
mysql> insert into boy(boyName,age) values('周润发',55);
mysql> insert into boy(boyName,age) values('周星驰',45);
mysql> insert into boy(boyName,age) values('刘德华',47);
mysql> insert into boy(boyName,age) values('成龙',60);
mysql> select * from boy;
+-------+---------+-----+-----------+
| boyId | boyName | age | connectId |
+-------+---------+-----+-----------+
| 1 | 李易峰 | 30 | NULL |
| 2 | 吴奇隆 | 40 | NULL |
| 3 | 周润发 | 55 | NULL |
| 4 | 周星驰 | 45 | NULL |
| 5 | 刘德华 | 47 | NULL |
| 6 | 成龙 | 60 | NULL |
+-------+---------+-----+-----------+
② 对girl表插入部分数据
mysql> insert into girl(girlName,age) values('刘亦菲',31);
mysql> insert into girl(girlName,age) values('唐嫣',35);
mysql> insert into girl(girlName,age) values('刘诗诗',38);
mysql> insert into girl(girlName,age) values('马苏',30);
mysql> insert into girl(girlName,age) values('杨幂',39);
mysql> insert into girl(girlName,age) values('赵丽颖',29);
mysql> select * from girl;
+--------+----------+-----+-----------+
| girlid | girlName | age | connectId |
+--------+----------+-----+-----------+
| 101 | 刘亦菲 | 31 | NULL |
| 102 | 唐嫣 | 35 | NULL |
| 103 | 刘诗诗 | 38 | NULL |
| 104 | 马苏 | 30 | NULL |
| 105 | 杨幂 | 39 | NULL |
| 106 | 赵丽颖 | 29 | NULL |
+--------+----------+-----+-----------+
3、修改表中的connectId,利用boy表中的boyId 连接girl表中的girlId
① boyId=2 连接 girlId = 102
mysql> update boy set connectId=102 where boyId=2;
② boyId=3 连接 girlId = 104
mysql> update boy set connectId=104 where boyId=3;
③ boyId=6 连接 girlId = 105
mysql> update boy set connectId=105 where boyId=6;
得出boy表
mysql> select * from boy;
+-------+---------+-----+-----------+
| boyId | boyName | age | connectId |
+-------+---------+-----+-----------+
| 1 | 李易峰 | 30 | NULL |
| 2 | 吴奇隆 | 40 | 102 |
| 3 | 周润发 | 55 | 104 |
| 4 | 周星驰 | 45 | NULL |
| 5 | 刘德华 | 47 | NULL |
| 6 | 成龙 | 60 | 105 |
+-------+---------+-----+-----------+
4、修改表中的connectId,利用girl表中的girlId 连接boy表中的boyId
① girlId=101 连接 boyd = 3
mysql> update girl set connectId=3 where girlId=101;
② girlId=103 连接 boyd = 4
mysql> update girl set connectId=4 where girlId=103;
③ girlId=105 连接 boyd = 6
update girl set connectId=6 where girlId=105;
得出girl表
mysql> select * from girl;
+--------+----------+-----+-----------+
| girlid | girlName | age | connectId |
+--------+----------+-----+-----------+
| 101 | 刘亦菲 | 31 | 3 |
| 102 | 唐嫣 | 35 | NULL |
| 103 | 刘诗诗 | 38 | 4 |
| 104 | 马苏 | 30 | NULL |
| 105 | 杨幂 | 39 | 6 |
| 106 | 赵丽颖 | 29 | NULL |
+--------+----------+-----+-----------+
5、连接,分为 内连接、左连接、有连接, where形式连接
① where连接,匹配的数据显示出来
boy表连接girl表
mysql> select b.*,g.*
-> from boy b,girl g
-> where b.connectId = g.girlId;
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| 2 | 吴奇隆 | 40 | 102 | 102 | 唐嫣 | 35 | NULL |
| 3 | 周润发 | 55 | 104 | 104 | 马苏 | 30 | NULL |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
3 rows in set
girl表连接boy表
mysql> select b.*,g.*
-> from boy b,girl g
-> where g.connectId = b.boyId;
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| 3 | 周润发 | 55 | 104 | 101 | 刘亦菲 | 31 | 3 |
| 4 | 周星驰 | 45 | NULL | 103 | 刘诗诗 | 38 | 4 |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
② 内连接,匹配的显示出来
boy - > girl
mysql> select b.*,g.*
-> from boy b inner join girl g
-> on b.connectId = g.girlId;
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| 2 | 吴奇隆 | 40 | 102 | 102 | 唐嫣 | 35 | NULL |
| 3 | 周润发 | 55 | 104 | 104 | 马苏 | 30 | NULL |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
girl - > boy
mysql> select b.*,g.*
-> from girl g inner join boy b
-> on g.connectId = b.boyId;
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
| 3 | 周润发 | 55 | 104 | 101 | 刘亦菲 | 31 | 3 |
| 4 | 周星驰 | 45 | NULL | 103 | 刘诗诗 | 38 | 4 |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
+-------+---------+-----+-----------+--------+----------+-----+-----------+
③ 左外连接 left join on ,哪个表在左边就偏向哪个表,把该表的数据全部列出来,不管匹配不匹配都显示
mysql> select b.*,g.*
-> from boy b left join girl g
-> on b.connectId = g.girlId;
+-------+---------+-----+-----------+--------+----------+------+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+-----+-----------+--------+----------+------+-----------+
| 1 | 李易峰 | 30 | NULL | NULL | NULL | NULL | NULL |
| 2 | 吴奇隆 | 40 | 102 | 102 | 唐嫣 | 35 | NULL |
| 3 | 周润发 | 55 | 104 | 104 | 马苏 | 30 | NULL |
| 4 | 周星驰 | 45 | NULL | NULL | NULL | NULL | NULL |
| 5 | 刘德华 | 47 | NULL | NULL | NULL | NULL | NULL |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
+-------+---------+-----+-----------+--------+----------+------+-----------+
④ 右外连接 right join on ,哪个表在右边就偏向哪个表,把该表的数据全部列出来,不管匹配不匹配都显示
mysql> select b.*,g.*
-> from boy b right join girl g
-> on b.connectId = g.girlId;
+-------+---------+------+-----------+--------+----------+-----+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+------+-----------+--------+----------+-----+-----------+
| 2 | 吴奇隆 | 40 | 102 | 102 | 唐嫣 | 35 | NULL |
| 3 | 周润发 | 55 | 104 | 104 | 马苏 | 30 | NULL |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
| NULL | NULL | NULL | NULL | 101 | 刘亦菲 | 31 | 3 |
| NULL | NULL | NULL | NULL | 103 | 刘诗诗 | 38 | 4 |
| NULL | NULL | NULL | NULL | 106 | 赵丽颖 | 29 | NULL |
+-------+---------+------+-----------+--------+----------+-----+-----------+
⑤ 全连接(笛卡尔积),MySQL不支持 full join,但是可以通过 union来实现连接结果集(剔除重复数据),会显示两张表的各自匹配的数据,union all 不会剔除重复数据
mysql> select b.*,g.*
-> from boy b left join girl g
-> on b.connectId = g.girlId
-> union
-> select b.*,g.*
-> from boy b right join girl g
-> on b.connectId = g.girlId;
+-------+---------+------+-----------+--------+----------+------+-----------+
| boyId | boyName | age | connectId | girlid | girlName | age | connectId |
+-------+---------+------+-----------+--------+----------+------+-----------+
| 1 | 李易峰 | 30 | NULL | NULL | NULL | NULL | NULL |
| 2 | 吴奇隆 | 40 | 102 | 102 | 唐嫣 | 35 | NULL |
| 3 | 周润发 | 55 | 104 | 104 | 马苏 | 30 | NULL |
| 4 | 周星驰 | 45 | NULL | NULL | NULL | NULL | NULL |
| 5 | 刘德华 | 47 | NULL | NULL | NULL | NULL | NULL |
| 6 | 成龙 | 60 | 105 | 105 | 杨幂 | 39 | 6 |
| NULL | NULL | NULL | NULL | 101 | 刘亦菲 | 31 | 3 |
| NULL | NULL | NULL | NULL | 103 | 刘诗诗 | 38 | 4 |
| NULL | NULL | NULL | NULL | 106 | 赵丽颖 | 29 | NULL |
+-------+---------+------+-----------+--------+----------+------+-----------+
2018年1月16日02:12:02,睡觉...
MySQL之表连接-> 内连接,左外连接,右外链接,全连接的更多相关文章
- Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)
Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询 多表连接查询的应用场景: 连接是关系数据库模型的主要特点,也是区别于其他 ...
- SQL 各种连接:内连接,外连接(左外,右外,完全外)
在讲述之前,假设有如下两个表EMP, DEPT, 并且他们数据如下:
- SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)
最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...
- SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)
最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...
- django 内置server 外网不能访问, 报连接超时
按照官网教程,以 python manage.py runserver 其访问url为 http://127.0.0.1:8000,意味着只能本机访问,而我的django app 部署在 阿里云上面 ...
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
[原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. ...
- 深入理解SQL的四种连接,左外连接,右外连接,内连接,全连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- SQL的四种连接(左外连接、右外连接、内连接、全连接)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
随机推荐
- string中的erase()函数
erase()是对string类型的字符串进行删除元素操作的函数 1.erase(int index) 删除下标从index开始直到字符串结尾的元素 1 string s = "123215 ...
- numpy 数组集合运算及下标操作
1. 数组的集合运算 1.1. 并集 np.union1d(a,b)计算数组的并集: In [1]: import numpy as np In [2]: a = np.array([1,2,3]) ...
- [转帖]五分钟彻底搞懂你一直没明白的Linux内存管理
五分钟彻底搞懂你一直没明白的Linux内存管理 https://cloud.tencent.com/developer/article/1462476 现在的服务器大部分都是运行在Linux上面的,所 ...
- 基于DNN的推荐算法总结
1.早期的算法 深度学习在CTR预估应用的常见算法有Wide&Deep,DeepFM等. 这些方法一般的思路是:通过Embedding层,将高维离散特征转换为固定长度的连续特征,然后通过多个全 ...
- 通俗理解TCP的三次握手
三次握手流程的本质,可以这么理解:TCP的三次握手其实是双方各一次握手,各一次确认,只是其中一次握手和确认合并在一起. 当然也可以更通俗的去理解: "喂,你听得到吗?" " ...
- C之多维指针讲解
转载自: http://c.biancheng.net/view/2016.html #include <stdio.h> #include <string.h> int m ...
- 如何用Java实现条件编译
在 C 或 C++ 中,可以通过预处理语句来实现条件编译.代码如下: #define DEBUG #IFDEF DEBUUG /* code block 1 */ #ELSE /* code bloc ...
- WEB学习路线2019完整版(附视频教程+网盘下载地址)
WEB学习路线2019完整版(附视频教程+网盘下载地址).适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是 ...
- PPPoE中间人拦截以及校园网突破漫谈
本文首发于PPPoE中间人拦截以及校园网突破漫谈,转载请注明出处. PPPoE中间人拦截以及校园网突破漫谈 校园生活快结束了,之前还有点未完成的想法,趁着这两天有兴趣搞搞. 此文面向大众是那种在校园内 ...
- Feign 客户端调用错误
1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...