zoukankan      html  css  js  c++  java
  • mysql--浅谈子查询1

    这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师。

    依赖软件:mysql5.6

    系统环境:win

    子查询概念

    子查询就是在原有的查询语句中嵌入新的查询

    子查询分类

    1、where型子查询

    2、from型子查询

    3、exists型子查询

    三种子查询的详细说明

    1、where型子查询

    where型子查询:把内层的sql语句的查询结果作为外层的sql查询的条件

    # 语法
    select 查询项 from 表名
    where 列名=select 查询项 from 表名)--内层sql语句查询结果唯一(单行单列)
    where 列名 inselect 查询项 from 表名)--内层sql语句查询有一个以上的结果(多行单列)
    
    # 示例
    # 查询每个栏目下价格最贵的商品
    select goods_id,cat_id,shop_price,goods_name
    from goods
    where shop_price 
    in (select max(shop_price) from goods group by cat_id);

    2、from型子查询

    from型子查询:把内层的sql语句的查询结果作为临时表供外层sql语句再次查询

    # 语法
    select 查询项 
    from (select 查询项 from 表名 选择表达式)
    选择表达式
    
    
    # 示例
    # 查询每个栏目下goods_id最大的商品
    # 下面的代码在语意上是有问题的,在我的5.6版本的MySQL中可以查询到想要的结果,但是mysql官方文档上说了不支持这种子查询
    select * from( select goods_id,cat_id,shop_price,goods_name from goods order by goods_id desc,cat_id asc)as tmp group by cat_id;

    3、exists型子查询

    exitst型子查询:把外层sql查询到的行带入内层sql查询,要使内层查询成立

    # 语法
    select 查询项 from 表名
    where existsselect 查询项 from 表名 where 选择表达式)
    
    #示例
    #把有商品的栏目查询出来
    select cat_id,cat_name 
    from category 
    where exists(select * from goods where goods.cat_id=category.cat_id);

    由于mysql版本的变化,语法可能存在一定的变化,欢迎指出错误和评论区讨论
    打破当前不满足的方式就是当下默默努力!!!
  • 相关阅读:
    ES 分词器简单应用
    ElasticSearch 通过 Kibana 与 ElasticSearch-head 完成增删改查
    linux 通过docker安装 elasticsearch-head
    The container name "/nacos" is already in use by container
    mysql 用户及用户权限管理命令总结-用户添加及添加权限
    docker 安装 ElasticSearch 和 Kibana 及ik 中文分词器
    docker 安装 nacos
    mysql 主从状态查询及恢复
    那些看似牛逼的「快速阅读法」为什么全是错的!?
    新手VS高手,高手是怎么读书的?
  • 原文地址:https://www.cnblogs.com/Pang-Jie/p/10911229.html
Copyright © 2011-2022 走看看