一、基础查询
二、条件查询
三、排序查询
分为两组:1.单行函数 2.统计函数(分组函数)
字符函数:length concat upper lower substr substring trim lpad rpad repalce
#字符函数
#length:参数的字节个数
SELECT LENGTH('张三丰hahaha');
SHOW VARIABLES LIKE '%char%';
#concat:拼接字符
SELECT CONCAT(last_name,first_name) 姓名 FROM employees;
#upper lower
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
#substr substring
SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;
#instr:返回子串第一次出现的索引,找不到返回0
SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put;
#trim
SELECT LENGTH(TRIM(' zhagncuishan ')) AS out_put;
SELECT TRIM('aa' FROM 'aaaaaaaaaafzvaaaaa') AS output;
#lpad rpad
SELECT LPAD('xy',2,' ') AS out_put;
#repalce
SELECT REPLACE('xyyyyzy','y','a');
数学函数:round ceil floor truncate mod
#数学函数
#round 四舍五入
SELECT ROUND(-1.50);
SELECT ROUND(1.567,2);
#ceil 向上取整 返回大于等于该数的最小整数
SELECT CEIL(1.01);
#floor 向下取整 返回小于等于该数的最大整数
SELECT FLOOR(-9.9);
#truncate 截断 保留几位小数
SELECT TRUNCATE(1.23,1) ;
#mod 取余
#mod(a,b) = a-a/b*b
SELECT MOD(10,3);
日期函数:now curdate curtime year mouth day str_to_date date_format
#now 返回当前系统日期和时间
SELECT NOW();
#curdate 返回系统当前日期不包括时间
SELECT CURDATE();
#curtime 返回系统当前时间不包含日期
SELECT CURTIME();
#可以获取指定的部分,年月日小时分钟秒
SELECT YEAR(NOW());
SELECT YEAR('1998-1-1');
SELECT YEAR(`hiredate`) 年 FROM employees;
SELECT MONTHNAME(NOW());
SELECT HOUR(NOW());
#str_to_date 将字符通过指定的格式转换成日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d');
SELECT * FROM employees WHERE hiredate = '1992-4-3';
#date_format 将日期转成字符
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');
#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT first_name,DATE_FORMAT( `hiredate`,'%m月/%d日 %Y年') FROM employees WHERE `commission_pct` IS NOT NULL;
其他函数:version() datebase() user()
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
流程控制函数:if case when then
#1.if函数 : 实现if else效果,类似于三元运算符
SELECT IF(10>5,'da','xiao');
SELECT last_name,`commission_pct`,IF(`commission_pct` IS NULL,'mei','you') 备注 FROM employees;
#2.case函数:使用一:swith case 的效果
/*
case 要判断的字段或者表达式
when 常量1 then 要显示的值或者语句1
when 常量2 then 要显示的值或者语句2
。。。
else 要显示的值或者语句n
end
*/
SELECT salary,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END 新工资
FROM employees;
#case 使用二 :类似多重if
/*
case
when 条件1then 要显示的值1或者语句1;
else 要显示的n
end
*/
SELECT CASE
WHEN salary>20000 THEN 'A'
WHEN salary BETWEEN 15000 AND 20000 THEN 'B'
WHEN salary BETWEEN 10000 AND 15000 THEN 'C'
ELSE 'D'
END 工资级别
FROM employees;
#分组函数:用作统计使用,又称为聚合函数或者统计函数或者组函数
#分类:sum求和 avg平均 max最大值 min最小值 count计算个数
#1.简单使用
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT COUNT(salary) FROM employees;
SELECT SUM(salary),ROUND( AVG(salary),2),MAX(salary),MIN(salary), COUNT(salary) FROM employees;
#2.参数支持哪些类型
#sum avg 处理数值型
#max min count 可以处理任何类型
#上述该值都是忽略了null值,不参与运算
#注意 null+任何值 都为 null
#3.可以和distinct搭配,去除了重复计算
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
#4.count函数的详细介绍
#统计个数
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
#MYISAM 老版本
#INNODB 新版本
#总的来说,SELECT COUNT(*) FROM employees;来统计行数
#5.和分组函数一同查询的字段有限制:和分组函数一同查询的字段要求是group by后的字段
SELECT AVG(salary),job_id FROM employees;