mysql

536 阅读3分钟

mysql查询结果增加字段

查出来的结果

字段1 字段2
值1 值2

我想要新加一个字段,值是固定的,但是表里没这个字段,效果如下:

字段1 字段2 想新增的字段
值1 值2 值固定

解决: 如图,新增一个固定值为100的字段c

mysql between 用法

用法

between .... and (包含边界值)
not between .... and (不包含边界值)

mysql 格式化小数

方法一: FORMAT()

会四舍五入,整数部分从右向左每3位一个逗号进行格式化输出

select format(10110101.4555,2)  
输出:10,110,101.46
select format(101.4555,2) 
输出:101.46
select format(101.4545,2) 
输出:101.45

方法二:truncate()

直接截取,不会四舍五入

select truncate(101.4555,2) 
输出:101.45
select truncate(101.4545,2) 
输出:101.45

方法三:convert()

convert()函数会对小数部分进行四舍五入操作

记录一下DECIMAL(P,D):

  • P是表示有效数字数的精度。 P范围为1〜65。默认值是10.
  • D是表示小数点后的位数。 D的范围是0~30。MySQL要求D <= P。
  • DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。 decimal(10,2),它表示最终得到的结果整数部分位数加上小数部分位数小于等于10,小数部分位数2
  • DECIMAL类型也具有UNSIGNED和ZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。
  • 如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。
select convert(101.45454,decimal(10,2));
输出:101.45
select convert(1234567890123.45454,decimal(10,2));
输出:99999999.99
解释一下:decimail(M,D)占M+2个字节。所以decimal(10,2)的最大值是 99,999,999.99 因为有10个字节可用
select convert(1234567890123.45454,decimal(15,2));
输出:1234567890123.45

方法四:round(x,d)

四舍五入,round(x,d) d可以是负数,默认为0

select ROUND(748.58, -4)
输出:0
select ROUND(748.58, -2)
输出:750
select ROUND(748.58)
输出:749

关于group by

获取group by 总记录行数

方法一:子查询

select count(*) from (select S product_type_code,count(*) from product_type group by `PRODUCT_TYPE_CODE`) u

方法二:mysql关键字

SQL_CALC_FOUND_ROWS; 所在的查询语句中,记录查询到的总条数(与limit无关);
select FOUND_ROWS(); 即返回查询语句中找到的总记录数;

select SQL_CALC_FOUND_ROWS product_type_code,count(*) from product_type group by `PRODUCT_TYPE_CODE`;
select FOUND_ROWS();

mysql空值和null的区别

  • 占空间的区别
select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| <null>       | 0          | 1           |
+--------------+------------+-------------+

可见:从上面看出空值('')的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的

NULL columns require additional space in the row to record whether their values are NULL.
NULL列需要行中的额外空间来记录它们的值是否为NULL。

  • NULL值查询使用is null/is not null查询,而空值('')可以使用=或者!=、<、>等算术运算符.
  • 使用 COUNT(字段) 统计会过滤掉 NULL 值,但是不会过滤掉空值。

mysql截取字符串

left(str,length)

select left("ww w.yangqianguan.com",5);
结果:ww w.

right(str,length)

select right("www.yangqianguan.com",5);
结果:n.com

substring(str,pos,length)

substring (被截取字段,从第几位开始截取,截取长度)

select substring("140729199405010062",11,4)  #下标从1开始
结果:0501
select substring("140729199405010062",-4)
结果:0062

substring_index(str,delim,count)

str: 需要拆分的字符串
delim: 分隔符,通过某字符进行拆分
count: 当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符

select substring_index("www.yangqianguan.com",".",2)  #截取第二个"." 之前的所有字符
结果:www.yangqianguan

插入更新

在mysql中插入数据,并且当主键相同时做更新操作,2种方法 1、replace into tablename (id,name) values(null,wang); 2、 insert into table (player_id,award_type,num) values(20001,0,1) on DUPLICATE key update num=num+values(num)