多表查询不用join,多表查询,自连接,子查询

 2023-09-25 阅读 14 评论 0

摘要:mysql5 复合查询多表查询笛卡尔积多表查询自连接子查询单行子查询多行子查询in关键字all关键字any关键字在from语句中使用子查询合并查询unionunion all 多表查询 笛卡尔积 select * from [表1],[表2],...; 多表查询不用join? 例如这两张表,如果我想输出全部数据

mysql5 复合查询

  • 多表查询
    • 笛卡尔积
    • 多表查询
  • 自连接
  • 子查询
    • 单行子查询
    • 多行子查询
    • in关键字
    • all关键字
    • any关键字
    • 在from语句中使用子查询
    • 合并查询
      • union
      • union all

多表查询

笛卡尔积

select * from [1],[2],...;

多表查询不用join?在这里插入图片描述
在这里插入图片描述

例如这两张表,如果我想输出全部数据,会产生下面的情况

在这里插入图片描述

会发现现在class表中的数据随机组合了stu表,这就产生了笛卡尔积的情况;

多表查询

如果想要其中的几行数据,可以这么写
select [1],[2],... from [1],[2],... where [1].[1]=[2],[2];

在这里插入图片描述

1、一定要表明字段属于哪一个表,特别是拥有相同名字的列的时候
2、使用该约束条件可以过滤两张表形成的笛卡尔积,筛选出来想要的数据

自连接

自连接是指在一张表连接查询例如在下表中我想知道有人得了99分的班级的所有人的成绩

连接查询和子查询哪个效率高,在这里插入图片描述

1、可以使用子查询的方式(嵌套查询)
首先我需要查出来这个人是哪个班的,再输出那个班级所有人的成绩

在这里插入图片描述

采用子查询的方式后便是

在这里插入图片描述

2、可以给这张表定义别名

子查询一定比连接查询快吗?在这里插入图片描述

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询

返回单行单列记录的子查询

多行子查询

返回多行记录的字查询

好像在说废话

in关键字

指的是匹配结果任意一个满足就返回
这有一张表,我要找到跟赵铁柱成绩一样的人,输出班级姓名成绩

在这里插入图片描述
在这里插入图片描述

all关键字

必须和结果中的所有都进行比较,全部满足条件才返回
还是那张表,我想找到成绩比3班所有人都成绩高的

什么是子查询、在这里插入图片描述

any关键字

只需要满足条件之一就返回
依旧是那张表,我想找到比3班任意学生分数高的,包括自己班的学生

在这里插入图片描述

在from语句中使用子查询

将每个子查询都当做临时数据表来看

合并查询

union

用于取得两个结果集的并集,当使用时会自动去掉重复行

union all

用于取得两个结果集的并集,当使用时不会自动去掉重复行

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/95102.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息