SQL中"+"是运算符,若想连接字符串,需用concat(str1,str2,…)。若拼接参数中有NULL,则拼接结果为NULL。可使用IFNULL(可能为NULL的字段,若是NULL则返回的值)。
条件运算符:>,<,=,<>,>=,<=;逻辑运算符:&&,||,!或and,or,not;模糊查询:like,between and,in,is null.
通配符:%(任意多个字符),_(任意单个字符)。若想要匹配的字符为通配符,需使用转义字符。有两种用法:
1.select * from table where field like '__$_%' escape '$';#随意指定一个转义字符
2.select * from table where field like '__\_%'#使用转义字符
in 关键字的范围列表中的数据必须是同种类型的或者兼容的,而且不能使用通配符,因为判断原则是=而不是like。
=、<>不能判断NULL,需使用is、is not或者安全等与:<=>。二者特性如下:
is、is not:只能判断NULL,不能判断其他值,可读性高。
安全等于<=>:既可以判断NULL,又可以判断普通数值,可读性低。
函数:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。好处:隐藏了实现细节,提高代码重用性。
调用:select 函数名(实参列表) from 表;
分类:
1.单行函数,如concat、length、ifnull等:传入一个值,返回一个值。
2.分组函数,用于统计,又称统计函数、聚集函数、组函数:传入一组值,返回一个值。
字符函数:
length()#获取参数的字节个数。
concat()#拼接字符串
upper()#字符串变大写、lower()字符串变小写。
substr(str,n)或substring(str,n)#截取str从第n个字符起的子串,str下标从1开始。
substr(str,start,len)#截取str从第start个字符起,长度为len的子串。
instr(str,substr)#返回子串第一次出现的索引,若找不到,返回0。
trim(str)#去除str的前后空格。
trim(char from str)#去除str中的前后字符char。
Lpad(str,n,char)#用指定字符char左填充指定长度n的str。
Rpad(str,n,char)#用指定字符char右填充指定长度n的str。
replace(str,oriStr,desStr)#用desStr替换str中的所有的oriStr。
数字函数:
round(num)#四舍五入
round(num,n)#四舍五入,小数点后保留n位
CEIL(num)#向上取整,返回>=num的最小整数
FLOOR(num)#向下取整,返回<=num的最大整数
truncate(num,n)#截取到num小数点后的第n位
mod(a,b)#等价于a%b(计算方法:a-a/b*b)
rand()#返回0到1之间的随机数,左闭右开
日期函数:
now()#返回当前系统日期+时间
current_date()#返回当前系统日期
current_time()#返回当前系统时间
year\month\day\hour\minute\second(str)#f返回str的年、月、日、时、分、秒
str_to_date(str,format)#把str转换成指定format的日期
date_format(date,format)#将日期转换成指定format的字符
datediff(date1,date2)#返回两个日期之间相差的天数(date1-date2)
日期时间格式参照表:
其他函数:
version()#当前版本
database()#当前数据库
user()#当前用户
password(str)#返回str的加密形式
流程控制函数:
if(条件,str1,str2)#与三元运算符用法一致
#case的用法1:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
#case的用法2:
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
#case两种用法的区别:第一种是等值判断,第二种是区间判断。
分组函数:和分组函数一同查询的字段通常为group by后的字段。
分组函数的筛选条件分为两类:
1.分组前筛选:数据源是原始表,条件位于group by的前面。
2.分组后筛选:数据源是分组后的结果集,条件位于group by的后面。
分组函数做条件一定是位于having子句中。
sum、avg一般处理数值型,忽略空值。
max、min、count可以处理任何类型,忽略空值。
count(*)用来统计表的总行数。
子查询:
分页查询:
联合查询:
删除数据:
修改数据库的字符集:alter database name character set gbk\utf-8;
创建表:
修改表:
复制表:
复制表的某些字段结构:
数据类型:
1.整形:
关键字unsigned:无正负符号。
关键字zerofill:左边可以填充0,默认无正负符号。
2.小数:
字符类型:
char:固定长度的字符类型。
varchar:可变长度的字符类型。
枚举类型:
c1字段只能插入’a’,‘b’,'c’中的任意一个。
集合类型:
日期类型:
datetime和timestamp的区别:
约束:
外键的特点:
约束的分类:
1.列级约束:外键不支持列级约束。
2.表级约束:非空、默认值不支持表级约束。
创建约束的时机:
1.创建表时:
添加列级约束:
添加表级约束:
2.修改表时:
删除约束:
标识列(自增长列):