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. c++ 在Ubuntu系统中使用access函数

    include<iostream> #include<stdlib.h> #include<stdio.h> #include<unistd.h> us ...

  2. 2019.10.28 IDEA入门指南(很多人问补充一篇)

    Idea快速入门指南 1.安装 1.1.安装 我们使用的是最新的2017.3.4版本: 双击打开, 选择一个目录,最好不要中文和空格: 然后选择桌面快捷方式,请选择64位: 然后选择安装: 开始安装: ...

  3. How George Washington Angered Lawmakers Over Thanksgiving——VOA慢速英语

    听力地址:How George Washington Angered Lawmakers Over Thanksgiving 中英对照:华盛顿总统将感恩节定为全国性节日 Words in This S ...

  4. LeetCode 459. 重复的子字符串(Repeated Substring Pattern)

    459. 重复的子字符串 459. Repeated Substring Pattern 题目描述 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且 ...

  5. ubuntu mysql5.7设置Open Files Limit

    目的:解决Too many open files异常 方式:设置Open Files Limit 环境:(MySQL)Server version: 5.7.27-0ubuntu0.16.04.1 ( ...

  6. 题解 CF1216D 【Swords】

    大水题,感觉比C题水多了...(证明倒是挺难) 题目大意:额,这个(实在总结不出) 还是题目描述吧:仓库里有$n$种相同数量($x$把)的剑(但你不知道有多少),一天有$y$人闯进了仓库,每人拿了$z ...

  7. 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)

    6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...

  8. 20191104-基于Python计数排序算法分析

    计数排序 计数排序算法没有用到元素间的比较,它利用元素的实际值来确定它们在输出数组中的位置,也就是说元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的,将每个元素出现的次数记 ...

  9. 2、C语言实现通讯录

    main函数入口: //test.c #include<stdio.h> #include<stdlib.h> #include<string.h> #includ ...

  10. Scala 数组操作之数组转换

    使用yield和函数式编程转换数组 // 对Array进行转换,获取的还是Array val a = Array(1, 2, 3, 4, 5) val a2 = for (ele <- a) y ...