mysql
函数
-
单行函数
exists 是否存在
-
字符函数
-
? concat(a,b)拼接两个字符串
-
? ifnull(a+b,0) 如果a+b等于null,则返回0
-
upper,lower 大小写转换
select upper(‘abc’);
-
substr/substring
-
instr 返回子串第一次出现的索引,如果找不到就返回0
-
trim 去除字符串前后的空格
-
replace(str,from_str,to_str)将第一个参数中的字符与第二个相等的字符替换成第三个参数
-
-
数学函数
- round 四舍五入
- ceil 向上取整 返回>=该参数的最小整数
- floor 向下取整 返回<=该参数的最大整数
- truncate 截断
- mod取余
-
日期函数
-
now 返回当前系统日期+时间
-
curdate 返回当前系统日期,不i包含日期
-
curtime 返回当前时间,不包含日期
-
str_to_date 将日期格式的字符串转换为指定格式的日期
-
date_formate 将日期转换成字符
DATE_FORMAT(‘2018/6/6‘,‘%年%月%日‘)
-
str_todate 将字符转换成日期
STR_TO_DATE(’9-13-1999‘,‘%m-%d-%Y’)
-
-
其他函数
-
流程控制函数
-
分组函数(统计函数,聚合函数)
sum 求和
avg 平均值
max 最大
min 最小
count 计算个数
? count(1)、count(*)查询表中总条数
-
group by
select 分组函数 列(要求出现在group by 的后边)
from 表 【where 筛选条件】
group by 分组的列表
【order by 子句】
where和having都是用来进行条件筛选的,where 是在分组前进行的,having是在分组后进行筛选的
连接查询
笛卡尔乘积现象:表1 有m行,表2:有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
-
内连接
- 等值连接
- 非等值连接
- 自连接(同一张表,需要B字段作为A字段的查询条件。所以将同一张表看作两张表进行连接查询)
-
外连接
应用场景:用于查询一个表中有,另一个表中没有的纪录
特点:1、外连接的查询结果为主表中的所有记录
? 如果从表中有和他匹配的,则显示匹配的值
? 如果从表中没有和他匹配,则显示为空
? 外连接查询结果=内连接查询结果+主表中有而从表中没 有的记录
? 2、左外连接,left join 左边是主表
? 右外连接,right join 又表示主表
? 3、左外和右外交换两个表的顺序,可以实现同样的效果
-
左外连接
left join
-
右外连接
right join
-
全外连接
full join
查两个表的并集
-
交叉连接
cross join(实现笛卡尔乘积,目前感觉没啥用)
-
子查询
出现在其他语句中的select语句,成为子查询或内查询
外部的查询语句,称为主查询或外查询
分类:
按子查询出现的位置
? select 后面
? 仅仅支持标量子查询
? from 后面
? 支持表子查询
? where或having后面
? 标量子查询
? 列子查询
? 行子查询
? exists后面(相关子查询)
? 表子查询
按结果集的行列数不同:
? 标量子查询(结果集只有一行一列)
? 列子查询(结果集只有一列多行)
? 行子查询(结果集有一行多列)
? 表子查询(结果集一般为多行多列)
where或having后面
- 标量子查询(结果集只有一行一列)
- 列子查询(结果集只有一列多行)
- 行子查询(结果集有一行多列)
特点:
- 子查询一般放在小括号内
- 子查询一般放在条件右侧
- 标量子查询,一般搭配着单行操作符使用 > < >= <= = <>
列子查询,一般搭配这多行操作符使用
in、any/some、all
in/not in(等于列表中的任意一个)
any|some (和子查询返回的某一个值比较):可以被其他方式替代
all(和子查询返回的所有值比较):可以被其他方式替代