快盘下载:好资源、好软件、快快下载吧!

下载排行|最近更新

当前位置:首页软件教程电脑软件教程 → 什么是MySQL中子查询 如何使用MySQL子查询

什么是MySQL中子查询 如何使用MySQL子查询

时间:2019-10-30 17:33:18人气:作者:快盘下载我要评论

mysql子查询是什么:


查询操作是在某个查询结果上进行的,一条select语句内部包含了另外一条select语句。



MySQL子查询分类:


按结果和位置进行分类。


  • 按结果分类:

    根据子查询得到的数据进行分类,具体可以分成以下几类:

    • 标量子查询:子查询得到的结果是一行一列,出现的位置在where之后;

    • 列子查询:子查询得到的结果是一列多行,出现的位置在where之后;

    • 行子查询:子查询得到的结果是一行多列,出现的位置在where之后;

    • 表子查询: 子查询得到的结果是多行多列,出现的位置在from之后;

  • 按位置分类:

  • 根据子查询select语句在外部查询select语句中出现的位置进行分类,分为:

    • from子查询:子查询出现在from之后;

    • where子查询:子查询出现在where之后;

    • exists子查询: 子查询出现在exists之后;

标量子查询

  • 需求:知道班级名为PM3.1,想要获取该班的全部学生。

  • 思路:

    • 1.确定数据源,学生表
      SELECT * FROM student where c_id = ?;

    • 2.获取班级ID,通过班级名称来确定
      SELECT id FROM class where grade = "PM3.1";

    • 3.标量子查询
      SELECT * FROM student where c_id = (SELECT id FROM class where grade = "PM3.1");

列子查询

  • 需求:查询所有在读班级(学生表中存在的班级)的学生。

  • 思路:

    • 1.确定数据源,学生表
      SELECT * FROM student where c_id = ?;

    • 2.确定全部有效的班级ID
      SELECT * FROM class;

    • 3.列子查询
      SELECT * FROM student where c_id in (SELECT * FROM class);

  • 在列子查询的结果是一列多行时,需要使用in作为条件进行匹配;此外,还有三个类似的条件,分别是any、some、all

    • any等价于in,表示其中一个

    • any等价于some,而any和some用于否定时却有区别

    • all表示等于全部

  • 注意:上面的三个关键字使用时,都要搭配=来使用!any、some、all在用于否定时,其会将null值排除。

行子查询

  • 需求:查询年龄最大且身高最高的学生

  • 思路:

    • 1.确定数据源,学生表
      SELECT * FROM student where age = ? and height = ?;

    • 2.确定最大年龄和最大身高
      SELECT max(age), max(height) FROM student;

    • 3.行子查询
      SELECT * FROM student where (age, height) = (SELECT max(age), max(height) FROM student);

表子查询

  • 需求:找出每个班身高最高的学生

  • 思路:

    • 1.确定数据源,将学生身高按照降序排列
      SELECT * FROM student order by height DESC;

    • 2.从每个班中选第一个学生
      SELECT * FROM student group by c_id;

    • 3.表子查询
      SELECT * FROM (SELECT * FROM student order by height DESC) as student group by c_id;

exists子查询

  • exists:表示是否存在的意思,因此exists子查询就是用来判断某些条件是否满足(跨表),exists是接在where之后,其返回的结果为1或0,满足条件为1,反之为0.

  • 需求:班级存在条件下,查询所有的学生

  • 思路:

    • 1.确定数据源
      SELECT * FROM student WHERE ?;

    • 2.确定条件是否满足
      exists(SELECT * FROM class);

    • 3.exists子查询
      SELECT * FROM student where exists(SELECT * FROM class);

相关文章

  • mysql 5.7 修改max_allowed_packet无效解决办法

    通信数据包是发送到MySQL服务器的单个SQL语句,发送到客户端的单个行或从主复制服务器发送到从属服务器的二进制日志事件。可以与MySQL 5.7服务器或客户端之间进行传输的最大数据包为1GB。...
  • mysql5.7实现远程连接数据库教程

    数据库安装之后,使用命令操作太复杂了。也记不住,使用图形化工具或者phpmyadmin最方便了。但是不能直接远程连接,需要开启远程连接才可以使用。。以下是开启mysql远程命令。...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。