zoukankan      html  css  js  c++  java
  • 基础SQL总结

    推荐一个可以下线联系SQL的网站(https://sqlbolt.com/),闯关式,适合新手。

    一、SELECT

    SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
    FROM mytable
        JOIN another_table
          ON mytable.column = another_table.column
        WHERE constraint_expression
        GROUP BY column
        HAVING constraint_expression
        ORDER BY column ASC/DESC
        LIMIT count OFFSET COUNT;
    
    

    查询的执行顺序

    1、FROM和JOINs
    首先执行该FROM子句和后续JOINs,以确定要查询的数据的总工作集。这包括此子句中的子查询,并且可能导致在包含要连接的表的所有列和行的后台创建临时表。
    
    2、WHERE
    一旦有了全部的工作数据集,就将首过WHERE约束应用于各个行,不满足约束的行将被丢弃。每个约束只能直接从FROM子句中请求的表中访问列。SELECT在大多数数据库中,查询部分中的别名 无法访问,因为它们可能包含依赖于尚未执行的查询部分的表达式。
    
    3、GROUP BY
    WHERE然后,将根据GROUP BY子句中指定列中的公共值对应用约束后的其余行进行分组。分组的结果是,该列中的行数与唯一值的数目一样多。隐式地,这意味着仅在查询中具有聚合函数时才需要使用它。
    
    4、HAVING
    如果查询中有一个GROUP BY子句,则该HAVING子句中的约束将应用于已分组的行,丢弃不满足约束的已分组的行。像该WHERE 子句一样,大多数数据库中的此步骤也无法访问别名。
    
    5、SELECT
    SELECT最后,查询部分中的所有表达式都会被计算。
    
    6、DISTINCT
    在其余的行中,将删除列中标记为的重复值的行DISTINCT。
    
    7、ORDER BY
    如果ORDER BY子句指定了顺序,则将按指定的数据以升序或降序对行进行排序。由于SELECT查询部分中的所有表达式均已计算,因此您可以在此子句中引用别名。
    
    8、LIMIT/OFFSET
    最后,落入由所指定的范围之外的行LIMIT和OFFSET从查询返回的被丢弃,在离开最后行的集合。
    

    难点总结

    HAVING理解
    HAVING用于group by 之后对分组后的数据进行过滤
    例如:查询计算机学院软件34班的人数
    
    SELECT clazz_name,count(*) as 班级人数 
    FROM t_user u
    JOIN t_clazz c
    ON u.clazz_id = c.clazz_id
    WHERE u.faculty_id = (
    	SELECT f.faculty_id FROM t_faculty f WHERE faculty_name = "计算机技术与软件工程学院"
    )
    group by u.clazz_id
    HAVING c.clazz_name = "软件17303"
    or c.clazz_name = "软件17304"
    
    

    JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN

    join(INNER JOIN)是最为常用的取俩表的交集
    LEFT JOIN左边表取全集,右表没有匹配的用null替代
    RIGHT JOIN右表取全集,左表没有匹配的用null替代
    FULL JOIN 两表取全集,左右两边没有匹配的用null替代
    

    详情参考:https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

  • 相关阅读:
    centos7开启关闭防火墙
    虚拟机vmnet1和vmnet8找不到,注册表没有删除干净,见图
    dhcp和static的区别
    SQL手册
    canal架构原理
    SQL优化(待完善)
    数仓简介
    java逆变与协变(待完善)
    mysqljoin的原理和优化
    深入理解java虚拟机阅读笔记
  • 原文地址:https://www.cnblogs.com/shaoyu/p/12122915.html
Copyright © 2011-2022 走看看