文章目录

  • 绪论
  • 交叉连接
  • 内连接
  • 左外连接
  • 右外连接
  • 联合查询
绪论

多表查询顾名思义就是数据同时从多张表中获取,查询语句同时涉及到多张表,多表查询有多种语法,即:交叉连接,内连接,左外连接,右外连接,联合查询

现有如下一个数据库:

mysql> select * from class;
+----+-----------+
| id | classname |
+----+-----------+
|  1 | python    |
|  2 | java      |
+----+-----------+
2 rows in set (0.00 sec)mysql> select * from student;
+----+--------------+------+-------+----------+
| id | name         | sex  | score | class_id |
+----+--------------+------+-------+----------+
|  1 | 叶无道       | 男   |    98 |        1 |
|  2 | 慕容雪痕     | 女   |    95 |        2 |
|  3 | 苏惜水       | 女   |    85 |        1 |
|  4 | 燕清舞       | 女   |    85 |        2 |
+----+--------------+------+-------+----------+
4 rows in set (0.00 sec)

现针对这个数据库进行讲解多表查询

交叉连接

格式如下:

select  字段1,字段2... from 表1,表2... [where 条件]

如果不加条件直接进行查询,则会出现以下效果,这种结果我们称之为交叉连接(笛卡尔乘积)

例如:

mysql> select * from student,class;
+----+--------------+------+-------+----------+----+-----------+
| id | name         | sex  | score | class_id | id | classname |
+----+--------------+------+-------+----------+----+-----------+
|  1 | 叶无道       | 男   |    98 |        1 |  1 | python    |
|  1 | 叶无道       | 男   |    98 |        1 |  2 | java      |
|  2 | 慕容雪痕     | 女   |    95 |        2 |  1 | python    |
|  2 | 慕容雪痕     | 女   |    95 |        2 |  2 | java      |
|  3 | 苏惜水       | 女   |    85 |        1 |  1 | python    |
|  3 | 苏惜水       | 女   |    85 |        1 |  2 | java      |
|  4 | 燕清舞       | 女   |    85 |        2 |  1 | python    |
|  4 | 燕清舞       | 女   |    85 |        2 |  2 | java      |
+----+--------------+------+-------+----------+----+-----------+
8 rows in set (0.29 sec)

交叉连接还可以用如下方式:

mysql> select * from student cross join class;

如果我们对多张表使用交叉连接查询,而且每张表数据非常多,可以想象,得到结果的时间可能会非常长或者结果没有什么太大的意义。所以通过交叉连接进行多表查询这种方法并不常用,而且应该尽量避免使用

内连接

内连接可以理解成两张表中同时符合某种条件的数据记录的组合,与交叉连接的不同之处在于内连接比交叉连接有更多的限制条件

例1:第一种内连接写法

mysql> select student.name,class.classname from student,class where student.class_id=class.id;
+--------------+-----------+
| name         | classname |
+--------------+-----------+
| 叶无道       | python    |
| 慕容雪痕     | java      |
| 苏惜水       | python    |
| 燕清舞       | java      |
+--------------+-----------+
4 rows in set (0.00 sec)

例2:第二种内连接写法

mysql> select student.name,class.classname from student inner join class on student.class_id=class.id;
+--------------+-----------+
| name         | classname |
+--------------+-----------+
| 叶无道       | python    |
| 慕容雪痕     | java      |
| 苏惜水       | python    |
| 燕清舞       | java      |
+--------------+-----------+
4 rows in set (0.00 sec)
左外连接

左边表中的数据优先全部显示

例如:

mysql> select class.classname,student.name from class left join student on student.class_id=class.id;
+-----------+--------------+
| classname | name         |
+-----------+--------------+
| python    | 叶无道       |
| java      | 慕容雪痕     |
| python    | 苏惜水       |
| java      | 燕清舞       |
| c         | NULL         |
+-----------+--------------+
5 rows in set (0.00 sec)

表A left join 表B:

表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充

右外连接

右边表中的数据优先全部显示

例如:

mysql> select class.classname,student.name from student right join class on student.class_id=class.id;
+-----------+--------------+
| classname | name         |
+-----------+--------------+
| python    | 叶无道       |
| java      | 慕容雪痕     |
| python    | 苏惜水       |
| java      | 燕清舞       |
| c         | NULL         |
+-----------+--------------+
5 rows in set (0.00 sec)

表A right join 表B

表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充

联合查询

可以理解为把多个查询语句的查询结果集中在一起显示

例如:

mysql> select name from student union select classname from class;
+--------------+
| name         |
+--------------+
| 叶无道       |
| 慕容雪痕     |
| 苏惜水       |
| 燕清舞       |
| python       |
| java         |
| c            |
+--------------+
7 rows in set (0.00 sec)

