Post

SQL之母网站学习

网站链接

刷完30关,总结以下注意点:

  • 两个表中出现同样的列名才需要加前缀做区分

    select unique_id, name from employees left join employeeuni on employees.id = employeeuni.id

  • NULL 是一个特殊的值,表示缺少具体的数据或未知的值,它与其他任何值(包括它自身)进行比较都会返回未知的结果。在 SQL 中,我们不能使用标准的相等运算符 = 来判断列是否为 NULL。

  • 各语句前后顺序
    1
    2
    3
    4
    5
    6
    7
    8
    
      SELECT columns
      FROM table1
      WHERE conditions1
      LEFT JOIN table2 ON join_condition
      WHERE conditions2 --分组前过滤
      GROUP BY columns
      HAVING conditions3 --分组后过滤
      ORDER BY column_name [ASC|DESC]; --排序语句放在所有查询语句之后,排除开窗函数内包含的order by
    
  • INNER JOIN 表顺序交换不影响结果
    1
    2
    3
    
      SELECT *
      FROM table1
      INNER JOIN table2 ON table1.id = table2.id;
    

    CROSS JOIN 表顺序交换不影响结果

    1
    2
    3
    
      SELECT *
      FROM table1
      CROSS JOIN table2;
    
  • OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 【包含没有匹配的行】 在 OUTER JOIN 中,包括 LEFT OUTER JOINRIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分。

  • 子查询EXISTS

    SELECT name, age, class_id FROM student WHERE NOT EXISTS (SELECT 1 FROM class WHERE class.id = student.class_id);WHERE NOT EXISTS (SELECT class_id FROM class WHERE class.id = student.class_id);

    返回常量值1和返回表中的一列没区别,只要子查询返回值,说明存在,NOT EXISTS 的结果为假 只要子查询没有返回任何结果,NOT EXISTS 的结果都将为真,从而使得外层查询的条件满足。

  • select avg(score) as class_avg_score from student group by class_idselect avg(score) over (partition by class_id) as class_avg_score from student 什么区别?

    开窗函数 sum() over (partition by ...) 分组计算后能同时保留原始行的详细信息, 一般聚合函数分组计算完后每组只保留一行、行数减少。

  • 开窗函数 rank() /sum() over(partition by...order by .. asc) as order by score asc 是指在 partition by class_id 每个班里的分数 递增排序。

    rank的排名是指在 partition by class_id 每个班里按分数排名,若asc 分小排名高;若desc 分大排名高。

  • Rank 开窗函数对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。

    当存在并列(相同排序值)时,Rank 会跳过后续排名,并保留相同的排名。

    Row_Number 开窗函数为查询结果集中的每一行 分配唯一连续排名 的开窗函数。

    相比 Rank 函数,Row_Number 为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。每一行都有一个唯一的行号,从 1 开始连续递增。

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.