/*三、日期函数
-------------------------------------------------------
now 返回当前系统日期
curdate 返回系统日期 不包含时间
curtime 返回时间 不包含日期
SELECT NOW();
SELECT CURTIME();
SELECT CURDATE();
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());
SELECT YEAR(hiredate) FROM employees;
-----------------------------------------------------------
STR_TO_DATE 将日期格式的字符串转换成指定格式的日期
select STR_TO_DATE('4-23-2020','%m-%d-%Y')
DATE_FORMAT日期转化成字符
select DATE_FORMAT('2020/4/23','%Y年%m月%d日');
日期格式说明
%Y 2019
%y 19
%m 04
%c 4
%d 08
%H 24小时制
%h 12小时制
%i 分00 01 .. 59
%s 秒00 01 .. 59
*/
/*
4、其他函数
show version 当前数据库服务器的版本
show database 当前打开的数据库
show user当前用户
password('字符'):返回该字符的密码形式
md5('字符'):返回该字符的md5加密形式
*/
/*
5、流程控制函数
①if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2
②case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end
③case情况2
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
*/
/*三、分组函数
1、分类
max 最大值
min 最小值
sum 和
avg 平均值
count 计算个数(统计非空值的个数)
SELECT SUM(salary) FROM employees;
SELECT COUNT(`salary`),COUNT(`commission_pct`) FROM employees;
sum avg 一般处理数值型
max min count 支持数值 字符 日期型
sum avg min max count 忽略NULL值
SELECT SUM(IFNULL(`commission_pct`,0)) FROM employees;
可以和distinct去重一起用
SELECT COUNT(DISTINCT salary) FROM employees;
//查询表有几行
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
*/
#####进阶5、分组查询 gounp by
/*
SELECT colum,group_function(colum)
FROM _table
WHERE _condition
GROUP BY group_by_expressionl
ORDER BY columnl
*/
#查询每个工种的最大工资
SELECT
MAX(salary),
job_id
FROM
employees
GROUP BY job_id
#查询每个位置上的部门个数
SELECT COUNT(*) ,location_id
FROM departments
GROUP BY location_id
#查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary) ,department_id,email
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id
#查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),`manager_id`,commission_pct
FROM employees
WHERE `commission_pct` IS NOT NULL
GROUP BY `manager_id`
#查询哪个部门的员工个数大于2
//1、查询每个部门的员工个数
SELECT COUNT(*) , `department_id`
FROM employees
GROUP BY department_id
//2、根据1的结果查询//先分组 然后再用HAVING筛选
SELECT COUNT(*) , `department_id`
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2
#查询每个工种 有奖金的员工的 最高工资大于12000的 员工
SELECT salary,`first_name`,`job_id`
FROM employees
WHERE `commission_pct` IS NOT NULL
GROUP BY `job_id`
HAVING MAX(salary)>12000
#查询 领导编号>102的 每个领导手下的 最低工资>5000的 领导编号是哪个?
SELECT `manager_id`,first_name,salary
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000