1. mysql 表查询--加强 768
1.1 基本介绍
在前面我们讲过mysq|表的基本查询,但是都是对一张表进行的查询,这在实际的软件开发中,还远远的不够。下面我们讲解的过程中,将使用前面创建三张表(emp,dept,salgrade)为大家演示如何进行多表查询
1.2使用where子句 案例演示 768
?如何查找1992.1.1后入职的员工
如何使用like操作符
%:表示0到多个字符 _: 表示单个字符
?如何显示首字符为S的员姓名和工资
?如何显示第3 E个字符为大写O的所有员工的姓名和工资
如何显示没有上级的雇员的情况
查询表结构
代码在E:\java学习\初级\course157\db_
selectpro
#Mysql表查询加强 768
SELECT * FROM emp
SELECT * FROM dept
SELECT * FROM salgrade
-- 使用where子句
-- ?如何查找1992.1.1后入职的员工
#说明,在Mysql中日期类型可以直接比较,需要注意格式
SELECT * FROM emp
WHERE hiredate > '1992-01-01'
-- 如何使用like操作符(模糊查询)
-- %:表示0到多个任意字符 _:表示单个任意字符
-- ?如何显示首字符为S的员姓名和工资
SELECT ename,sal FROM emp
WHERE ename LIKE 'S%'
-- ?如何显示第3 E个字符为大写O的所有员工的姓名和工资
SELECT ename,sal FROM emp
WHERE ename LIKE '__O%'
-- 如何显示没有上级的雇员的情况
SELECT * FROM emp
WHERE mgr IS NULL
-- 查询表结构
DESC emp
DESC dept
DESC salgrade
1.3 使用order by子句 案例演示 768
?如何按照工资的从低到高的顺序,显示雇员的信息
?按照部门号升序而雇员的工资降序排列,显示雇员信息
代码在E:\java学习\初级\course157\db_
selectpro
-- 使用order by子句 768
-- ?如何按照工资的从低到高的顺序,显示雇员的信息
SELECT * FROM emp
ORDER BY sal
-- ?按照部门号升序而雇员的工资降序排列,显示雇员信息
SELECT * FROM emp
ORDER BY deptno ASC,sal DESC
1.4 分页查询 769
1.按雇员的empno号升序取出,每页显示3条记录, 请分别显示第1页,第2页,第3页
2.基本语法: select ... limit start, rows表示从start+1行开始取,取出rows行,start从0开始计算
按雇员的empno号降序取出,每页显示5条记录。 请分别显示第5页对应的sq|语句
代码在E:\java学习\初级\course157\db_
page
#分页查询 769
-- 1.按雇员的empno号升序取出,每页显示3条记录, 请分别显示第1页,第2页,第3页
-- 第一页
SELECT * FROM emp
ORDER BY empno
LIMIT 0,3
-- 第二页
SELECT * FROM emp
ORDER BY empno
LIMIT 3,3
-- 第三页
SELECT * FROM emp
ORDER BY empno
LIMIT 6,3
-- 第四页
SELECT * FROM emp
ORDER BY empno
LIMIT 9,3
-- 第五页
SELECT * FROM emp
ORDER BY empno
LIMIT 12,3
-- 推到一个公式
SELECT * FROM emp
ORDER BY empno
LIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数
-- 按雇员的empno号降序取出,每页显示5条记录。 请分别显示第5页对应的sq|语句
SELECT * FROM emp
ORDER BY empno DESC
LIMIT 20,5
1.5 使用分组函数和分组子句 770
(1)显示每种岗位的雇员总数、平均工资。
(2)显示雇员总数,以及获得补助的雇员数。
(3)显示管理者的总人数。
(4)显示雇员工资的最大差额。
代码在E:\java学习\初级\course157\db_
groupby2
#使用分组函数和分组子句 770
-- (1)显示每种岗位的雇员总数、平均工资。
SELECT COUNT(*),AVG(sal),job
FROM emp
GROUP BY job
-- (2)显示雇员总数,以及获得补助的雇员数。
-- 思路: 获得补助的雇员数 就是 comm 列为非 null, 就是 count(列),如果该列的值为 null, 是不会统计
-- , SQL 非常灵活,需要我们动脑筋.
SELECT COUNT(*),COUNT(comm)
FROM emp
-- 扩展要求:统计没有获得补助的雇员数
#解释:我们是统计没补助的即为null的个数,单数count不统计null,所以我们利用if语句,
#将为null的值赋值为1,将部位空的值赋值为空null,这样count就可以统计为null的个数了
SELECT COUNT(*),COUNT(IF(comm IS NULL,1,NULL))
FROM emp
#还可以这样写,利用总数减去得到补助的,就是没获得补助的
SELECT COUNT(*),COUNT(*)-COUNT(comm)
FROM emp
-- (3)显示管理者的总人数。
SELECT COUNT(DISTINCT mgr)#DISTINCT是去重的,因为管理者有重复的
FROM emp
-- (4)显示雇员工资的最大差额。
SELECT MAX(sal)-MIN(sal)
FROM emp
SELECT * FROM emp
1.5.1 数据分组的总结 771
如果select语句同时包含有group by ,having,limit,order by那么他们的顺序是group by , having , order by,limit
1.5.2 应用案例: 771
请统计各个部门的平均工资,并且是大于1000的,并且按照平均工资从高到低排序,取出前两行记录.
代码在E:\java学习\初级\course157\db_
groupby2
-- 请统计各个部门的平均工资,并且是大于1000的, 771
-- 并且按照平均工资从高到低排序,取出前两行记录.
SELECT AVG(sal) AS avg_sal,deptno
FROM emp
GROUP BY deptno
HAVING avg_sal > 1000
ORDER BY avg_sal DESC
LIMIT 0,2