@toc
     更多关于数据库知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:
     QQ:3327908431
     微信:ZDSL1542334210

前言:MySQL一系列操作猛如虎,代码易懂清晰,结构也简单,今天我们来谈一谈MySQL强大的多表连接,将表连接后,不但方便查询、处理,而且更加便于做数据分析,为我们省去了诸多麻烦,废话不多说,直接进入今天的讲解画面。**

1、多表连接种类与语法

1.1、纵向拼接

Union 拼接也称为纵向拼接,根据每个表共有的列的值匹配两个表中的行,要进行连接的两张表必须有相同的列名才可以,若两表字段不全相同或者顺序不同,那么就用查询来代替。语法为:

select * from t1 union select * from t2;  # 两表列名和列顺序完全相同select 列名称 from t1 union select 列名称 from t2;

1.2、外联接

该种连接方式是最常用也是比较难理解的一种连接方式。外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
        1)left join或left outer join左向外联接的结果集包括left outer子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值,但是需要指定主键id,该两个表格的主键名字要一样,语法为:

select * from t1 left join t2 on t1.id=t2.id;

2)right join或 right outer join右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

select * from t1 right join t2 on t1.id=t2.id;

1.3、内联接

inner join只显示两表中有关联的数据,就是当两个表没有相同主键时,不会显示结果。如下面的例子,当scores 里面的s_id不全的时候,那么内连接就不会显示scores 没有的s_id相应的行。

select * from stu inner join scores on stu.s_id = scores.s_id;

1.4、交叉联接(笛卡尔积)

交叉联接中 join=full join 都是返回左表中的所有行,左表中的每一行与右表中的所有行组合,不需要指定主键。交叉联接也称作笛卡尔积。from 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。

select * from t1 join t2;  # 法一select * from t1 full join t2;# 法二

2、表格创建

创建学生信息表stu

create table stu(s_id varchar(5),s_name varchar(5),s_sex varchar(1),s_age int(3),s_day date);insert into stu values
("001","李华","男",23,'1996-8-16'),
("002","王二","男",24,'1997-3-16'),
("003","赵敏","女",23,'1990-5-26'),
("004","张莹莹","女",22,'1995-2-16'),
("005","朱亚军","男",25,'1999-8-16'),
("006","马云","男",28,'1993-12-16');

创建学生得分表scores

create table scores (s_id varchar(5),c_id varchar(3),score float);insert into scores values
("001","01",135),
("005","01",120),
("003","01",110),
("002","01",90),
("005","02",140),
("001","02",125.5),
("004","02",100),
("006","02",90),
("002","03",102),
("005","03",100.6),
("001","03",100),
("003","03",95.6),
("004","03",83),
("003","02",80),
("006","03",79.5);

创建课程表coure

create table coure(
c_id varchar(2),t_id char(1),c_name varchar(10));insert into coure values
("01","3","数据库原理"),
("02","2","统计学基础"),
("03","1","Python基础");

创建教师信息表teacher

create table teacher(t_id char(1),t_name varchar(5));insert into teacher values("1","邓博"),("2","崔博"),("3","汪院长");

创建t1表

create table t1(s_id varchar(5),s_name varchar(5),s_sex varchar(1),s_age int(3),s_day date);insert into stu values
("007","走走走","男",105,'1996-8-16');

3、题目部分

题目一:将stu表和scores表左连接

select * from stu left join scores on stu.s_id=scores.s_id;
# 答案:
001 李华  男   23  1996-8-16   001 01  135
005 朱亚军 男   25  1999-8-16   005 01  120
003 赵敏  女   23  1990-5-26   003 01  110
002 王二  男   24  1997-3-16   002 01  90
005 朱亚军 男   25  1999-8-16   005 02  140
001 李华  男   23  1996-8-16   001 02  125.5
004 张莹莹 女   22  1995-2-16   004 02  100
006 马云  男   28  1993-12-16  006 02  90
002 王二  男   24  1997-3-16   002 03  102
005 朱亚军 男   25  1999-8-16   005 03  100.6
001 李华  男   23  1996-8-16   001 03  100
003 赵敏  女   23  1990-5-26   003 03  95.6
004 张莹莹 女   22  1995-2-16   004 03  83
003 赵敏  女   23  1990-5-26   003 02  80
006 马云  男   28  1993-12-16  006 03  79.5

题目二:将stu表和scores表和coure表做连接
分析:多表连接无非就是多了几张表,其具体语法为:

select * from t1 left join t2 on ti.id=t2.id
left join t3 on t2.id=t3.id left join t4 on t3.id=t4.id ... ;

这里要保证信息不丢失,且这里列名不同,采用左连接,根据数据的特点可知,有:

select * from stu left join scores on stu.s_id=scores.s_id left join coure on scores.c_id=coure.c_id;
# 答案:
001 李华  男   23  1996-8-16   001 01  135 01  3   数据库原理
005 朱亚军 男   25  1999-8-16   005 01  120 01  3   数据库原理
003 赵敏  女   23  1990-5-26   003 01  110 01  3   数据库原理
002 王二  男   24  1997-3-16   002 01  90  01  3   数据库原理
005 朱亚军 男   25  1999-8-16   005 02  140 02  2   统计学基础
001 李华  男   23  1996-8-16   001 02  125.5   02  2   统计学基础
004 张莹莹 女   22  1995-2-16   004 02  100 02  2   统计学基础
006 马云  男   28  1993-12-16  006 02  90  02  2   统计学基础
003 赵敏  女   23  1990-5-26   003 02  80  02  2   统计学基础
002 王二  男   24  1997-3-16   002 03  102 03  1   Python基础
005 朱亚军 男   25  1999-8-16   005 03  100.6   03  1   Python基础
001 李华  男   23  1996-8-16   001 03  100 03  1   Python基础
003 赵敏  女   23  1990-5-26   003 03  95.6    03  1   Python基础
004 张莹莹 女   22  1995-2-16   004 03  83  03  1   Python基础
006 马云  男   28  1993-12-16  006 03  79.5    03  1   Python基础
007 走走走 男   105 1996-8-16

