• MySQL数据库之子查询


    子查询

    • 语法

      • select * from 表1 where (子查询)
    • 说明

      • 外面的查询称为父查询
      • 子查询为父查询提供查询条件

    标量子查询

    • 特点
      • 子查询返回的值是一个
    MariaDB [sel]> select * from resume where name=(select name from resume where id=3);
    +----+-------+-----------+
    | id | name  | skill     |
    +----+-------+-----------+
    |  3 | Jerry | php,mysql |
    +----+-------+-----------+
    # `1 row in set (0.010 sec)`
    
    • 找到数学最高分
    MariaDB [sel]> select * from grades where name=(select name from grades order by math desc limit 1);
    +-------+---------+------+
    | name  | chinese | math |
    +-------+---------+------+
    | Sunny |      93 |   96 |
    +-------+---------+------+
    # `1 row in set (0.004 sec)`
    
    MariaDB [sel]>  select * from grades where name=(select name from grades where math=(select max(math) from grades));
    +-------+---------+------+
    | name  | chinese | math |
    +-------+---------+------+
    | Sunny |      93 |   96 |
    +-------+---------+------+
    # `1 row in set (0.001 sec)`
    

    列子查询

    • 特点
      • 子查询返回的结果是一列
      • 如果子查询的结果返回多条记录,不能使用等于,用in或not in
    MariaDB [sel]> select * from grades where name in (select name from grades where math>92);
    +-------+---------+------+
    | name  | chinese | math |
    +-------+---------+------+
    | Sunny |      93 |   96 |
    | Marry |      95 |   94 |
    | Tommy |      98 |   94 |
    +-------+---------+------+
    # `3 rows in set (0.007 sec)`
    
    MariaDB [sel]> select * from grades where name not in (select name from grades where math>92);
    +-------+---------+------+
    | name  | chinese | math |
    +-------+---------+------+
    | Jerry |      97 |   91 |
    +-------+---------+------+
    # `1 row in set (0.008 sec)`
    
    MariaDB [sel]> select * from grades where name in (select name from grades where math<92);
    +-------+---------+------+
    | name  | chinese | math |
    +-------+---------+------+
    | Jerry |      97 |   91 |
    +-------+---------+------+
    # `1 row in set (0.000 sec)`
    

    行子查询

    • 特点
      • 子查询返回的结果是多个字段组成
    MariaDB [sel]> select * from grades where (sex,math) in (select sex,max(math) from grades group by sex);
    +-------+------+---------+------+
    | name  | sex  | chinese | math |
    +-------+------+---------+------+
    | Sunny | boy  |      93 |   96 |
    | Marry | girl |      95 |   94 |
    +-------+------+---------+------+
    # `2 rows in set (0.001 sec)`
    

    表子查询

    • 特点
      • 将子查询的结果作为表
      • from后面跟的是数据源,如果将子查询当成表来看, 必须给结果集取别名
    MariaDB [sel]> select * from (select * from grades order by math desc) best group by sex;
    +-------+------+---------+------+
    | name  | sex  | chinese | math |
    +-------+------+---------+------+
    | Sunny | boy  |      93 |   96 |
    | Marry | girl |      95 |   94 |
    +-------+------+---------+------+
    # `2 rows in set (0.007 sec)`
    

    存在子查询

    • 特点
      • 提高查询效率
    MariaDB [sel]> select * from grades where exists (select * from grades where math>90);
    +-------+------+---------+------+
    | name  | sex  | chinese | math |
    +-------+------+---------+------+
    | Sunny | boy  |      93 |   96 |
    | Jerry | boy  |      97 |   91 |
    | Marry | girl |      95 |   94 |
    | Tommy | boy  |      98 |   94 |
    +-------+------+---------+------+
    # `4 rows in set (0.001 sec)`
    
    MariaDB [sel]> select * from grades where not exists (select * from grades where math>90);
    # `Empty set (0.001 sec)`
    
  • 相关阅读:
    jmeter性能测试指标
    jmeter中的几个重要测试指标释义
    jmeter2------常见元件
    jmeter1---------jmeter常用语和结果字段
    jmeter中默认语言的显示
    接口压测工具--jmeter(转)
    正则表达式(二)
    正则表达式(一)
    Python爬虫 爬取Web页面图片
    python 线程与进程
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14137862.html
Copyright © 2020-2023  润新知