表的基本操作:增,删,改,查
数据添加:insert into 表 (字段1,2,3...) value(值1,2,3...)
or: insert into 表 value(值1,2,3...) /* value添加需要和表字段一一对应 */
or(赋值插入):insert into 表 set 字段1=值1,字段2=值2...;
or(多条插入):insert into 表(字段1,2,3...) value(值1,2,3),(值1,2,3)...;
数据更新(修改): update 表 set 字段=值,字段2=值2... where 条件(=,<,>,<>,!=,like,等)符合的条件;#未加where则全部修改。
数据查询:select * from 表 (简单,不作解释)
数据删除:delete from 表 where 条件=满足的条件;
or: delete from student; #表内数据全部清空!新添加主键自增为删除前最大值+1;
or: truncate table 表; 表记录全清除!主键自增重置,从1开始!
/* 使用delete语句时,每删除一条,会在日志中留下记录,而使用truncate时,不会记录在日志中。
因此truncate语句的执行效率比delete语句要高.
*/
简单查询基本语法:
select [distinct]*|{字段1,2,3...}
from 表
[where 条件表达式1]
[group by 字段名 [having 条件表达式2]]
[order by 字段名 [asc|desc]]
[limit[offset] 记录条数]
/* []:为可选条件; distinct:单字段去重复,多字段则是整体一致作为重复条件.
group by 分组,having 对分组的数据再次操作,
order by 排序 (null默认为最小值),limit 提取查询到的n条数据,offset 为偏移变量,默认为0(查询结果的下一条开始)
*/
条件式:
条件是否包含👉in / [not] in: select 字段1,2,3 from 表 where 字段 [not] in (数值1,2,3...);
条件在值a到值b之间👉[not] between and: select 字段1,2,3 from 表 where 字段 [not] between 值1 and 值2;
条件是否为null👉is [not] null: select 字段1,2,3 from 表 where 条件 is [not] null;
条件匹配字符串👉[not] like [_/%/\]: select 字段1,2,3 from 表 where [not] like '[_%条件_%]'
/* _:通配符,占位符.
%:任意长度,包括空格.
\:反转译,使匹配符号为真实符号.数据中本来就有的_%\等.
*/
多条件和或者👉 and / or :太简单,不作解释!where 条件1 and/or 条件2;
/* and 和 or 一起使用时,and的优先级高于or! */
常用聚合函数
count(字段):计数
sum(字段):求和
avg(字段):求平均值
max,min(字段):求最大值、最小值
查询语句书写顺序:select - from - where - group by - having -order by - limit
查询语句执行顺序:from - where - group by -having - select -order by - limit
字符串类函数
concat(s1,s2,...):拼接字符串,select name,concat(grade,'分') from student;select concat('a','b');
length(string):返回字符串字节长度,select length('i love you'); #计算该字符串字节的长度 中文字节长度为2(mysql),自己试下就知道了
char_length(string):返回字符的个数,select char_length('a b c d'); #计算该字符串的长度,字母空格中文等都为1
截取字符串:
left(str,截取长度):截取字符串左边,左边开始+长度
rigth(str,len):截取字符右边,右边开始+长度
substring(str,起始位置,截取长度):指定位置截取
去除空格:
ltrim(str):删除字符串前端空格并返回 #不包含中间夹有的空格
rtrim(str):删除字符串后段空格并返回 #不包含中间夹有的空格
trim(方向 指定字符 from str/字段):返回从方向端删除指定字符后的字符串
both:两侧,leading:左,trailing:右; #只输入str则删除该字符串两侧并返回
字符串替换:
replace(str,需替换字符串,待替换字符串):select replace('abc','b','d');输出adc;
insert(str1,x,len,str2):从字符串中的x+len(长度),也就是x开始包含并往后len的内容,替换成str2
例如: select insert('12345','2',2,'z'); 输出'1z45'; 也就是2开始,23替换成z.
lower(str):转小写
upper(str):转大写
reverse(str):字符串内容反转,‘123 5’变‘5 321’;
locate(x,str):返回x在str中的位置,从前面开始,只返回一个位置;
数学类函数
abs(n):求绝对值,-30得30;
mod(m,n):求m%n得余数,3/2得1;
floor(n):向下取整数; #值带小数,返回整数,不四舍五入,22.99,22.01返回22;
ceiling(n):向上取整数; #值带小数,返回+1的整数,22.01返回23;
round(n):返回四舍五入的值,整数;
round(n,d):d 小数点保留位数,四舍五入后保留,d为负数则该值四舍五入返回整数.如268.22,-1 则8入68为70,输出270;
pow(x,y):求x的y次方,2,3. 2的3次方(幂)为8;
exp(x):返回e的x次方直;
log(x):返回x相对于基数e对数;
log10(x):返回x相对于基数10的对数;
pi():返回圆周率;
rand():返回一个0.0-1.0直接的随机数; #试了一下随机数长度达到19.
rand(x):指定一个整数x,则被用作种子值,用来随机产生重现(xian)随机值; #多次运行rand(x),一直重复,直到替换x.
其他三角函数:sin() cos() tan() cot()等;
日期类函数
获取当前日期[yyyy-mm-dd]:current_date();
获取当前时间[hh-mm-ss]:current_time();
获取当前日期时间[yyyy-mm-dd hh-mm-ss]:now();
其他:year 年|quarter 季度|month 月份|day 天|hour 小时|minute 分钟|second 秒;
weekofyear(x):返回日期x在一年中的第几周;
dayofyear(x):返回日期x是一年中的第几天;
time_to_sec(str):将时间str时间部分转为秒数;
sec_to_time(int):将秒数int转为时间,格式为[hh:mm:ss];
datediff(x2,x1):计算x1到x2之间的日期天数;
adddate(x,interval n type):给时间x加上指定时间n,type包括:[year,month,day,hour,minute,second];
subdate(x,interval n type):给时间x减去指定时间n,type同上; #用法 subdate('2020-03-23',interval 21 day);
addtime(x,str):给时间x的时间部分加上指定时间str; # str参数整数为秒,str则需要是['hh:mm:ss']格式 #
subtime(x,str):给时间x的时间部分减去指定时间str;
时间和日期格式化:
date_format(date,format):根据format指定的格式显示date值;
/*
format参数:
%Y 年份 返回4位整数,
%y 年份 返回2位整数,
%m 月份 返回0~12的整数,
%d 日期 返回0~31之间的整数,
%H 小时 (00~23),
%h 小时 (01~12),
%i 分钟 (00~59),
%s 秒 (00~59)
示例:select date_format('2020-03-23','%Y年%m月%d日'); →2020年03月23日.
select date_format(current_date(),'%y年%m月%d日'); →20年03月23日.
*/
条件类函数
if(boolean,v1,v2):如果布尔值为True,返回v1,否则返回v2;
ifnull(v1,v2):如果v1不是null,返回v1,否则返回v2;
case value when v1 then r1 [when v2 then r2][else m] end:如果value为v1就返回r1,如果所有值都不相等,则返回else后面的rn;
case演示: select 字段1 , case 字段2 when 值1 then str1 when 值2 then str2 else str3 end from 表;
字段2等于值1,就输出str1
字段2等于值2,就输出str2
否则输出str3.