题目三:将stu、scores、coure以及teacher表做连接

select * from stu left join scores on stu.s_id=scores.s_id left join coure on scores.c_id=coure.c_id left join teacher on coure.t_id=teacher.t_id;

题目四:将stu表和t1表纵向连接;

select * from stu union  select * from t1;
# 答案
001 李华  男   23  1996-8-16
002 王二  男   24  1997-3-16
003 赵敏  女   23  1990-5-26
004 张莹莹 女   22  1995-2-16
005 朱亚军 男   25  1999-8-16
006 马云  男   28  1993-12-16
007 走走走 男   105 1996-8-16

题目五:将teacher表和coure表纵向连接;
分析:由于两表只有教师id这一列相同,但是这样会出现重复结果,于是利用union all不去重复,所以要实现纵向连接就只有如此

select t_id from teacher union all  select t_id from coure;
# 答案
1
2
3
3
2
1

4、文末彩蛋–轻松一刻

大家都知道嘛,男人到了17、18岁呢难免有点那啥,你比方说我好朋友小熊就出现过这事儿,以前高中时候嘛,我们班长就谈了一女朋友,而且他两还合租了,然后过几个周我们一起吃饭,由于好几周没见又瘦了,结果小熊调侃到:“你小子早晚得死在女人身上!”然后班长撇下嘴说到:“你早晚得死自己右手里!”,然后小熊默默低下头,看了看自己的右手,老茧确实比以前厚了许多…就是这么个情况嘛。

今天到这里就结束了哟//每篇文章都有文末彩蛋–轻松一刻哟~加关注学习更多MySQL知识!谢谢观看,我是Jetuser-data

链接: [https://blog.csdn.net/L1542334210]
CSND:L1542334210

祝大家工作顺利!阖家欢乐!

MySQL--多表连接(内连接、外连接、交叉连接--笛卡尔积)相关推荐

  1. mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接

    一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...

  2. 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  3. mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  4. Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

    数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 ...

  5. MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)

    本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...

  6. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...

  7. MySQL内连接、左外连接、右外连接

    MySQL 中的内连接.左外连接和右外连接是用于连接两个或多个表的不同方式,它们之间的区别如下: 内连接(Inner Join):内连接也称为等值连接,只返回两个表中键值匹配的行,即只有在两个表中都有 ...

  8. 表连接查询(多表查询,内连接,左外连接,右外连接)

    什么是表连接:同时对多张表进行查询操作,表与表之间要通过连接条件来连接.一般这个连接条件是主键列是否等于外键列.表连接的主要三种方式是: 连接方式 概念说明 内连接 分为显示内连接和隐式内连接,查询的 ...

  9. 数据库表连接总结:等值连接, 自然连接,左外连接,右外连接,内连接,全外连接;

    [1]等值连接 1)连接:凡是查询涉及到两个以上的表,就需要将表连接: 2)就是用where子句做的连接查询:连接查询的列名可以不同: [2]自然连接: select * from  a_tbl na ...

  10. oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...

    Oracle中的连接可分为,内连接(INNER JOIN).外连接(OUTER JOIN).全连接(FULL JOIN),不光是 Oracle,其他很多的数据库也都有这3种连接查询方式. Oracle ...

最新文章

  1. ThreadLocal 面试六连问,你能 Hold 住吗?
  2. 智能硬件的时代,嵌入式是否已经日薄西山
  3. Java描述设计模式(03):工厂方法模式
  4. HTTP Header 详解 Requests 与 Responses 头信息
  5. Python3中的GBK、UTF-8和Unicode
  6. 百度文库免财富值下载文件
  7. 大学计算机aoa学什么,浙江省高校计算机二级AOA考试excel试题及解析.xls
  8. 原型工具axure7.0
  9. 傅里叶滤波去噪学习笔记
  10. 熵增与热力学第二定律
  11. 廊坊金彩:店铺如何分析问题
  12. 《大型网站技术架构》《K8S进阶实战》等书籍!送45本!
  13. 《C++标准库》学习笔记 — STL —流
  14. jFinal 使用slf4j打印sql及其它相关日志
  15. Windows 去除我的电脑页面多余的设备和驱动器图标
  16. autoware官方入门教使用
  17. 老spring3.2版本 redistemplate 报错_卡普空“令人惊讶”的老系列新作,会是《恐龙危机》吗?...
  18. 大数据HBase入门
  19. 新年第一帖——元旦这天骑车迷路了
  20. 机器视觉系列(三)——电气部分

热门文章

  1. iOS工作之余 学习提升资料(转载)
  2. keil的c语言基础,KeilC单片机C语言应用研究入门基础篇要点S.doc
  3. 多校联考 CSP-J 2019 第三次模拟赛 题解
  4. 教你如何用拼音输入法怎么打出来不认识的字
  5. 冷静下来想想,员工离职这事真能“防得住”吗?
  6. 也说说“小地方来的”
  7. MacBook 整个配置过程,供新入手MacBook的同学
  8. 使用Github和Hexo搭建个人主页时报错 404 There isnt a GitHub Pages site here
  9. Android View的elevation属性,CardView始终在布局顶层覆盖其它控件的解决方式;
  10. js onclick.点击无效解决办法