*)和count(name)的值不一样,即当使用的是 count(name) 查询时,就丢失了两条值为 NULL 的数据。...解决方案要解决以上的问题,只要修改条件,将姓名不等于Java或者是空值的查出来即可,执行 SQL 如下:执行结果如下:可以看出10条数据都查询出来了,这个结果符合我们的正常预期。...4.导致空指针异常当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。...为了演示这个问题,首先我们先构建一张表和一些测试数据:表中原始数据如下:接下来我们使用 sum 查询,执行以下 SQL:查询执行结果如下:当查询的结果为 NULL 而非 0 时,就可以导致空指针异常。...解决空指针异常可以使用ifnull()对空值进行处理来避免空指针异常:查询执行结果如下:5.增加了查询难度当字段中有了空值,对于null值或者非null值的查询难度就增加了,必须使用与null匹配的查询方法
VALUES子句或查询的值都与显式或隐式的列列表从左到右。 如果要添加表中的所有列的值,可能不需要在SQL查询中指定列(次)名称。但要确保表中是在相同的顺序的列值的顺序。...JOIN: 即使左表中没有匹配,也从右表返回所有的行; FULL JOIN: 只要其中一个表中存在匹配,就返回行。...GROUP BY可以用来执行相同的功能在子查询中的ORDER BY。 子查询返回多于一行只能用于使用多值的运算符,如为IN,EXISTS,IN,ANY / SOME,ALL运算符。...而IN引导的子查询只能返回一个字段 EXISTS : 强调的是是否返回结果集,不要求知道返回什么,IN则需要知道返回的字段值。...这些表达式必须都可以转换成一个普通的数据类型,它将会是结果类型。列表中的NULL值将被忽略。只有所有表达式的结果都是 NULL 的时候,结果才会是 NULL。
SQL聚合函数 SUM 返回指定列值之和的聚合函数。...通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。 SUM可以在引用表或视图的SELECT查询或子查询中使用。...SUM(DISTINCT BY(col2) col1)只汇总col2值不同(唯一)的记录中的col1字段值。 但是请注意,不同的col2值可能包含一个单独的NULL值。...对于数据类型为DOUBLE的表达式,SUM返回数据类型为DOUBLE的表达式。 对于所有其他数字数据类型,SUM返回数据类型numeric。 SUM返回精度为18的值。...在派生SUM聚合函数值时,数据字段中的NULL值将被忽略。 如果查询没有返回任何行,或者返回的所有行的数据字段值为NULL, SUM返回NULL。
文档 删除集合 db.collection.drop() db.user.drop() : 删除user集合 文档操作 一个集合中可以包含多条文档,一个文档就相当于SQL中的一条数据,这里的文档是JSON...如果count的值大于数组中元素的数量,该查询返回数组中的所有元素的。...默认值为 false. sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。...null,max_age:{$max:"$age"}}}]) : 求出年龄最大的人信息 { "_id" : null, "max_age" : 40 } 常用的聚合 表达式 描述 实例 $sum 计算总和...$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。
7 聚集函数 聚集函数是以值集为输入并返回单个值的函数,SQL标准提供了五个标准聚集函数。平均值avg,最小值min,最大值max,总和sum和计数count。...7.4 对空值和布尔值的聚集 考虑如下查询: select sum(salary) from instructor; 如果有教师的薪资是null,SQL将忽略其值。...8.3 空关系测试 SQL中包含一个特性,测试一个子查询的结果是否存在元组,exist结构在作为参数的子查询非空时返回true值。...8.7 标量子查询 SQL允许子查询出现在返回单个值的表达式能够出现的任何地方,只要该子查询只返回一个包含单个属性的元组,这样的子查询成为标量子查询。举个栗子,列出所有的系以及每个系中的教师总数。...但是当在表达式中使用标量子查询时,它出现的位置是期望单个值出现的地方,SQL就该从该关系中包含单个属性的单个元组中隐式的取出相应的值,并返回该值。
谓词 什么是谓词 谓词就是返回值为真值的函数。对于通常的函数来说,返回值有可能是数字、字符串和日期等,但是谓词的返回值全部是真值。这也是谓词和函数的最大区别。...如果不想让结果包含临界值,那就必须使用。...、IS NOT NULL—判断是否为NULL 为了选取某些值为NULL的列的数据,不能使用=,而只能使用特定的谓词IS NULL。...如果存在这样的记录就返回真(TRUE),如果不存在这样的记录就返回假(FALSE)。EXISTS(存在)谓词的主语是“记录”。...所谓求值,就是要调查该表达式的真值是什么,如果结果为真(TRUE),那么就返回THEN子句中的表达式,CASE表达式的执行到此为止。如果结果不为真,那么就跳转到下一条的WHEN子句的求值之中。
描述 这三个方差聚合函数在丢弃NULL值后返回表达式值的统计方差。 也就是说,从数据集的平均值变化的量,表示为一个正数。 返回值越大,值的数据集的变化就越大。...如果数据集只包含一个值(没有可能的可变性),则返回0。 如果数据集没有值,则返回NULL。...如果数据集中的所有值都具有相同的值(无可变性),则返回0。 如果数据集只包含一个值(没有可能的可变性),则返回NULL。 如果数据集没有值,则返回NULL。 使用与方差相同的变量计算。...如果数据集中的所有值都具有相同的值(无可变性),则返回0。 如果数据集只包含一个值(没有可能的可变性),则返回0。 如果数据集没有值,则返回NULL。...如果查询没有返回行,或者返回的所有行的数据字段值为NULL,则返回NULL。 与所有聚合函数一样,统计方差函数可以采用一个可选的DISTINCT子句。
中篇的重点在于,在复杂情况下使用表表达式的查询,尤其是公用表表达式(CTE),也就是非常方便的WITH AS XXX的应用,在SQL代码,这种方式至少可以提高一倍的工作效率。...本系列包含上中下三篇,内容比较驳杂,望大家耐心阅读: 那些年我们写过的T-SQL(上篇):上篇介绍查询的基础,包括基本查询的逻辑顺序、联接和子查询 那些年我们写过的T-SQL(中篇):中篇介绍表表达式、...表表达式Table Expression是一种命名的查询表达式,代表一个有效的关系表与其他表的使用类似。SQL Server支持4种类型的表表达式:派生表、公用表表达式、视图等。...开窗函数 其根据基础查询的行子集计算,为子集中每行计算一个标量结果值,行子集被称为"窗口",通过OVER字句进行相关操作,简单来说以前对分组查询操作GROUP BY的粒度仅限于一个聚合函数(子查询操作也类似...3个阶段:第一个阶段为GROUP BY empid分组阶段;第二阶段为扩展阶段通过在SELECT字句中使用针对目标列的CASE表达式;最后一个阶段聚合阶段通过对每个CASE表达式结果聚合,例如SUM。
-- 问题出在 sql 计算的顺序上,sql会优先处理and条件,所以上面的sql语句就变成了 -- 查询变成了为年龄22的不管性别,或者年龄为 25的女生 -- 如何改造sql符合我们的查询条件呢?...> > 可以使用like语句进行某个字段的模糊搜索, > > 例如: 查询 name字段中包含五的数据 ```mysql -- like 语句 like某个确定的值 和。...%代表任意个任意字符 -- 查询name字段中包含五的 select * from users where name like '%五%'; -- 查询name字段中最后一个字符 为 五的...,如果指定的列上出现了NULL值,那么为NULL的这个数据不会被统计 -- 假设有下面这样的一张表需要统计 +------+-----------+------+--------+-----------...| 是否必须 | | -------- | -------------------------------- | ------------------ | | select | 要返回的列或表达式
:将返回结果为TRUE的第一个WHEN逻辑表达式所关联的THEN子句中指定的值。...如果没有任何WHEN表达式结果为TRUE,CASE表达式则返回ELSE子句中出现的值。...非NULL值得表达式返回值为0,因此,它们会排在NULL值(表达式返回1)的前面。如上所示的将CASE表达式作为第一个拍序列,并把region列指定为第二个拍序列。...MSSQL中支持4种类型的表表达式: 3.1 派生表 派生表(也称为表子查询)是在外部查询的FROM子句中定义的,只要外部查询一结束,派生表也就不存在了。 ...这里需要说的是,集合运算对行进行比较时,认为两个NULL值相等,所以就返回该行记录。 4.3 EXCEPT 差集运算 ? 在T-SQL中,集合之差使用EXCEPT集合运算实现的。
查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下。 一、数据查询的语句格式 SELECT [ALL|DISTINCT] [, ....]...这里是说,我们通过ESCAPE语句将\定义为换码字符(可以理解为转义字符) 类型4: 涉及空值的查询 谓词:IS NULL 或 IS NOT NULL 而且 “IS” 不能用 “=” 代替。...Spho 韩六 NULL 赵八 NULL 类型5: 多重条件查询 逻辑运算符: AND:且 连接前后两个条件都成立时表达式为真 OR:或 连接前后表达式有一个为真时表达式为真 AND优先级大于...) 函数返回指定列的值的数目(NULL 不计入): SELECT COUNT(column_name) FROM table_name SQL COUNT(*) 语法 COUNT(*) 函数返回表中的记录数...计算平均值 AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL 存在一种很特殊的值类型 NULL,如果 COUNT 指定了具体列,则统计时会跳过此列值为 NULL 的行,而 COUNT(*) 由于未指定具体列,所以就算包含了 NULL,甚至某一行所有列都为...NULL,也都会包含进来。...当然,如果同时计算 MAX、MIN,那么此时 id 也只返回第一条数据的值,因为这个查询结果对应了复数行: SELECT MAX(cost), MIN(cost), id FROM test -- id...举个例子,查询每个国家的 GDP 总量: SELECT COUNT(GDP) FROM amazing_table GROUP BY country 返回的结果就会按照国家进行分组,这时,聚合函数就变成了在组内聚合...总结 聚合函数 + 分组可以实现大部分简单 SQL 需求,在写 SQL 表达式时,需要思考这样的表达式是如何计算的,比如 MAX(c1), c2 是合理的,而 SUM(c1), c2 这个 c2 就是无意义的
(7)having (8) select (9) distinct (10) order by 从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表...第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。...原因在于最终的结果集中只为每个组包含一行。这一点请牢记。 第七步:应用cube或者rollup选项,为vt5生成超组,生成vt6. 第八步:应用having筛选器,生成vt7。...对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。...就跳过 对比了一下,mysql和sql执行顺序基本是一样的, 标准顺序的 SQL 语句为: select 考生姓名, max(总成绩) as max总成绩 from tb_Grade where
END 解释一下,语句中的condition是条件判断,如果该判断结果为true,那么CASE语句将返回result,否则返回result2,如果没有ELSE,则返回null。...2 IF IF函数也能通过判断条件来返回特定值,它的语法如下: IF(expr,result_true,result_false) expr是一个条件表达式,如果结果为true,则返回result_true...3 IFNULL 在Java程序中调用sql语句时,如果返回结果是null,是非常容易引发一些意外情况的。 ?...因此,我们希望在SQL中做一些处理,如果查询结果是null,就转换为特定的值,这就要用到Mysql中IFNULL函数。...FROM goods WHERE name='light'; 但使用IFNULL语句,如果where条件中的name值是不存在的,那么仍将返回null,例如: -- 返回结果:null SELECT
但是,如果SELECT执行聚合操作(例如:SELECT SUM(Myfield)),则聚合操作成功,即使myfield中没有数据,也会发出SQLCODE=0;在这种情况下,SUM返回NULL,%ROWCOUNT...SQLCODE=100表示SQL操作成功,但没有找到可操作的数据。发生这种情况的原因有很多。对于SELECT,这些包括:指定表不包含数据;表不包含满足查询条件的数据;或者行检索已到达表的最后一行。...但是,可以为该字段创建多个没有值(NULL)的记录。 DEFAULT默认值:必须指定一个值,否则 IRIS会为每个记录中的此字段提供一个默认值(接受空字符串)。...默认值可以是NULL、空字符串或适用于该数据类型的任何其他值。 UNIQUE NOT NULL:必须在每条记录中为该字段指定唯一的值(可接受一个空字符串)。可用作主键。...DEFAULT NOT NULL:必须指定一个值,否 IRIS会为每个记录中的此字段提供一个默认值(可接受的空字符串)。
即使可用空间显示为0,也可以插入行,只要不需要分配新的区(extends)就允许插入操作。对于分区表,此值仅为估计值,可能不是绝对正确。...:如果存储程序为函数,则该字段为返回数据类型的值,如果为存储过程,则该字段为空 ROUTINE_BODY:存储程序的主体内容,总是为"SQL" ROUTINE_DEFINITION:存储程序的具体的定义...SQL_MODE:创建或更改事件时MySQL Server的SQL模式 STARTS:对于其定义中包含STARTS子句的重复事件,此列包含相应的DATETIME值。...如果没有STARTS子句,则此列为NULL ENDS:对于其定义中包含ENDS子句的重复事件,此列包含相应的DATETIME值。...它返回值不是一个真实的参数(可能是一堆字符串数据),所以ORDINAL_POSITION列值记录为0,且PARAMETER_NAME和PARAMETER_MODE列值记录为NULL,因为此时函数返回的值没有参数名称
一、sql执行顺序 from join on where group by(开始使用select中的别名,后面的语句中都可以使用) avg,sum…....having select distinct order by limit 从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表...第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。...对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。...,就跳过 对比了一下,mysql和sql执行顺序基本是一样的, 标准顺序的 SQL 语句为: select 考生姓名, max(总成绩) as max总成绩 from tb_Grade where
(其他猫的配偶) 实际上, 你可以更简洁的用以下的查询语句表达相同的含义: select cat.mate from Cat cat查询语句可以返回值为任何类型的属性,包括返回类型为某种组件(Component...复合路径表达式使得where子句非常的强大,考虑如下情况: from Cat cat where cat.mate.name is not null该查询将被翻译成为一个含有表连接(内连接)的SQL查询...如果你打算写像这样的查询语句 from Foo foo where foo.bar.baz.customer.address.city is not null在SQL中,你为达此目的将需要进行一个四表连接的查询...与is not null可以被用来测试空值(null)....注意你能用到的大多数查询比这些要简单的多! 下面的查询对于某个特定的客户的所有未支付的账单,在给定给最小总价值的情况下,返回订单的id,条目的数量和总价值, 返回值按照总价值的结果进行排序。
领取专属 10元无门槛券
手把手带您无忧上云