mysql总结

发布时间:2026/5/20 9:32:36

mysql总结 java类和mysql数据类型对应java类mysql数据库java.lang.BytebyteTINYINTjava.uitl.CurrencytimezoneVARCHARjava.lang.ShortshortSMALLINTjava.lang.IntegerintegerINTEGERjava.lang.LonglongBIGINTjava.lang.FloatfloatFLOATjava.lang.DoubledoubleDOUBLEjava.lang.BigDecimalbig_decimalNUMERICjava.lang.StringstringVARCHARjava.lang.Booleantrue_falseCHAR(1)java.lang.Booleanyes_noCHAR(1)java.uitl.Date / java.sql.DatedateDATE/DATETIMEjava.sql.TimetimeTIMEjava.sql.TimestamptimestampTIMESTAMPjava.uitl.CalendarcelendarTIMESTAMPjava.io.SerializableserializableVARBINARY/BLOBjava.sql.ClobclobCLOBjava.sql.BlobblobBLOBjava.lang.ClassclassVARCHARjava.uitl.LocalelocaleVARCHARjava.uitl.TimeZonetimezoneVARCHARjava.uitl.CurrencycurrencyVARCHARmysql 执行顺序FROM-JOIN- ON- WHERE- GROUP BY- HAVING- SELECT- DISTINCT- ORDER BY- LIMIT上语法顺序是不能前后互换的否则报错where 中 不能使用聚合函数或者分组后的汇总值‌GROUP BY在where后执行HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足having 和 group by 可以单独使用having 和 group by 可使用 select中对 表项列起的别名having 只能跟在group by 后面group by 使用如果不使用 group by 去分组直接使用聚合函数sumcount等是对所有数据生效的如果使用了分组group by是对每个分组里的所有数据使用聚合函数的使用下列命令查询sql模式selectsql_mode;ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONONLY_FULL_GROUP_BY这个模式表示 SELECT列表中的每一列要么在GROUP BY子句中要么被包含在聚合函数中如SUM(), AVG(), MAX(), MIN(), COUNT()等。DISTINCT 高级使用COUNT(por_no)计算 por_no值的 出现次数包含重复计数COUNT(DISTINCT column_name) 计算指定列中不同值的个数忽略NULL值DISTINCTSELECT goo_id, COUNT(DISTINCT por_no)AS distinct_por_no FROM cha_goods_inventory GROUP BY goo_id HAVING COUNT(DISTINCT por_no)1这个sql计算了 同一good_id下por_no的种类数DISTINCT和GROUP BY去重区别在MySQL中DISTINCT和GROUP BY都可以用来去除重复的数据但是它们的实现方式有所不同。DISTINCT关键字用于查询中可以让查询结果中只显示不重复的记录。例如如果有一个表格名为employees其中有多个员工的记录那么可以使用以下语句查询不同的职位SELECT DISTINCT job_title FROM employees;GROUP BY子句用于分组查询它根据指定的列对数据进行分组然后返回每个组的统计信息。例如如果有一个表格名为sales其中有多个客户的记录那么可以使用以下语句查询每个客户的总销售额SELECT customer_id, SUM(amount) as total_salesFROM salesGROUP BY customer_id;在上述例子中GROUP BY子句根据customer_id对记录进行分组并返回每个组的总销售额。对null不可以使用 ! null 来判断mysql中的内存表虚拟表mysql中的not in或者 in 操作 会自动过滤掉 null使用in的时候忽略为null的不会查询出comm为null的数据select*fromemp ewheree.commin(300,500,null);in 相当于ormysql中在in操作符后面的括号里对于null值的判断不是is null而是因而对于null值判断永远都是false。注意 java中的 null null 返回的true使用not in的时候如果 not in后面的选项中没有null且not in 后面没有跟子查询只会查询从comm列不为空的列中过滤会过滤掉comm为null的数据select*fromemp ewheree.commnotin(300,500);not in 后面跟子查询会查出包含null的结果集select*fromemp ewheree.commnotin(selecte2.commfromemp e2wheree.commisnotnull)使用not in 的时候如果not in后面的选项中有null不会查询出来任何数据。sql语句本身直接返回false因为not in 相当于 !* ! * ! null, 因为数据库中null和任何值比较无论是还是!都会返回false所以使用not in的时候要保证in中的条件不会出现null的情况不然可能会出现意想不到的情况。select*fromemp ewheree.commnotin(300,500,null);!和通常可以互换。但是并非所有 DBMS 都支持这两种不等于操作符另外!和是不会包括值为N ULL的数据的这个细节从侧面映证了NULL在数据库当中有其特殊的含义另外对于存在not in 语句最理想的解决办法是尽量避免使用NOT IN除非必须使用并且可以保证结果绝对有默认值 更好的建议是使用 left join 连接查询进行替代或者可以使用not exists 语句进行改写改写方式1select*fromemp ewherenotexists(select1fromemp e2wheree2.comm!300ande2.comm!500)改写方式2使用连接查询在这里插入代码片从数据库的设计层面来了解一下为什么不能使用!null多数程序员的认知里面包括编程语言的认知都是1和0也就是真和假但是主流数据库的设计却并不是如此他们在设计中使用了第三个条件不确定 什么叫不确定用我们通俗的语言的来讲就是404找不到而用程序的话来讲就是“unknown ”不知道。但是数据库是只返回查询结果为“true”的结果的对于false的内容和“unknown ”是不认识的。​ null 你可以理解为一片空。代表等值假设数据库是一个货架你可以问货架上的一个格子里装的是1吗是否1然后传回一个值这个格子里是1或者不是1。你也可以问格子里装的是0吗然后返回一个值是0或者不是0。但是你不能问这个格子里装的是空吗是否null因为不存在『装在格子里的空』只存在『空的格子』。所以应该问『这个格子是否是空的是否 is null 』所以永远都应该使用 is null 而不是null。​ 通常情况下数据库建表的时候默认是NULL但在工作中一般建表的时候都会禁止使用NULL的​ 因为NULL表示的是什么都没有它与空字符串、0 这些是不等价的是不能用于比较的 如… NULL、 NULL ‘’ 得到的结果为 false判断 NULL 必须使用IS NULL进行判断。mysql where字段is not null不生效问题分析造成where 字段名 is not null语句不生效的原因通常有以下几种字段值为NULL而不是空字符串。NULL和空字符串是不同的概念is not null仅能过滤空字符串无法过滤NULL值。数据类型不匹配。如果字段类型为varchar或char且其值为NULL在进行比较时可能会出现问题。数据库中存在空值和NULL值混杂的情况导致过滤条件不完善。解决方案为了解决这个问题我们可以采用以下方法使用is not null or 字段名 ! 的组合条件可以同时过滤空字符串和NULL值。使用coalesce函数将NULL值转换为空字符串然后再进行比较。©著作权归作者所有来自51CTO博客作者mob64ca12d8c182的原创作品请联系作者获取转载授权否则将追究法律责任mysql where字段is not null不生效https://blog.51cto.com/u_16213334/10045785‌‌MySQL中的‌IF()‌‌ MySQL中的‌IF()函数用于进行条件判断并根据条件返回不同的值。‌基本语法IF(expr,v1,v2)expr需要判断的条件表达式。v1如果expr为真非零或非NULL则返回v1。v2如果expr为假零或NULL则返回v2。

相关新闻