Mysql表查询加强
  TEZNKK3IfmPf 2023年11月13日 26 0

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开始计算

Mysql表查询加强

按雇员的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

Mysql表查询加强

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
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: mysql统计函数 下一篇: 数据库的增删改查
  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   24   0   0 mysql
  TEZNKK3IfmPf   2024年05月17日   48   0   0 sqlmysql
  TEZNKK3IfmPf   2024年05月31日   26   0   0 数据库mysql
  TEZNKK3IfmPf   2024年05月17日   45   0   0 查询mysql索引
  TEZNKK3IfmPf   2024年05月17日   37   0   0 drill
  TEZNKK3IfmPf   2024年05月17日   50   0   0 jsonmysql
  TEZNKK3IfmPf   2024年05月17日   48   0   0 mysqlphp
  TEZNKK3IfmPf   2024年05月31日   25   0   0 数据库mysql
TEZNKK3IfmPf