注意:

  1. 当使用union连接两个查询语句时,两个语句查询的字段数量必须相同,否则无法使用union进行联合查询
  2. 使用union将两个结果集集中显示时,重复的数据会被合并为一条
  3. 使用union all进行联合查询时,重复的数据会展示出来
mysql> select name from student union select * from class;
ERROR 1222 (21000): The used SELECT statements have a different number of columns

MySQL数据库—多表查询相关推荐

  1. mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)

    mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...

  2. MySQL数据库多表查询

    MySQL数据库多表查询 前言 在之前的文章MySQL数据库之SQL入门中,我们讲到了四类SQL中的DQL(数据库查询语言,用于查询表中数据),但是我仅仅用DQL去查询一张表中数据,而在实际的应用中, ...

  3. MySQL 数据库单表查询——高级查询

    当遇到一些复杂的需求时,例如对查询结果进行排序,分组和分页等,MySQL 数据库有着更高级的查询方法以处理更加复杂的需求. 一,排序查询 在查询完成后,结果集中的数据是按默认顺序排序的.为了方便用户自 ...

  4. mysql数据库多表查询教程

    SQL会创建多表及多表的关系 需求: 分类表和商品表之间是不是有关系?如果有关系,在数据库中如何表示这种关系 ... 表结构请参考上一章 mysql单表查询. 技术分析: 多表之间的关系如何来维护 外 ...

  5. MySQL数据库多表查询,子查询

    写博客的第四天,今天来点数据库的操作,温故而知新,在前进的路上,多看看自己曾经走过的路,不要忘了自己是怎么一步一步走过来的,对于前方未知的道路,不要轻言放弃. 今天的内容全部是MySQL里面的语句,基 ...

  6. mysql数据库连表查询的几种方法

    1.首先介绍表连接分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right join ...

  7. MySQL数据库----多表查询,表连接

    一.查询概述: 查询:指的是针对表中已经存在的数据,可以按照特定组合,条件,或者次序等等来进行一系列的检索查看操作------>select语句. 二.查询的基本操作: 1.查询语句的基本结构: ...

  8. MySQL数据库多表查询练习题

    原题目数据库请查看作者资源免费下载 (https://download.csdn.net/download/MeiJin_/86403712) 多表查询的思路 类似于生活日常中解决问题方式 第一步干什 ...

  9. MySQL数据库——多表查询介绍

    目录 数据准备 笛卡尔积 内连接 显示内连接 隐式内连接 外连接 左外连接 右外连接 子查询 基本运用举例 子查询的不同情况 子查询的结果是单行单列的 子查询的结果是多行单列的 子查询的结果是单行多列 ...

最新文章

  1. 【2011-3】【旋转表格】
  2. python常用模块大全总结-Python模块汇总(常用第三方库)
  3. Angular界面元素CSS样式的条件式施加方式
  4. 计算机上播放时没声音什么故障,事实:在笔记本电脑上播放歌曲时如果没有声音怎么办...
  5. XML学习(一)————XML简介
  6. css 文字重叠_html网页文字重叠 字体叠加显示css如何解决
  7. 如何遍历JavaScript中的对象
  8. Cookie中的httponly的属性和作用
  9. matlab画圆函数
  10. VS Code 快捷打开(localhost)PHP页面
  11. Ubuntu 18.04实现实时显示网速
  12. 会声会影批量处理素材设置教程
  13. 如何用PDF编辑器更改和隐藏PDF批注
  14. MATLAB:ode45
  15. 文件服务器文件删除记录查询,Windows server2008r2共享文件操作记录、查询服务器日志方法...
  16. 数据治理和数据安全治理有何不同?
  17. HDU1435 Stable Match 【稳定婚姻问题】
  18. MyEclipse汉化包以及安装教程(附图),适用于8.5及各种版本
  19. 计算机word2003操作试题,职称计算机word2003操作试题
  20. Citrix XenDesktop

热门文章

  1. 用计算机唱歌 丑八怪乐谱,丑八怪歌曲谱子_丑八怪简谱
  2. python输出宽度是什么意思_Python输出长度
  3. 记录阿里云服务器mysql被黑
  4. 牛客网 2018校招真题 滴滴出行 寻找丑数
  5. iOS 15.1即将上线,iPhone13的“苹果手表解锁”Bug已被修复
  6. msconfig设置最大内存导致电脑无法启动解决方法
  7. 贪嗔痴慢疑 什么是绮语、两舌、恶口?
  8. 什么是 ML.NET?应该如何理解机器学习基础知识?
  9. 九龙证券|“股神”也做短线?巴菲特减仓逾八成台积电
  10. Twitter整合营销的方法技巧