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)`
    
  • 相关阅读:
    docker指令汇总
    springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
    RabbitMQ 消息确认机制
    RabbitMQ 最常用的三大模式
    RabbitMQ 核心概念
    RabbitMQ 之简单队列
    Spring 详解(三)------- SpringMVC拦截器使用
    slf4j 搭配 log4j2 处理日志
    Spring 详解(二)------- AOP关键概念以及两种实现方式
    Spring 详解(一)------- AOP前序
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14137862.html
Copyright © 2011-2022 走看看