1. --获取当前系统时间
    2. select now()
    3. --插入数据时候直接使用now()
    4. insert into t_emp values(null,'666','六','赵','男','13900211666',2000,'游泳',2,now());
    --把日期转换成字符串
    select date_format(now(), '%Y-%m-%d %H:%i:%s');
    select date_format('2008-12-19 10:10:10', '%Y-%m-%d %H:%i:%s');
    
    --日期计算
    select date_add(now(), interval 1 day); -- 加一天
    select date_add(now(), interval 1 hour); -- 加一小时
    select date_add(now(), interval 1 minute); -- 加一分钟
    select date_add(now(), interval 1 second);--加一秒
    select date_add(now(), interval 1 microsecond);--加一毫秒
    select date_add(now(), interval 1 week);--加一周
    select date_add(now(), interval 1 month);--加一个月
    select date_add(now(), interval 1 quarter);--加一个季度
    select date_add(now(), interval 1 year);--加一年
    
    select date_add(now(), interval -1 day); -- 减一天
    
    --计算两个日期之间相差几天
    select datediff('2008-08-08', '2008-08-01'); -- 7
    select datediff('2008-08-01', '2008-08-08'); -- -7
    
    -- 1.7 显示出所有男性员工的工号,姓名,年龄
    SELECT eno,CONCAT(first_name,last_name) name, 2021-YEAR(birthday) age
    FROM t_emp
    WHERE gender = '男';
    
    --计算平均工资 avg计算平均值,sum求和,count求个数,min求最小值,max求最大值
    select min(salary),max(salary) ,avg(salary),sum(salary)/count(*) from t_emp;
    
    -- 1.16 【易错】查找没有月薪的两个人
    -- 知识点 : 判断是否为null值  is null   is not null
    SELECT * FROM t_emp WHERE salary is null;
    
    --区间查询,查询所有工资在12000到15000之间的员工,包括边界值
    select *  from t_emp where salary between 12000 and 15000;
    
    select * from t_emp where salary>=12000 and salary<=15000;
    
    -- 1.17 查询所有员工的薪资,没有薪资的员工展示为0
    -- 重点 : 空置换函数 IFNULL(exp1,exp2)  当exp1列中出现null时,将此时的值替换为exp2
    SELECT id,eno,IFNULL(salary,0) FROM t_emp;
    
    -- 1.18 查找以139开头的手机号码及它对应的员工
    -- 知识点 : 模糊查询  列 like '%内容'   '内容%'    '%内容%'  'a_'
    SELECT * FROM t_emp WHERE mobile LIKE '139%';
    
    -- 单分支选择。类似于java中的if...else...[ 条件?成功:失败]
    -- 数据库考点: 流程函数 IF(expr1,expr2,expr3)  用法类似于三元运算符
    -- 1.21 当薪资大于150000,显示super, 当薪资大于10000时,显示high, 否则显示low, 
    SELECT id,eno,birthday,salary,
                IF(salary>10000,IF(salary>15000,'super','high'),'low') AS level 
    FROM t_emp;
    
    -- 数据库中的选择分支
    CASE 
        WHEN 条件 THEN 成立时执行 
        WHEN 条件 THEN 成立时执行 
        WHEN 条件 THEN 成立时执行 
        ELSE 不成立时执行 
    END
    
    SELECT id,salary,
        CASE WHEN salary >0 and salary <=5000 THEN '奋斗吧'
           WHEN salary >5000 and salary <10000 THEN 'low' 
               WHEN salary >=10000 and salary <20000 THEN 'middle' 
                 ELSE 'high' 
      END AS level 
    FROM t_emp;
    
    -- 1.23 找到月薪最高的前三个人
    -- 分析 : 薪资降序排列所有员工
    -- 知识点 : 截取表记录  LIMIT start,num    从start行索引开始截取num条数据
    -- 积分榜/排行榜: 排序+LIMIT
    SELECT * 
    FROM t_emp 
    ORDER BY salary DESC
    LIMIT 0,3;
    
    --注意:在select中的字段,除了分组的字段外,其他都是聚合函数
    --1.24.3 统计出每个部门的最低,最高,平均薪资
    SELECT dept_id,MIN(salary),MAX(salary),AVG(IFNULL(salary,0))
    FROM t_emp
    GROUP BY dept_id;
    
    --1.26 子查询(万能查询,基本可以解决面试中的大部分问题)
    -- 子查询 : 在查询中继续嵌套查询
    --         FROM 查询的结果作为表出现 ,WHERE 查询的结果作为条件出现
    
    -- 1.26.1 查询出最高薪资的员工信息
    -- 分析 : 查出最高薪资
    SELECT * FROM t_emp WHERE salary = (SELECT MAX(salary) FROM t_emp);
    SELECT * FROM t_emp WHERE salary = (SELECT MIN(salary) FROM t_emp);
    
    -- 1.26.2 查询出高于平均薪资的员工信息
    SELECT * FROM t_emp WHERE salary > (SELECT AVG(IFNULL(salary,0)) FROM t_emp);
    
    -- 1.26.3 查询出最低和最高薪资的员工信息
    SELECT  * FROM t_emp
    WHERE salary =(SELECT MAX(salary) FROM t_emp) OR salary=(SELECT MIN(salary) FROM t_emp);
    
    SELECT  * FROM t_emp
    WHERE salary in ((SELECT MIN(salary) FROM t_emp),(SELECT MAX(salary) FROM t_emp));
    
    -- 1.26.4  数据库合并数据 UNION  UNION ALL
    -- UNION  UNION ALL  : 将两个独立的查询语句的结果进行合并(两个查询的列数要一致)
    -- 区别(面试) : UNION合并后结果去重, UNION ALL 只合并但不会去重
    --注意:每一个select的结果列的类型必须相同
    SELECT * FROM t_emp WHERE salary = (SELECT MAX(salary) FROM t_emp)
    UNION
    SELECT * FROM t_emp WHERE salary = (SELECT MIN(salary) FROM t_emp)