首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别

所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。...性能对比结论 count(可空字段) count(非空字段) = count(主键 id) count(1) ≈ count(*)

2.5K30

MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别

count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。

2.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL的基本使用和MySQL在项目中的操作

    列名称 = 某值 用 update指定要更新那个表中的数据 用 set指定列对应的新值 用 where指定更新的条件 UPDATE示例 更新某一行中的一个列 把users表中id为7的用户密码,更新为888888...order by id desc 多重排序:对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序: select * from users oreder...status DESC,username ASC COUNT(*)函数 COUNT(*)函数用于返回查询结果的总数据条款: select count(*) from 表名称 查询users表中status...'} //2.待执行的SQL语句,其中的?...') } }) 更新数据的便捷方式: 更新数据表时,如果数据对象每个属性和数据表的字段一一对应,则可以通过如下方式快速更新数据表: //1.要更新的数据对象 const user={id:7,username

    1.3K20

    基础SQL-DQL语句-条件查询-排序-聚合函数-分组-limit语句

    > 查询age大于35或性别为男的学生(两个条件其中一个满足) mysql> SELECT * FROM stu3 WHERE age>35 or sex='男'; +------+--------...另外聚合函数会忽略空值 五个聚合函数: count() : 计数 IFNULL(字段名,0) : 如果指定字段的值为null,则使用0表示 sum() : 求和 max() : 求最大值 min()...则 IFNULL() 的返回值为 expr1; 否则其返回值为expr2, 我们可以利用IFNULL()函数,如果记录为NULL,给个默认值,这样统计的数据就不会遗漏 mysql> SELECT COUNT...字段可以取别名 as(也可以省略) # order by 1. order by 字段 desc : 根据字段值降序排序(asc是升序,可以省略) 2. order by 字段1 desc, 字段...2 asc : 先根据字段1降序,如果字段1相等,根据字段2升序 # limit 索引,最大查询数量 -- 规律: 用户 查询第x页,每页count条 -- 当前页的sql如何编写 -- index

    3.6K10

    Python | Python学习之mysql交互详解

    ,(值1,...)...; 更新 更新操作:update 表名 set 列1=值1,列2=值2... where 条件; 删除 删除操作(不推荐):delete from 表名 where 条件; 逻辑删除...(推荐):update 字段名 set isvalid=0 where id=1; --设置删除字段,执行删除字段的操作即对该字段更新。...、逻辑运算符、模糊查询、范围查询、空判断搭配使用 比较运算符 等于: = 大于: > 大于等于: >= 小于: < 小于等于: <= 不等于: !...,当年龄相同时 按照身高从高到矮排序 聚合函数 count(*)查询总数 max(列)表示求此列的最大值 min(列)表示求此列的最小值 sum(列)表示求此列的和 avg(列)表示求此列的平均值...by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 group_concat 表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合 举个栗子: select

    1.2K21

    第11章_数据处理之增删改

    情况 1:为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....); 值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同...INSERT 语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。...MySQL8 新特性:计算列 什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。...举例:定义数据表 tb1,然后定义字段 id、字段 a、字段 b 和字段 c,其中字段 c 为计算列,用于计算 a+b 的值。...cartoon显示卡通,joke显示笑话 # 17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货 # 18、统计每一种note的库存量,并合计总量

    22320

    MySQL数据库,从入门到精通:第十一篇——MySQL数据处理之增删改指南

    本文将深入讲解MySQL中的增删改相关知识,包括插入数据的方式、更新和删除数据的操作方法,同时还会介绍MySQL8的新特性——计算列,并结合综合案例进行实战演练,为读者提供完整的数据处理解决方案。...情况 1 :为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....); 值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同...为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。...举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的 值。...17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货 18、统计每一种note的库存量,并合计总量 19、统计每一种note的数量,并合计总量

    15910

    【MySQL】MySQL知识总结

    可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。...在创建表时,ENUM类型的取值范围以列表的形式指定,其基本形式如下: 属性名 ENUM(‘值1’, ‘值2’, …, ‘值n’) 其中,“属性名”参数指字段的名称,“值n”参数表示列表中的第n个值。...如果插入的值为16,其二进制数为10000,长度为5,超过了最大长度,因此大于16的数是不能插入BIT(4)类型字段中的。 注意: 插入数据时,使用 b‘位串’的方式插入相应值!...就是说要根据满足field和value(对应的字段和它的值)所进行更新(修改)。...set count=count-1 where id = OLD.class_id; #更新班级表中的记录 END;

    7.3K52

    MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 group...varchar(32) not null ); # 默认值:所有的字段都可以设置默认值,用户不给该字段传值则使用默认的,否则使用传了的 create table t3( id int...级联更新/删除 用外键做了表与表的对应关系后,那么操作(增删改)一个表数据,是不允许的; 那么可以通过添加级联更新和删除来同步数据,添加在设置外键下边··· on update cascade:级联更新...> select post,count(id) from emp group by post; +-----------+-----------+ | post | count(id) | +...= 4 ORDER BY salary DESC, hire_date; 空值排序 空值(NULL)在 SQL 中表示未知或者缺失的值,MySQL认为空值最小,升序时空值排在最前,降序时空值排在最后

    2.6K20

    SQL面试 100 问

    常见的聚会函数包括: AVG – 计算一组值的平均值。COUNT – 统计某个字段的行数。MIN – 返回一组值中的最小值。MAX – 返回一组值中的最大值。SUM – 计算一组值的和值。 33....解析:除了 COUNT () 之外,其他聚合函数都会忽略字段中的 NULL 值。另外,聚合函数中的 DISTINCT 选项可以在计算之 前排除重复值。 34....如果想要知道哪些部门月薪超过 5000 的员工数量大于 5,如何写 SQL 查询?...第一种方式通过提供字段的值插入数据,例如: INSERT INTO department(dept_id, dept_name) VALUES (1, '行政管理部'); MySQL 支持一次提供多个记录值的方式插入多条记录...[WHERE condition]; 其中,table_name 是要更新的表名;SET 子句指定了要更新的列和更新后的值,多个字段使用逗号进行分隔;满足 WHERE 条件的数据行才会被更新,如果没有指定条件

    2.5K22

    SQL 稍复杂一点语法的学习笔记

    比如统计选修课大于 3 门的学生信息: SELECT no, name FROM t_student_class GROUP BY no HAVING COUNT(*) > 3; 连接查询 等值与非等值连接查询...ON DUPLICATE REPLACE 参考资料: mysql如何不重复插入满足某些条件的重复的记录的问题 insert into ... values (SELECT ......='表名' 但是这个表中很多字段对我们来说可能用处不大, 下面是我个人觉得最有用的几个字段, 与 DESC 语法的各个列关联起来: SELECT ORDINAL_POSITION AS No,...解决方法, 可以在表中加入一个 uuid 字段, 每次执行的时候都 update 一个唯一 id, 如果更新数量大于 0 的话再 select 就行。...的时候必然有一个字段被更新 使用前面的 SELECT od INSERT 模式, 这种模式则适合 UPDATE 概率低, 但 INSERT 概率比较高的模式 参考资料: MySQL使用 on duplicate

    19120

    MySQL复习笔记(2)-约束

    DQL查询语句 查询满足条件的数据 SELECT 字段 FROM 表名 WHERE 条件; MySQL运算符 > 大于 < 小于 <= 小于等于 >= 大于等于 = 等于 不等于 !...= 不等于 test SELECT * FROM "表名" WHERE '字段'='值'; 逻辑运算符 and 多个条件同时满足 or 多个条件其中一个满足 not 都不满足 test SELECT...count(字段) 统计指定列记录数,记录为NULL的不统计 sum(字段) 计算指定列的数值和,如果不是数值类型,那么计算结果为0 max(字段) 计算指定列的最大值 min(字段) 计算指定列的最小值...哪个字段作为表的主键? 通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。...级联更新,主表更新时,从表跟着更新 ON DELETE CASCADE – 级联删除,主表删除时,从表跟着删除 测试 CREATE TABLE employee ( id INT PRIMARY

    90420

    nodejs环境快速操作mysql数据库

    dmhsq-mysql-db 数据连接池版本 npm install dmhsq-mysql-pool 使用示例 快速操作mysql 错误处理尚未完善 部分错误参考mysql错误 返回的均为Promise...“top”:以字段开头的 “end”:是以字段结尾的 “in”:包含字段 输入其他非法值均以in处理 //如果需要获取数据 就要调用 //collection.like([ // ["username...,like],[“数据库键名2”,“值”,like]] like 值可取 “top”:以字段开头的 “end”:是以字段结尾的 “in”:包含字段 输入其他非法值均以in处理 collection.like...”,数据库键名2:“ASC”} DESC为降序 ASC降序 单个字段 collection.sort({_id:“DESC”}) 多个字段 collection.sort({_id:“DESC”,phone...,type) sql为自定义查询语句 type可不填 不填自动识别操作类型 type不影响查询 只是格式化返回的数据格式 type可选值为 updata(更新) del(删除) count(计数) add

    1.1K10

    重新学习Mysql数据库1:无废话MySQL入门

    Star哈 文章也将同步到我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻...该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间...id=1 的那一行数据更新它的 title 字段UPDATE `orders` set title='这里是标题' WHERE id=1; INSERT INSERT INTO 语句用于向表格中插入新的行...语法:SELECT列名称FROM表名称WHERE列运算符值 -- 从表 Persons 中选出 Year 字段大于 1965 的数据SELECT * FROM Persons WHERE Year>1965...COUNT(1) AS totals FROM Persons;-- 获取表 station 字段 user_id 相同的总数select user_id, count(*) as totals from

    1.2K30

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券