三、条件查询
语法: SELECT 列名 FROM 表名 WHERE 条件
枚举查询(IN (值1,值2,值n…))
#枚举查询 IN (值1,值2,值n...)
#查询部门编号为70,80,90的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,DEPARTMENT_ID FROM t_employees
WHERE DEPARTMENT_ID IN(70,80,90);
#枚举查询 查询经理编号为 124 和100的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,MANAGER_ID FROM t_employees
WHERE MANAGER_ID IN(124,100);
模糊查询(_、%)
#模糊查询,查询姓氏以S开头且长度为6的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME FROM t_employees
WHERE FIRST_NAME LIKE 'S_____';
#模糊查询,查询姓氏以S开头任意长度的所有员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME FROM t_employees
WHERE FIRST_NAME LIKE 'S%';
分支结构查询
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
WHEN 条件4 THEN 结果4
ELSE 结果
END
注意:通过使用CASE END进行条件判断,每条数据对应生成一个值
#查询员工信息(编号、名字、薪资、薪资级别<条件表达式>)
SELECT EMPLOYEE_ID,FIRST_NAME,salary,
CASE
WHEN salary >=10000 THEN 'A'
WHEN salary >=8000 AND salary<10000 THEN 'B'
WHEN salary >=6000 AND salary<8000 THEN 'C'
WHEN salary >=4000 AND salary <6000 THEN 'D'
ELSE 'E'
END AS '薪资级别'
FROM t_employees;
四、时间查询
语法:SELECT 时间函数( 参数列表 );
执行时间函数查询,生成一张虚拟表
#1.当前系统时间
SELECT SYSDATE();
#2.获得当前日期
SELECT CURDATE();
#3.获得当前时间
SELECT CURTIME();
#4.获得指定日期在一年中为第几周
SELECT WEEK(CURDATE());
#5.获取指定日期中的年份
SELECT YEAR(CURDATE());
#6.获取指定日期中的月份
SELECT MONTH(CURDATE());
#7.获取指定日期中的日
SELECT DAY(CURDATE());
#8.获取指定日期中的时
SELECT HOUR(SYSDATE());
#9.获取指定日期中的分
SELECT MINUTE(SYSDATE());
#10.获取指定日期中的秒
SELECT SECOND(SYSDATE());
#11.获取Date1和Date2之间相隔的天数
SELECT DATEDIFF(SYSDATE(),'2019-3-26');
#12.在指定日期之上加N天后的日期
SELECT ADDDATE(SYSDATE(),6);
五、聚合函数
语法:SELECT 聚合函数(列名) FROM 表名;
聚合函数中,自动忽略null值。不进行统计
#1.查询员工一共多少人
SELECT COUNT(EMPLOYEE_ID) AS '员工总数' FROM t_employees;
SELECT COUNT(*) FROM t_employees;
聚合函数 | 说明 |
---|---|
COUNT() | 求总行数 |
SUM() | 求单列中所有行的总和 |
AVG() | 求单列中所有行的平均值 |
MAX() | 求单列中所有行的最大值 |
MIN() | 求单列中所有行的最小值 |
六、分组查询
语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列名)
SELECT DEPARTMENT_ID,AVG(salary) AS '平均工资',COUNT(EMPLOYEE_ID) AS'人数'
FROM t_employees
GROUP BY DEPARTMENT_ID;
分组过滤查询
语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列名) HAVING 过滤条件
过滤条件需要在SELECT中列出
#统计部门的最高工资
SELECT DEPARTMENT_ID, MAX(SALARY)
FROM t_employees
GROUP BY DEPARTMENT_ID
HAVING DEPARTMENT_ID = 90;
七、限定查询
语法:SELECT 列名 FROM 表名 LIMIT 起始行,查询行
#查询表中的第二页数据和第三页数据
SELECT * FROM t_employees LIMIT 5,5;
SELECT * FROM t_employees LIMIT 10,5;
八、查询总结
查询语句书写顺序:select 列 from 表 【where- group by- having- order by-limit】
查询语句执行顺序:from 表 where -group by -having - select - order by-limit
九、子查询
语法:SELECT 列名 FROM 表名 WHERE 条件(子查询结果)
查询表中部分列的信息,获得工资大于15000的
#1.先查询部分列的信息作为一张临时表
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees;
#2.将子查询得到的临时表作为外部查询的表
SELECT EMPLOYEE_ID ,FIRST_NAME ,salary
FROM
(SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees)AS temp
WHERE salary > 15000;