数据库--day3

/*三、日期函数
-------------------------------------------------------
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

  

猜你喜欢

转载自www.cnblogs.com/yasina/p/12766992.html