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之表连接-> 内连接,左外连接,右外链接,全连接的更多相关文章

  1. Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)

    Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询     多表连接查询的应用场景: ​         连接是关系数据库模型的主要特点,也是区别于其他 ...

  2. SQL 各种连接:内连接,外连接(左外,右外,完全外)

    在讲述之前,假设有如下两个表EMP, DEPT, 并且他们数据如下:

  3. SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)

    最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...

  4. SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)

    最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...

  5. django 内置server 外网不能访问, 报连接超时

    按照官网教程,以 python manage.py runserver 其访问url为 http://127.0.0.1:8000,意味着只能本机访问,而我的django app 部署在 阿里云上面 ...

  6. mysql数据库中的多表查询(内连接,外连接,子查询)

    用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...

  7. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

  8. 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

    [原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.    ...

  9. 深入理解SQL的四种连接,左外连接,右外连接,内连接,全连接

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

  10. SQL的四种连接(左外连接、右外连接、内连接、全连接)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

随机推荐

  1. Intellij IDEA 打包jar的多种方式

    IDEA打包jar包的多种方式 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-assembly-plugin打包 1.view-> ...

  2. 基于DNN的推荐算法总结

    1.早期的算法 深度学习在CTR预估应用的常见算法有Wide&Deep,DeepFM等. 这些方法一般的思路是:通过Embedding层,将高维离散特征转换为固定长度的连续特征,然后通过多个全 ...

  3. Python-05-字符串格式化

    一.百分号方式 %[(name)][flags][width].[precision]typecode (name)      可选,用于选择指定的key flags          可选,可供选择 ...

  4. 【springcloud】2.eureka源码分析之令牌桶-限流算法

    国际惯例原理图 代码实现 package Thread; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomi ...

  5. cf 869c The Intriguing Obsession

    题意:有三种三色的岛,用a,b,c来标识这三种岛.然后规定,同种颜色的岛不能相连,而且同种颜色的岛不能和同一个其他颜色的岛相连.问有多少种建桥的方法. 题解:em....dp.我们先看两个岛之间怎么个 ...

  6. TreeListView排序不对

    winForm控件TreeListView按照一定顺序后添加项,后发觉排序顺序自己变了,解决办法: TreeListViewItem viewItem = new TreeListViewItem() ...

  7. entity-framework-core – 实体框架核心RC2表名称复数

    参考地址:https://docs.microsoft.com/zh-cn/ef/core/modeling/relational/tables http://www.voidcn.com/artic ...

  8. VBA用户自定义函数(十五)

    函数是一组可重复使用的代码,可以在程序中的任何地方调用.这消除了一遍又一遍地编写相同的代码的需要.这使程序员能够将一个大程序划分成许多小的可管理的功能模块. 除了内置函数外,VBA还允许编写用户定义的 ...

  9. 善用#waring,#pragma mark 标记

    在项目开发中,我们不可能对着需求一口气将代码都写好.开发过程中肯定遇到诸如需求变动,业务逻辑沟通,运行环境的切换等这些问题.当项目大的时候,如果木有形成统一的代码规范,在项目交接和开发人员沟通上将会带 ...

  10. 关于#error

    很简单的一个东西,但是感觉使用价值没有太大.实现了以下,结果如下: 执行到#error语句的时候直接停止编译,在下面输出设定好的错误信息. 来自为知笔记(Wiz)