• mysql 子查询


    一条查询语句出现在另外一条查询语句的内部,这条语句就被称之为子查询语句。

    子查询分类

    子查询可以根据子查询返回的结果以及子查询出现的位置两种方式进行分类

    按结果分类:

    标量子查询:子查询返回的结果是一行一列,一个字段的某一个值

    列子查询:子查询返回的结果是一列,多行,一个字段有多个值

    行子查询:子查询返回的结果是一行多列,多行多列

    表子查询:子查询返回的结果多行多列

    按照位置分类:

    where子查询:子查询出现在where条件之后

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

    exists子查询:出现在exists之后,exists出现在where之后

    标量子查询

    子查询返回的结果是一个标量

    列子查询

    子查询返回的结果是一列。

    需求:获取所有班级的所有学生,学生必须在班级中存在。

    select * from student where c_id is not null; -- 无法解决

    解决方案

    1. 获取所有的现有班级的idselect id from class;
    2. 从学生表中查出所有数据,判断学生的班级id是否在刚查出来的班级id中存在

    行子查询

    子查询返回的结果是一行多列

    需求:找出所有班级中年龄最大,同时身高最高的学生;

    行子查询必须构建行元素:有多个字段的元素

    select * from 表名 where (字段1,字段2…) =/in (select 字段1,字段2… from 表名);

    查找年龄最大的学生的所有信息

     查找年龄最大的男生的所有信息

    表子查询

    表子查询从返回结果的层面上讲与行子查询完全一样。因为其出现的位置不是在where之后,而是在where之前,from之后。from后接数据源。

    需求:求出每个班中身高最高的1个学生。

    表子查询出现的原因:因为某些时候,希望order bygroup by之前先执行。

    查找性别,年龄,姓名,班级 并以年龄升序;

  • 相关阅读:
    C程序设计语言学习笔记(二)
    字符串处理代码(国际化转换C++版) 荣
    取得MySQL数据库表,列信息的SQL语句 荣
    C++中,以类成员函数指针作为参数对std::map中的元素进行迭代处理 荣
    我的我的C#数据库操作类(与大家交流) 荣
    以较少代码实现DataGrid的排序,翻页,删除等功能 荣
    批处理文件的学习 荣
    DLL内存管理模板类 荣
    我的C++数据库访问库 荣
    我的C++数据库访问库临界区处理类 荣
  • 原文地址:https://www.cnblogs.com/lixiuyuan999/p/6370646.html
Copyright © 2020-2023  润新知