即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 2....联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。...我们一起来看一个例子,假定有一个职工表(employee),对于 一个职工的姓和名分成两列存放(FIRST_NAME和LAST_NAME),现在要查询一个叫比尔.克林顿(Bill Cliton)的职工。...第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。 虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。...任何在Order by语句的非索引项或者有计算表达式都将降低查询速度 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id from
4.笛卡尔积 在数学中,两个集合X和Y的笛卡尓积(Cartesian Product),又称直积,表示为X × Y,第一个对象是X的成员,第二个对象是Y的成员。...5.在不同值较少的字段上不必要建立索引,如性别字段 6.索引列不能参与计算,保持列“干净”。 6.SQL的优化 1.只返回需要的字段,避免SELECT*。...应尽量避免在 WHERE 子句中对字段进行 null 值判断 判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。不能用null作索引,任何包含null值的列都将不会被包含在索引中。...即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。...等,还可以对于该字段不允许为空值,可以使用一个缺省值。
推荐方案:用NOT EXISTS 方案代替 (c) IS NULL 或IS NOT NULL操作(判断字段是否为空) 判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。...也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。...推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。...dy_dj = '1KV以下' 以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = ’1KV以下’条件在记录集内比率为...如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,
SELECT * FROM tb_stu WHERE age>$_POST[age] ORDER BY age; 十五查询结果不显示重复记录 SELECT DISTINCT 字段名 FROM 表名... 该式根据使用的关键字是包含在列表内还是排除在列表外,指定表达式的搜索,搜索表达式可以是常量或列名,而列名可以是一组常量,但更多情况下是子查询 十七显示数据表中重复的记录和记录条数 SELECT name...二十对统计结果进行排序 函数SUM([ALL]字段名) 或 SUM([DISTINCT]字段名),可实现对字段的求和,函数中为ALL时为所有该字段所有记录求和,若为DISTINCT则为该字段所有不重复记录的字段求和...语句中时,要将分组语句书写在排序语句的前面,否则会出现错误 二十二多列数据分组统计 多列数据分组统计与单列数据分组统计类似 SELECT *,SUM(字段1*字段2) AS (新字段1) FROM ...pid ORDER BY sumprice DESC 注:group by语句后面一般为不是聚合函数的数列,即不是要分组的列 二十三多表分组统计 SELECT a.name,AVG(a.price)
构建的测试数据,如下图所示:有了上面的表及数据之后,我们就来看当列中存在 NULL 值时,究竟会导致哪些问题?...1.count 数据丢失我们都知道,count是用来计数的,当表中某个字段存在NULL 值时,就会造成count计算出来的数据丢失,如下 SQL 所示:查询执行结果如下:从上述结果可以看出,count(...2.distinct 数据丢失当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一列有不同的值,那么查询的结果也会将数据丢失, SQL如下所示:查询执行结果如下...9和id=10的name为 NULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。...4.导致空指针异常当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。
tb_stu ORDER BY id ASC LIMIT _POST[begin],n 注意:数据的id是从0开始的 测试工作常用SQL查询语句 十一、查询统计结果中的前n条记录 SELECT *...十四、查询大于指定条件的记录 SELECT * FROM tb_stu WHERE age>$_POST[age] ORDER BY age; 十五、查询结果不显示重复记录 SELECT DISTINCT...二十、对统计结果进行排序 函数SUM([ALL]字段名) 或 SUM([DISTINCT]字段名),可实现对字段的求和,函数中为ALL时为所有该字段所有记录求和,若为DISTINCT则为该字段所有不重复记录的字段求和...语句中时,要将分组语句书写在排序语句的前面,否则会出现错误 二十二、多列数据分组统计 多列数据分组统计与单列数据分组统计类似 SELECT *,SUM(字段1*字段2) AS (新字段1) FROM 表名...ORDER BY sumprice DESC 注:group by语句后面一般为不是聚合函数的数列,即不是要分组的列 二十三、多表分组统计 SELECT a.name,AVG(a.price),b.name
语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值; 实例: 更新某一行中的一个列: 目前 Persons 表有很多字段为 null 的数据,可以通过 UPDATE 为...JOIN – 多表关联 JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。...即使两个人的姓名完全相同,Id_P 也可以区分他们。 ❤️ 为了下面实验的继续,我们需要再创建一个表:Orders。...JOIN: 如果表中有至少一个匹配,则返回行 INNER JOIN: 内部连接,返回两表中匹配的行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配...VIEW – 视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值; 实例: 更新某一行中的一个列: 目前 Persons 表有很多字段为 null 的数据,可以通过 UPDATE 为...有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。 数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。...这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。 ❤️ 为了下面实验的继续,我们需要再创建一个表:Orders。...JOIN: 如果表中有至少一个匹配,则返回行 INNER JOIN: 内部连接,返回两表中匹配的行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配...VIEW – 视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
3)主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。 4) 主键应当由计算机自动生成。...Gates'); Not null 非空约束 当前列添加了非空约束, 这一列中不能有空值 create table person3( id int primary key auto_increment...会把这个字段中取值相同的数据行放到一组中, 做后续的计算 分组聚合 分组过滤 分组转换 分组之后的结果可以添加having子句进行过滤, 类似于where条件 # 统计各个分类商品的个数...显示在某一区间的值(含头含尾) [] IN(set) 显示在in列表中的值,例:in(100,200) 模糊查询 LIKE ‘张%’LIKE ‘%涛%’ 模糊查询,Like语句中,%代表零个或多个任意字符...,代表一个字符,例如:first_name like ‘a%’; 非空查询 IS NULL IS NOT NULL 判断是否为空 逻辑查询 and 多个条件同时成立 or 多个条件任一成立 not
2..);-- 向表中插入某些列 insert into 表 values(值1,值2,值3..); -- 向表中插入所有列 12.修改数据 update 表名 set 字段名=值,字段名=值......执行速度比delete快 14.数据的简单查询 select * from 表名; -- 查询所有列 select 字段名1,字段名2,字段名3.. from 表名; -- 查询指定列 15.几个简单的基本的...group by分组依据 # 分组后取出的是每个组的第一条数据 3.聚合查询 :以组为单位统计组内数据>>>聚合查询(聚集到一起合成为一个结果) # max 最大值 # 每个部门的最高工资...new为空,则删除old 四、多表查询 1.内连接、左连接、右连接、全连接 1、内连接:只取两张表有对应关系的记录(只拼两个表共有的) 左表 inner join 右表 on 条件 select...on emp.dep_id = dep.id union select * from emp right join dep on emp.dep_id = dep.id; 2.子查询 # 就是将一个查询语句的结果用括号括起来当作另外一个查询语句的条件去用
Mysql数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中核心语言。不过在MySQL数据库中执行SQL语句,需要小心两个陷阱。 ...可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。...而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。 陷阱二:空值不一定等于空字符 在MySQL中,空值(Null)与空字符(’’)相同吗?...答案是否定的。 在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。...其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。
'%0%'; //表示数据中包含0 _:表示一个字符,可多次使用,示例: where 列 like '%0_'; //数据结尾第二位是0 结果排序( 对查询出的结果按照一列或多列进行升序还是降序排列...) COUNT:统计结果记录数,若统计的是列,列中为Null,那么count将不会计算值 MAX: 统计计算最大值 MIN: 统计计算最小值 SUM: 统计计算求和 AVG: 统计计算平均值...select * from 表1,表2 内连接:过滤为空的数据(查询的实际上是两张表数据的交集部分) 目的 ==》解决笛卡尔积现象,正确查询了需要的数据 select * from 表1,表2...右外连接:以右边表为主,返回右表中所有数据,若左表中无数据,则显示为NULL,结合实际查询结果来理解 select * from 表1 right [outer] join 表2 on 表1.字段=表2...表1.字段1=表2.字段2 子查询:将一个查询结果作为另一个查询的对象,直白的讲就是SQL语句嵌套 select * from (select * from 表名) as 别名 select * from
即上例中的where子句等价于:where 专业名=’计算机’。 5.使用null的查询 当需要判定一个表达式的值是否为空值时,使用 is null关键字。...格式:order by {排序表达式[ASC|DESC]}[,…n] 其中:排序表达式既可以是单个的一个字段(如例14),也可以是由字段、函数、常量等组成的表达式(如例15),或一个正整数。...*)的统计结果一样; B.distinct表示:先消除指定字段取值重复的记录,然后再统计指定字段值不为空的记录个数;而all 则表示所有指定字段值不为空的全部记录都参加统计计数。...如:以下操作将会产生错误: select 借书证号,count(*) from xs (六):对查询结果分组: group by子句用于将查询结果表按某一列或多列值进行分组,列值相等的为一组,...相当于在select 语句的结果后面加了一个汇总行,这样既查询出了源表中一个一个的详细记录(即具体的字段值),又查询出了统计某些列数据所产生的统计信息(即:细节+统计)。
" }, { default_language : "french" } ); 在多种语言上建立索引:同一集合中存在多种语言,需要有一个字段标记每个文档的语言,如下面的四个文档中的lingvo...,可以在这两个字段上进行文本搜索。...任何含有多个值的键都将被输入到reduce函数中,reduce函数将返回输入数据的聚合结果。最后,还有一个可选步骤,通过finalize函数对数据的显示进行完善。...map函数接收集合中的color和num字段作为输入,输出为以color为键,以num数组为值的文档。...,显示类似如下的结果。
where操作之后):(又名多行处理函数)自动忽略null count 计数 count(*)计数总记录的条数 count(comm):表示统计comm字段中不为null的数据总量 sum 求和 avg...也就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。...将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询被称为嵌套查询。...使用存在量词EXISTS后,若内层查询结果为空,则外层的WHERE子句返回ture,否则取反。...where isbn=books.isbn and reader_id="201801" ); 1.4 合并查询 #两个表字段合并显示,两个表相同字段合并后显示一次 select * from t_major1
+聚合函数 group by+having Order by(排序) 前言 在一级项目组时,监控服务器的同时,总结了一下SQL关于查询的语句,希望能给大家带来一些帮助 推荐两个博客,下面借鉴了这两个...: select+top top:取表中前多少的数据 例1.取出表中第几行数据(如第一行) select top 1 * from StudentBindPaperTypeEntity 例2.取出表中百分之多少数据...from+left join 左外连接:左表的值会全部显示出来,右表的值显示on条件搜索的的结果,搜索不到为NULL 例1两个表作左外连接 select score.studentID,...in('19100142001','19100142006') Between…and…为连续查询(注:sql软件情况不一样,可能不包含and后的值) 例2.查询两个学号之间的学生 select *...>10 显示结果: Order by(排序) 排序查询语法: select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]
MongoDB 聚合查询 在MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果。...相当于SQL分组语法group by column_name中的column_name部分。如果根据某字段的值分组,则定义为_id:’$字段名’。...如果没有分组属性取值为null count:返回结果字段名。可以自定义,类似SQL中的字段别名。...分组后结果集只有_id和totalAge两个属性,所以在$match中只能对这个属性进行操作。...如果这个数组属性为空,对应document将不被显示(因为document没有数组属性) 正常数据:只有name为abc的hobby有数组类型值,且长度为3 ? 执行下面命令后的效果 ?
MongoDB 聚合查询 在MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果。...相当于SQL分组语法group by column_name中的column_name部分。如果根据某字段的值分组,则定义为_id:’$字段名’。...如果没有分组属性取值为null count:返回结果字段名。可以自定义,类似SQL中的字段别名。...分组后结果集只有_id和totalAge两个属性,所以在$match中只能对这个属性进行操作。...如果这个数组属性为空,对应document将不被显示(因为document没有数组属性) 正常数据:只有name为abc的hobby有数组类型值,且长度为3 执行下面命令后的效果 db.c1.aggregate
* B: 哪些约束: 主键约束 非空约束 唯一约束 外键约束 15SQL代码的保存 * A: 当sql语句执行了,就已经对数据库进行操作了,一般不用保存操作 在SQLyog 中Ctrl...----------显示在in列表中的值,例:in(100,200) LIKE 通配符 -----------模糊查询,Like语句中有两个通配符: % 用来匹配多个字符...,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询, 它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。...* count:统计指定列不为NULL的记录行数; * sum:计算指定列的数值和,如果指定列; * max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为...0排0序运算; * min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算; * avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0; * C: 案例代码
query - 一种选择查询,其结果集为一个或多个新行的相应列字段提供数据值。 描述 INSERT语句有两种使用方式: 单行插入会向表中添加一个新行。...它为查询结果集中每一行的所有指定列(字段)插入数据值,并将未指定的列值默认为NULL或定义的默认值。...表参数 可以指定要直接插入到表中的表参数、通过视图插入的表参数或通过子查询插入的表参数。如创建视图中所述,通过视图插入受要求和限制的约束。...赋值 本节介绍如何在INSERT操作期间将数据值分配给列(字段): 值赋值语法描述将数据值指定为列(字段)的文字的各种语法选项。...输入数据的自动转换需要两个因素:编译时,SQL必须指定运行时模式;执行时,SQL必须在逻辑模式环境中执行。
领取专属 10元无门槛券
手把手带您无忧上云