zoukankan      html  css  js  c++  java
  • 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)`
    
  • 相关阅读:
    PHP快速排序算法
    PHP选择排序算法
    php几个常用的概率算法(抽奖、广告首选)
    免费Git客户端:sourcetree详细介绍
    apidoc @apiGroup兼容中文
    PHP中的精确计算bcadd,bcsub,bcmul,bcdiv 及 扩展安装
    mysql-表分区
    mysql表优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
    mysql-锁
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14137862.html
Copyright © 2011-2022 走看看