在本指南中,我们将讨论SQL查询的基本语法以及一些更常用的函数和运算符。我们还将使用PostgreSQL数据库中的一些示例数据来练习SQL查询。...创建示例数据库 在我们开始在SQL中进行查询之前,我们将首先创建一个数据库和几个表,然后使用一些示例数据填充这些表。这将使您在以后开始查询时获得一些实践经验。...这是聚合函数发挥作用的地方。 聚合函数 通常,在处理数据时,您不一定要查看数据本身。相反,您需要有关数据的信息。SQL语法包含许多函数,只允许您通过发出SELECT查询来解释或运行数据计算。...除了FROM和WHERE之外,最常用的查询子句之一是GROUP BY子句。它通常在您对一列执行聚合函数时使用,但与另一列中的匹配值相关。 例如,假设您想知道有多少朋友更喜欢您制作的三个主菜中的每一个。...对于任何查询,您可以指定从哪个表中选择一个列,如同在任何查询中一样,尽管从单个表中进行选择时没有必要,正如我们在前面的部分中所做的那样。让我们使用我们的示例数据来演示一个示例。
<=等一起使用 SELECT name FROM customers WHERE name = ‘Bob’; AND AND 在单个查询中组合两个或多个条件,必须满足所有条件才能返回结果。...,您可以添加额外的 _ 字符来扩展长度要求,即x___% IN IN 允许我们在使用 WHERE 命令时指定要选择的多个值。...customers DROP COLUMN surname; 聚合函数 (COUNT/SUM/AVG/MIN/MAX) 聚合函数对一组值执行计算并返回单个结果。...SELECT AVG(age) FROM customers; MIN MIN 返回数字列的最小值。...SELECT MAX(age) FROM customers; GROUP BY GROUP BY 语句将具有相同值的行分组为汇总行,该语句通常与聚合函数一起使用。
这意味着表的结构、属性和索引都是完整的: DELETE FROM table_name 或者: DELETE * FROM table_name 二、高级 1.TOP 子句 TOP 子句用于规定要返回的记录的数目...语法和上述UNIQUE相同。 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。...DROP COLUMN column_name 16.AUTO INCREMENT 字段(自增) 我们通常希望在每次插入新记录时,自动地创建主键字段的值。...如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分! 19.SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。...6.MIN() 函数 MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
AND...联合使用 空值检查 当我们创建表的时候,可以指定其中的列是否包含空值。在一个列不包含值时,称其包含空值NULL。...我们需要直接从数据库中检索出来进行转换、计算或者格式化过的数据。计算字段并不实际存在于数据库表中。计算字段是运行时在select语句内创建的。 拼接字段 将多个字段联结在一起构成单个字段。...,不能用于计算或者表达式 3、DISTINCT用于MAX()和MIN()意义不大,因为最值不管是否考虑去重,都是一样的 组合聚集函数 在SELECT子句中是可以包含多个聚集函数 SELECT AVG...; -- 分组的列 GROUP BY子句使用时候的常见规定: GROUP BY子句可以包含任意数目的列,可以对分组进行嵌套 GROUP BY子句中列出的每一列都是检索列或者有效的表达式(但是不能是聚集函数...任意列都可以使用(非选择的列也可以使用) 只可能使用选择列或者表达式列,而且必须使用每个选择列表达式 不一定需要
MySQL 字符串模式支持两个通配符:“%” 和 “_”,且当使用通配符匹配文本时,不区分字母大小写。...;③ “%” 匹配零或多个任意字符;④ “_” 匹配单个任意字符;⑤ 如果需要匹配通配符,则需要使用 “\” 转义字符,如 “\%” 和 “\_”;⑥ 使用通配符匹配文本时,不区分字母大小写;⑦ 如果...GROUP BY 子句的分组字段或表达式至少一个,可以多个;③ 子句是可选的,用来过滤分组数据,需要使用逻辑表达式作为条件,其中逻辑表达式中的字段或表达式只能使用分组使用的字段和聚合函数。...④ GROUP BY 子句经常用于数据统计汇总,通常使用聚合函数;⑤ 经常使用的聚合函数主要有:SUM() 求总和 、AVG() 求平均值、MAX() 求最大值、MIN() 求最小值、COUNT() 计数...我们分别使用 CASE 子句或 FIELD() 函数实现它。
] expr) 求最小值 SUM([distinct] expr) 求累加和 ①每个组函数接收一个参数 ②默认情况下,组函数忽略列值为null的行,不参与计算 ③有时,会使用关键字distinct...剔除字段值重复的条数 注意: 1)当使用组函数的select语句中没有group by子句时,中间结果集中的所有行自动形成一组,然后计算组函数; 2)组函数不允许嵌套,例如:count(max(...(salary) | +-------------+ | 1000.00 | +-------------+ 注意:如果统计的列中只有NULL值,那么MAX和MIN就返回NULL 3、sum和avg...[where 查询条件] [group by 字段名] [having 过滤条件] 1、group by子句 根据给定列或者表达式的每一个不同的值将表中的行分成不同的组,使用组函数返回每一组的统计信息...注意: 在去重操作时,如果列值中包含NULL值,认为它们是相等的
] expr) 求最小值 SUM([distinct] expr) 求累加和 ①每个组函数接收一个参数 ②默认情况下,组函数忽略列值为null的行,不参与计算 ③有时,会使用关键字distinct...剔除字段值重复的条数 注意: 1)当使用组函数的select语句中没有group by子句时,中间结果集中的所有行自动形成一组,然后计算组函数; 2)组函数不允许嵌套,例如:count(max(...(salary) | +-------------+ | 1000.00 | +-------------+ 注意:如果统计的列中只有NULL值,那么MAX和MIN就返回NULL 3、sum和avg...[where 查询条件] [group by 字段名] [having 过滤条件] 1、group by子句 根据给定列或者表达式的每一个不同的值将表中的行分成不同的组,使用组函数返回每一组的统计信息...GROUP BY配合,如果只有HAVING子句而没有GROUP BY,表中所有的行分为一组 2)HAVING子句中可以使用组函数 3)HAVING子句中的列,要么出现在一个组函数中,要么出现在GROUP
汇总数据 聚集函数 聚集函数指的是对某些行运行的一个函数,并且返回一个值,常用的聚集函数有: 函数 作用 AVG() 返回列的平均值 COUNT() 返回列的函数 MAX() 返回列的最大值 MIN()...,不能用于计算或者表达式 3、DISTINCT用于MAX()和MIN()意义不大,因为最值不管是否考虑去重,都是一样的 组合聚集函数 在SELECT子句中是可以包含多个聚集函数 SELECT AVG...对产生的输出排序 对行分组,但输出可能不是分组的顺序 任意列都可以使用(非选择的列也可以使用) 只可能使用选择列或者表达式列,而且必须使用每个选择列表达式 不一定需要 如果和聚集函数一起使用列,则必须使用...是 FROM 从中检索数据的表 仅在从表选择数据时使用 WHERE 行级过滤 否 GROUP BY 分组说明 仅在按照组计算聚集时使用 HAVING 组级过滤 否 ORDER BY 输出排序顺序 否...WHERE C.cust_id = O.cust_id -- 多个表联结查询 AND OI.order_num = O.order_num AND prod_id = 'RGAN01' 3、外联结 有时候我们需要将一个表中的行和另一个表中行相关联
可以把列修改为不使用NULL,这需要在创建表时使用关键字NOT NULL。 创建表时使用DEFAULT,可于日后输入缺乏部分数据的记录时自动的填入默认值。...A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。 不能单纯的使用另一张表的键,称之为外键,而不加上约束吗?...第二范式(2NF) 符合1NF 没有部分函数依赖性 函数依赖性 当某列的数据必须随着另一列的数据改变而改变时,表示第一列函数依赖与第二列。...第三范式(3NF) 符合2NF 没有传递函数依赖性 ---- 我为什么需要交叉联接? A:知道交叉联接的存在,有助于我们找出修正联接的正确方式。...,所以子查询里只会返回单一值,特定行和列的交叉点,这一个值将是WHERE子句中比对数据列的条件。
聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。 1. 聚合函数介绍 什么是聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值。...[在这里插入图片描述] 1.2 MIN和MAX函数 可以对任意数据类型的数据使用 MIN 和 MAX 函数。...ROLLUP; 注意: 当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。...HAVING 在 GROUP BY 之后,可以使用分组字段和分组中的计算函数,对分组的结果集进行筛选,这个功能是 WHERE 无法完成的。另外,WHERE排除的记录不再包括在分组中。...HAVING 可以使用分组中的计算函数 在最后的结果集中进行筛选,执行效率较低 开发中的选择: WHERE 和 HAVING 也不是互相排斥的,我们可以在一个查询里面同时使用 WHERE
那么这次我们需要掌握的则是. 1.使用select 语句查询所有的字段跟指定的字段. 2.按照条件查询.使用运算符以及不同的关键字进行查询. 3.为表跟字段起别名 4.聚合函数的使用....] expr) 求最小值 SUM([distinct] expr) 求累加和 ①每个组函数接收一个参数 ②默认情况下,组函数忽略列值为null的行,不参与计算 ③有时,会使用关键字distinct...剔除字段值重复的条数 注意: 1)当使用组函数的select语句中没有group by子句时,中间结果集中的所有行自动形成一组,然后计算组函数; 2)组函数不允许嵌套,例如:count(max(...[where 查询条件] [group by 字段名] [having 过滤条件] 1、group by子句 根据给定列或者表达式的每一个不同的值将表中的行分成不同的组,使用组函数返回每一组的统计信息...注意: 在去重操作时,如果列值中包含NULL值,认为它们是相等的
使用 GROUP BY 子句进行分组 在许多情况下,我们希望对数据进行分组并在每个分组上执行聚合函数,以便更细致地分析数据。这时就需要使用 GROUP BY 子句。...GROUP BY 子句 GROUP BY 子句用于将结果集按照一个或多个列的值进行分组。它允许我们在每个分组上应用聚合函数,从而生成每个分组的摘要信息。...这将返回每个部门的平均工资摘要信息。 4. HAVING 子句的用法 HAVING 子句允许我们在 GROUP BY 子句之后对分组的结果进行过滤。...聚合函数可用于计算百分比、比例和进行数据透视,有助于更深入地分析数据。 在使用聚合函数时,需要注意以下几点: 理解数据的结构和需要的计算,选择合适的聚合函数。...使用 GROUP BY 子句将数据分组,以便按照特定的标准进行摘要。 使用 HAVING 子句对分组后的数据进行过滤,只选择符合条件的分组。 嵌套聚合函数时,确保计算的顺序和逻辑正确。
②获得表中行组的和 ③找出表列(或所有行或某些特定的行)的最大值、最小值和平均值 聚集函数(aggregate function):运行在行组上,计算和返回单个值的函数(MySQL还支持一些列的标准偏差聚集函数...; 这条SQL语句中min()返回products表中price列最小值; PS:MySQL允许min()用来返回任意列中的最小值,包括返回文本列的最小值;但用于文本数据时,如果数据按相应的列排序,则min...()返回最前面的行(min()函数忽略列值为null的行) 5、sum()函数 sum()函数用来返回指定列值的和(总计);例子如下: select sum(quantity) as items_ordered...的最高、最低以及平均值) PS:在指定别名以包含某个聚集函数的结果时,不应该使用表中实际的列名;这样便于使用SQL更加容易和理解,以及排除方便排除错误。...order by的重要性:一般使用group by子句时,应该也给出order by子句,这是保证数据正确性的唯一方法(千万不要依赖group by排序数据)。 4、select子句顺序 ?
更新记录时要小心。如果省略该 WHERE子句,则所有记录都将被更新!...() 和 MAX()函数求最大最小值 MIN()函数返回所选列的最小值。...: 练习: 使用该MIN函数选择Price列的最小值的记录。...SELECT MIN(Price) FROM Products; COUNT()、AVG() 和 SUM()函数 该COUNT()函数返回与指定条件匹配的行数。...该GROUP BY语句通常与聚合函数 ( COUNT(), MAX(), MIN(), SUM(), AVG()) 一起使用, 以按一列或多列对结果集进行分组。
介绍 安装SQL数据库时,需要添加,修改,删除和查询数据所需的所有命令。这个备忘单样式指南提供了一些最常用的SQL命令的快速参考。...在RDBMS之间存在显着差异的地方,我们已经包含了替代命令。 要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。...,请使用以下MIN函数: SELECT MIN(column) FROM table; 使用ORDER BY子句对结果进行排序 一个ORDER BY子句用于查询结果进行排序。...就其本身而言,上一节中描述的聚合函数仅返回单个值。但是,您可以通过包含GROUP BY子句来查看对列中每个匹配值执行的聚合函数的结果。...INNER JOIN将返回两个表中具有匹配值的所有记录,但不会显示任何没有匹配值的记录。 通过使用外部 JOIN子句,可以从两个表中的一个表中返回所有记录,包括在另一个表中没有相应匹配的值。
子句只能指定行的条件,而不能指定组的条件(这里面有个“阶”的概念,可以查阅:神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列),因此就有了 HAVING 子句,它用来指定组的条件...聚合后的这个结果并没有 cname 这个列,那么通过这个列来进行条件处理,当然就报错了啦 细心的小伙伴应该已经发现,HAVING 子句的构成要素和包含 GROUP BY 子句时的 SELECT...像这样需要根据大小关系生成子集时,就轮到非等值自连接出场了 -- 求中位数的SQL 语句:在HAVING 子句中使用非等值自连接 SELECT AVG(DISTINCT salary) FROM (...通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,那么就减少了聚合操作时的需要排序的记录数量;而 HAVING 子句是在排序之后才对数据进行分组的,与在 WHERE 子句中指定条件比起来... 2、HAVING 子句的要素 3 个要素:常亮、聚合函数 和 聚合键 HAVING 大多数情况下和结合 GROUP BY 来使用,但不是一定要结合 GROUP BY 来使用 3
:now() SQL常用的聚合函数 max(求最大值) min(求最小值) sum(求累加和) avg(求平均) count(统计行数数量) Group By和Order By GROUP BY...里出现,ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中 where和having子句的区别 having和where的区别: 作用的对象不同。...这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算 综上所述: having一般跟在group by之后,执行记录组选择的一部分来工作的。...在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。...我们使用索引时,可以尽量去使用覆盖索引来避免回表的过程,因为我们自己建的索引为非聚簇索引,根据索引定位到数据后,可以找到索引列数据和主键数据,但是如果你的索引不是覆盖索引,那你需要的字段并没有全部包含在当前已经查询到的数据
(*) from stu_class; --查询sclass这一列不为空时的总记录数 select count(sclass) from stu_class; DISTINCT函数 DISTINCT会消除重复记录后再使用组函数...除了COUNT(*)和DISTINCT(COLUMN)之外,其他所有分组函数都会忽略列表中的空值,然后再进行计算 在分组函数中使用NVL函数可以使分组函数强制包含含有空值的记录 select avg(...BY子句 创建数据组 使用GROUP BY子句可将表中满足WHERE条件的记录按照指定的列划分成若干个小组,其中GROUP BY子句指定要分组的列 SELECT [column,] group_function...[ORDER BY column|group_function(column)expression] 使用GROUP BY子句 在SELECT列表中除了分组函数那些项,所有列都必须包含在...通过WHERE子句进行非分组函数筛选判断 通过GROUP BY子句完成分组操作 通过HAVING子句完成组函数筛选操作 通过SELECT子句选择显示的列或表达式及组函数
DISTINCT使用户可以从表中选择不同的值,即,如果多个属性包含相同的值,则仅考虑单个不同的值进行计算。...SQL MIN()函数从表的相应列返回所有选定值的最小值 。...SQL SUM()可以与SQL GROUP BY子句一起使用,以特定的标签/值表示输出结果。...此函数返回表的记录集中存在的所有值的计数。...因此,在本文中,我们了解了不同SQL聚合函数。
NULL 与不匹配 在通过过滤选择出不具有特定值的行时,你可能希望返回具有 NULL 值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。...在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。 在使用 GROUP BY 子句前,需要知道一些重要的规定。...使用 HAVING 时应该结合GROUP BY 子句,而 WHERE 子句用于标准的行级过滤。 一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。...通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。 虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于()等。...在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL 创建指定列中各词的一个索引,搜索可以针对这些词进行。
领取专属 10元无门槛券
手把手带您无忧上云