该博文为个人笔记,如有谬误欢迎批评指正~

1.all、some、any用法

all 可与’=’ ‘>=’ ‘>’ 等连接
all需要满足所有条件
some和any类似,满足部分分条件即可,any在部分情况下可与in替换

--以下语句暂未测试执行,仅示例含义和用法--
--eg:all--
--查询年龄不小于年龄表中所有年龄的数据--
select name from Students where age >= all(select age from Ages)
--some与any一致查询年龄不小于年龄表中任意一条年龄的数据--
--eg:some--
select name from Students where age >= some(select age from Ages)
--eg:any--
select name from Students where age >= any(select age from Ages)
--这种情况下,any可以使用in替换--
select name from Students where age = any(select age from Ages)
select name from Students where age in (select age from Ages)

2.group by、order by用法

group by

  • 有多少个类别,查出来就有多少行数据。
  • 针对where查询的结果集做操作,所以是要在where(可能不存在)之后使用
  • 使用group by a,b,c 时,则select查询的列,只能在a,b,c里选择,语义上才没有矛盾,才能一一对应起来。
  • 没有排序功能的
  • group by之后的数据可以使用having 进行筛选

order by

  • 针对最终结果集进行排序,所以是要在where/group by/having 后面。
  • 降序:DESC; 升序:ASC。
  • 若有多个列需要排序,首先按第一个排序,再按后面的列排序;多个列排序用","隔开。

3.case…when用法

含义与java case类似

update student 
set 
	sex = case sex 
		when 'm' 
		then 'f' 
		else 'm' 
		end;

4.datediff用法

在mysql中直接对日期加减在月初月末可能会出现问题,mysql中提供了计算日期的函数 – datediff,返回值是两个日期的差值

--以下语句暂未测试执行,仅示例含义和用法--
--eg:datediff--
select datediff('2022-05-01','2022-05-20');
select * from User where (registration_date,lastlogin_date)=1;

其他常用函数

ASCII(s):返回字符串 s 的第一个字符的 ASCII 码
CHAR_LENGTH(s):返回字符串 s 的字符数
CONCAT(s1,s2…sn):字符串 s1,s2 等多个字符串合并为一个字符串
CONCAT_WS(x, s1,s2…sn):同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
INSERT(s1,x,len,s2):字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
LOWER(s):将字符串 s 的所有字母变成小写字母
UPPER(s):将字符串转换为大写
TRIM(s):去掉字符串 s 开始和结尾处的空格
ABS(x):返回 x 的绝对值 
CEIL(x):返回大于或等于 x 的最小整数 
FLOOR(x):返回小于或等于 x 的最大整数 
MAX(expression):返回字段 expression 中的最大值
MIN(expression):返回字段 expression 中的最小值
MOD(x,y) :返回 x 除以 y 以后的余数 
POW(x,y):返回 x 的 y 次方 
ROUND(x):返回离 x 最近的整数
SUM(expression):返回指定字段的总和