SQL 第四天:掌握 GROUP BY、HAVING、子查询和高级 SQL 概念

SQL 第四天:掌握 GROUP BY、HAVING、子查询和高级 SQL 概念

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

本文介绍了SQL的高级主题,包括GROUP BY用于分组,HAVING用于过滤聚合结果,子查询的嵌套使用,LIMIT和OFFSET用于结果分页,IN和NOT IN用于基于值列表的过滤,以及JOIN的使用条件。若无共同列,可使用CROSS JOIN或UNION。

🎯

关键要点

  • GROUP BY用于根据指定列的相同值对行进行分组,通常与聚合函数一起使用。
  • HAVING用于过滤聚合结果,而WHERE用于在分组之前过滤行。
  • 子查询是嵌套在另一个查询中的SQL查询,分为标量子查询、多行子查询和相关子查询。
  • LIMIT用于限制返回的行数,OFFSET用于跳过一定数量的行,常用于结果分页。
  • IN和NOT IN运算符用于基于值列表过滤结果,IN选择特定部门的员工,NOT IN排除特定部门的员工。
  • PostgreSQL的命名规则要求表名以字母或下划线开头,不能使用保留关键字。
  • 可以在表之间进行JOIN操作,前提是它们有共同的列(主键和外键)。
  • 如果两个表没有共同列,可以使用CROSS JOIN生成笛卡尔积,或使用UNION合并结果。

延伸问答

GROUP BY 和 HAVING 有什么区别?

GROUP BY 用于根据指定列的相同值对行进行分组,而 HAVING 用于过滤聚合结果。

什么是子查询,它有哪些类型?

子查询是嵌套在另一个查询中的 SQL 查询,主要有标量子查询、多行子查询和相关子查询。

如何使用 LIMIT 和 OFFSET 进行结果分页?

LIMIT 用于限制返回的行数,OFFSET 用于跳过一定数量的行,常用于分页显示结果。

IN 和 NOT IN 运算符的使用场景是什么?

IN 用于选择特定值的记录,NOT IN 用于排除特定值的记录,适合基于值列表的过滤。

在 PostgreSQL 中,表名的命名规则是什么?

表名必须以字母或下划线开头,可以包含字母、数字和下划线,不能使用保留关键字。

如何在没有共同列的情况下连接两个表?

可以使用 CROSS JOIN 生成笛卡尔积,或使用 UNION 合并结果。

🏷️

标签

➡️

继续阅读