一、建表并插入数据
1.detp表
CREATE DATABASE dept_emp;
USE dept_emp;
CREATE TABLE dept (
deptno INT ( 2 ) NOT NULL COMMENT '部门编号' ,
dname VARCHAR ( 15 ) COMMENT '部门名称' ,
loc VARCHAR ( 20 ) COMMENT '地理位置'
) ;
ALTER TABLE dept ADD PRIMARY KEY ( deptno) ;
INSERT INTO dept ( deptno, dname, loc) VALUES ( 10 , '财务部' , '高新四路' ) ;
INSERT INTO dept ( deptno, dname, loc) VALUES ( 20 , '人事部' , '科技二路' ) ;
INSERT INTO dept ( deptno, dname, loc) VALUES ( 30 , '销售部' , '长安区' ) ;
INSERT INTO dept ( deptno, dname, loc) VALUES ( 40 , '运输部' , '雁塔区' ) ;
mysql> select * from dept;
+
| deptno | dname | loc |
+
| 10 | 财务部 | 高新四路 |
| 20 | 人事部 | 科技二路 |
| 30 | 销售部 | 长安区 |
| 40 | 运输部 | 雁塔区 |
+
4 rows in set ( 0.02 sec)
2.emp表
CREATE TABLE emp(
empno INT ( 4 ) NOT NULL COMMENT '员工编号' ,
ename VARCHAR ( 10 ) COMMENT '员工名字' ,
job VARCHAR ( 10 ) COMMENT '职位' ,
mgr INT ( 4 ) COMMENT '上司' ,
hiredate DATE COMMENT '入职时间' ,
sal INT ( 7 ) COMMENT '基本工资' ,
comm INT ( 7 ) COMMENT '补贴' ,
deptno INT ( 2 ) COMMENT '所属部门编号'
) ;
ALTER TABLE emp ADD PRIMARY KEY ( empno) ;
ALTER TABLE emp ADD CONSTRAINT f_ed_key
FOREIGN KEY ( deptno)
REFERENCES dept( deptno) ;
INSERT INTO ` emp` VALUES ( '7369' , '张倩' , '办事员' , '7902' , '2002-12-17' , '820' , NULL , '20' ) ;
INSERT INTO ` emp` VALUES ( '7499' , '刘博' , '售货员' , '7698' , '1992-02-20' , '1900' , '300' , '30' ) ;
INSERT INTO ` emp` VALUES ( '7521' , '李兴' , '售货员' , '7698' , '1995-07-22' , '1250' , '500' , '30' ) ;
INSERT INTO ` emp` VALUES ( '7566' , '李雷' , '人事部长' , '7839' , '1991-04-02' , '975' , NULL , '20' ) ;
INSERT INTO ` emp` VALUES ( '7654' , '刘浩' , '售货员' , '7698' , '1991-09-28' , '1250' , '1400' , '30' ) ;
INSERT INTO ` emp` VALUES ( '7698' , '刘涛' , '销售部长' , '7839' , '1997-05-01' , '2850' , NULL , '30' ) ;
INSERT INTO ` emp` VALUES ( '7782' , '华仔' , '人事部长' , '7839' , '1995-06-09' , '2450' , NULL , '10' ) ;
INSERT INTO ` emp` VALUES ( '7788' , '张飞' , '人事专员' , '7566' , '1998-04-19' , '3000' , NULL , '20' ) ;
INSERT INTO ` emp` VALUES ( '7839' , '马晓云' , '董事长' , NULL , '1991-11-17' , '5000' , NULL , '10' ) ;
INSERT INTO ` emp` VALUES ( '7844' , '马琪' , '售货员' , '7698' , '1996-09-08' , '1500' , '0' , '30' ) ;
INSERT INTO ` emp` VALUES ( '7876' , '李涵' , '办事员' , '7788' , '1997-05-23' , '1100' , NULL , '20' ) ;
INSERT INTO ` emp` VALUES ( '7900' , '李小涵' , '销售员' , '7698' , '1993-2-13' , '950' , NULL , '30' ) ;
INSERT INTO ` emp` VALUES ( '7902' , '张三' , '人事组长' , '7566' , '1992-10-08' , '3000' , NULL , '20' ) ;
INSERT INTO ` emp` VALUES ( '7934' , '张三丰' , '人事长' , '7782' , '1997-06-23' , '1300' , NULL , '10' ) ;
mysql> select * from emp;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7369 | 张倩 | 办事员 | 7902 | 2002 - 12 - 17 | 820 | NULL | 20 |
| 7499 | 刘博 | 售货员 | 7698 | 1992 - 02 - 20 | 1900 | 300 | 30 |
| 7521 | 李兴 | 售货员 | 7698 | 1995 - 07 - 22 | 1250 | 500 | 30 |
| 7566 | 李雷 | 人事部长 | 7839 | 1991 - 04 - 02 | 975 | NULL | 20 |
| 7654 | 刘浩 | 售货员 | 7698 | 1991 - 09 - 28 | 1250 | 1400 | 30 |
| 7698 | 刘涛 | 销售部长 | 7839 | 1997 - 05 - 01 | 2850 | NULL | 30 |
| 7782 | 华仔 | 人事部长 | 7839 | 1995 - 06 - 09 | 2450 | NULL | 10 |
| 7788 | 张飞 | 人事专员 | 7566 | 1998 - 04 - 19 | 3000 | NULL | 20 |
| 7839 | 马晓云 | 董事长 | NULL | 1991 - 11 - 17 | 5000 | NULL | 10 |
| 7844 | 马琪 | 售货员 | 7698 | 1996 - 09 - 08 | 1500 | 0 | 30 |
| 7876 | 李涵 | 办事员 | 7788 | 1997 - 05 - 23 | 1100 | NULL | 20 |
| 7900 | 李小涵 | 销售员 | 7698 | 1993 - 02 - 13 | 950 | NULL | 30 |
| 7902 | 张三 | 人事组长 | 7566 | 1992 - 10 - 08 | 3000 | NULL | 20 |
| 7934 | 张三丰 | 人事长 | 7782 | 1997 - 06 - 23 | 1300 | NULL | 10 |
+
14 rows in set ( 0.00 sec)
3.salgrade表
CREATE TABLE salgrade(
grade INT ( 10 ) COMMENT '工资等级' ,
losal INT ( 10 ) COMMENT '最低限额' ,
hisal INT ( 10 ) COMMENT '最高限额'
) ;
INSERT INTO salgrade ( grade, losal, hisal) VALUES ( 1 , 700 , 1200 ) ;
INSERT INTO salgrade ( grade, losal, hisal) VALUES ( 2 , 1201 , 1400 ) ;
INSERT INTO salgrade ( grade, losal, hisal) VALUES ( 3 , 1401 , 2000 ) ;
INSERT INTO salgrade ( grade, losal, hisal) VALUES ( 4 , 2001 , 3000 ) ;
INSERT INTO salgrade ( grade, losal, hisal) VALUES ( 5 , 3001 , 9999 ) ;
mysql> select * from salgrade;
+
| grade | losal | hisal |
+
| 1 | 700 | 1200 |
| 2 | 1201 | 1400 |
| 3 | 1401 | 2000 |
| 4 | 2001 | 3000 |
| 5 | 3001 | 9999 |
+
5 rows in set ( 0.00 sec)
二、 单表查询
1.选择部门30中的所有员工
mysql> select empno 编号, ename 姓名 from emp where deptno = 30 ;
+
| 编号 | 姓名 |
+
| 7499 | 刘博 |
| 7521 | 李兴 |
| 7654 | 刘浩 |
| 7698 | 刘涛 |
| 7844 | 马琪 |
| 7900 | 李小涵 |
+
6 rows in set ( 0.00 sec)
2.列出所有办事员的姓名,编号和部门编号
mysql> select empno 编号, ename 姓名, deptno 部门号 from emp where job = '办事员' ;
+
| 编号 | 姓名 | 部门号 |
+
| 7369 | 张倩 | 20 |
| 7876 | 李涵 | 20 |
+
2 rows in set ( 0.01 sec)
3.找出佣金高于薪金的员工
mysql> select empno 编号, ename 姓名 from emp where comm > sal;
+
| 编号 | 姓名 |
+
| 7654 | 刘浩 |
+
1 row in set ( 0.00 sec)
4.找出没有佣金的员工
mysql> select empno 编号, ename 姓名, comm 佣金 from emp where comm is null ;
+
| 编号 | 姓名 | 佣金 |
+
| 7369 | 张倩 | NULL |
| 7566 | 李雷 | NULL |
| 7698 | 刘涛 | NULL |
| 7782 | 华仔 | NULL |
| 7788 | 张飞 | NULL |
| 7839 | 马晓云 | NULL |
| 7876 | 李涵 | NULL |
| 7900 | 李小涵 | NULL |
| 7902 | 张三 | NULL |
| 7934 | 张三丰 | NULL |
+
10 rows in set ( 0.00 sec)
5.找出佣金高于薪金的60%的员工
mysql> select empno 编号, ename 姓名 from emp where comm > sal * 0.6 ;
+
| 编号 | 姓名 |
+
| 7654 | 刘浩 |
+
1 row in set ( 0.01 sec)
6.找出部门10中所有人事部长和部门20中所有办事员的详细资料
mysql> select * from emp where ( ( deptno = 10 and job = '人事部长' ) or ( deptno = 20 AND job = '办事员' ) ) ;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7782 | 华仔 | 人事部长 | 7839 | 1995 - 06 - 09 | 2450 | NULL | 10 |
| 7369 | 张倩 | 办事员 | 7902 | 2002 - 12 - 17 | 820 | NULL | 20 |
| 7876 | 李涵 | 办事员 | 7788 | 1997 - 05 - 23 | 1100 | NULL | 20 |
+
3 rows in set ( 0.00 sec)
7.找出收取佣金的员工
mysql> select empno 编号, ename 姓名, comm 佣金 from emp where comm is not null ;
+
| 编号 | 姓名 | 佣金 |
+
| 7499 | 刘博 | 300 |
| 7521 | 李兴 | 500 |
| 7654 | 刘浩 | 1400 |
| 7844 | 马琪 | 0 |
+
4 rows in set ( 0.00 sec)
8.找出不收取佣金或收取的佣金低于100的员工
mysql> select empno 编号, ename 姓名, comm 佣金 from emp where comm is null or comm < 100 ;
+
| 编号 | 姓名 | 佣金 |
+
| 7369 | 张倩 | NULL |
| 7566 | 李雷 | NULL |
| 7698 | 刘涛 | NULL |
| 7782 | 华仔 | NULL |
| 7788 | 张飞 | NULL |
| 7839 | 马晓云 | NULL |
| 7844 | 马琪 | 0 |
| 7876 | 李涵 | NULL |
| 7900 | 李小涵 | NULL |
| 7902 | 张三 | NULL |
| 7934 | 张三丰 | NULL |
+
11 rows in set ( 0.00 sec)
9.找出姓张的员工的信息
mysql> select * from emp where ename regexp '^张' ;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7369 | 张倩 | 办事员 | 7902 | 2002 - 12 - 17 | 820 | NULL | 20 |
| 7788 | 张飞 | 人事专员 | 7566 | 1998 - 04 - 19 | 3000 | NULL | 20 |
| 7902 | 张三 | 人事组长 | 7566 | 1992 - 10 - 08 | 3000 | NULL | 20 |
| 7934 | 张三丰 | 人事长 | 7782 | 1997 - 06 - 23 | 1300 | NULL | 10 |
+
4 rows in set ( 0.04 sec)
10.显示员工的姓名和受雇日期,新的员工排在最前面
mysql> select ename 姓名, hiredate 受雇日期 from emp order by hiredate desc ;
+
| 姓名 | 受雇日期 |
+
| 张倩 | 2002 - 12 - 17 |
| 张飞 | 1998 - 04 - 19 |
| 张三丰 | 1997 - 06 - 23 |
| 李涵 | 1997 - 05 - 23 |
| 刘涛 | 1997 - 05 - 01 |
| 马琪 | 1996 - 09 - 08 |
| 李兴 | 1995 - 07 - 22 |
| 华仔 | 1995 - 06 - 09 |
| 李小涵 | 1993 - 02 - 13 |
| 张三 | 1992 - 10 - 08 |
| 刘博 | 1992 - 02 - 20 |
| 马晓云 | 1991 - 11 - 17 |
| 刘浩 | 1991 - 09 - 28 |
| 李雷 | 1991 - 04 - 02 |
+
14 rows in set ( 0.00 sec)
11.按工作的降序排序,若工作相同则按薪金排序
mysql> select empno 编号, ename 姓名, job 工作, sal 薪资 from emp order by job desc , sal;
+
| 编号 | 姓名 | 工作 | 薪资 |
+
| 7698 | 刘涛 | 销售部长 | 2850 |
| 7900 | 李小涵 | 销售员 | 950 |
| 7839 | 马晓云 | 董事长 | 5000 |
| 7521 | 李兴 | 售货员 | 1250 |
| 7654 | 刘浩 | 售货员 | 1250 |
| 7844 | 马琪 | 售货员 | 1500 |
| 7499 | 刘博 | 售货员 | 1900 |
| 7369 | 张倩 | 办事员 | 820 |
| 7876 | 李涵 | 办事员 | 1100 |
| 7934 | 张三丰 | 人事长 | 1300 |
| 7566 | 李雷 | 人事部长 | 975 |
| 7782 | 华仔 | 人事部长 | 2450 |
| 7902 | 张三 | 人事组长 | 3000 |
| 7788 | 张飞 | 人事专员 | 3000 |
+
14 rows in set ( 0.00 sec)
12.查出不姓刘的员工的信息
mysql> select * from emp where ename regexp '^[^刘]' ;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7369 | 张倩 | 办事员 | 7902 | 2002 - 12 - 17 | 820 | NULL | 20 |
| 7521 | 李兴 | 售货员 | 7698 | 1995 - 07 - 22 | 1250 | 500 | 30 |
| 7566 | 李雷 | 人事部长 | 7839 | 1991 - 04 - 02 | 975 | NULL | 20 |
| 7782 | 华仔 | 人事部长 | 7839 | 1995 - 06 - 09 | 2450 | NULL | 10 |
| 7788 | 张飞 | 人事专员 | 7566 | 1998 - 04 - 19 | 3000 | NULL | 20 |
| 7839 | 马晓云 | 董事长 | NULL | 1991 - 11 - 17 | 5000 | NULL | 10 |
| 7844 | 马琪 | 售货员 | 7698 | 1996 - 09 - 08 | 1500 | 0 | 30 |
| 7876 | 李涵 | 办事员 | 7788 | 1997 - 05 - 23 | 1100 | NULL | 20 |
| 7900 | 李小涵 | 销售员 | 7698 | 1993 - 02 - 13 | 950 | NULL | 30 |
| 7902 | 张三 | 人事组长 | 7566 | 1992 - 10 - 08 | 3000 | NULL | 20 |
| 7934 | 张三丰 | 人事长 | 7782 | 1997 - 06 - 23 | 1300 | NULL | 10 |
+
11 rows in set ( 0.00 sec)
13.取出姓李的员工
mysql> select empno 编号, ename 姓名 from emp where ename regexp '^李' ;
+
| 编号 | 姓名 |
+
| 7521 | 李兴 |
| 7566 | 李雷 |
| 7876 | 李涵 |
| 7900 | 李小涵 |
+
4 rows in set ( 0.00 sec)
三、多表查询
1. 查询出每一位雇员的编号、姓名、职位、部门名称、位置
mysql> select empno 编号, ename 姓名, job 职位, dname 部门名称, loc 位置 from emp e inner join dept d on e. deptno = d. deptno;
+
| 编号 | 姓名 | 职位 | 部门名称 | 位置 |
+
| 7782 | 华仔 | 人事部长 | 财务部 | 高新四路 |
| 7839 | 马晓云 | 董事长 | 财务部 | 高新四路 |
| 7934 | 张三丰 | 人事长 | 财务部 | 高新四路 |
| 7369 | 张倩 | 办事员 | 人事部 | 科技二路 |
| 7566 | 李雷 | 人事部长 | 人事部 | 科技二路 |
| 7788 | 张飞 | 人事专员 | 人事部 | 科技二路 |
| 7876 | 李涵 | 办事员 | 人事部 | 科技二路 |
| 7902 | 张三 | 人事组长 | 人事部 | 科技二路 |
| 7499 | 刘博 | 售货员 | 销售部 | 长安区 |
| 7521 | 李兴 | 售货员 | 销售部 | 长安区 |
| 7654 | 刘浩 | 售货员 | 销售部 | 长安区 |
| 7698 | 刘涛 | 销售部长 | 销售部 | 长安区 |
| 7844 | 马琪 | 售货员 | 销售部 | 长安区 |
| 7900 | 李小涵 | 销售员 | 销售部 | 长安区 |
+
14 rows in set ( 0.00 sec)
2.要求查询出每一位雇员的姓名、职位、领导的姓名
mysql> select a. ename 员工, a. job 职位, b. ename 领导 from emp a left join emp b on a. mgr = b. empno;
+
| 员工 | 职位 | 领导 |
+
| 张倩 | 办事员 | 张三 |
| 刘博 | 售货员 | 刘涛 |
| 李兴 | 售货员 | 刘涛 |
| 李雷 | 人事部长 | 马晓云 |
| 刘浩 | 售货员 | 刘涛 |
| 刘涛 | 销售部长 | 马晓云 |
| 华仔 | 人事部长 | 马晓云 |
| 张飞 | 人事专员 | 李雷 |
| 马晓云 | 董事长 | NULL |
| 马琪 | 售货员 | 刘涛 |
| 李涵 | 办事员 | 张飞 |
| 李小涵 | 销售员 | 刘涛 |
| 张三 | 人事组长 | 李雷 |
| 张三丰 | 人事长 | 华仔 |
+
14 rows in set ( 0.00 sec)
3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置。
mysql> select a. empno 编号, a. ename 姓名, a. sal 基本工资, a. job 职位, b. ename 领导, d. dname 部门名, d. loc 位置 from emp a
- > left join emp b on a. mgr = b. empno
- > inner join dept d on a. deptno = d. deptno;
+
| 编号 | 姓名 | 基本工资 | 职位 | 领导 | 部门名 | 位置 |
+
| 7782 | 华仔 | 2450 | 人事部长 | 马晓云 | 财务部 | 高新四路 |
| 7839 | 马晓云 | 5000 | 董事长 | NULL | 财务部 | 高新四路 |
| 7934 | 张三丰 | 1300 | 人事长 | 华仔 | 财务部 | 高新四路 |
| 7369 | 张倩 | 820 | 办事员 | 张三 | 人事部 | 科技二路 |
| 7566 | 李雷 | 975 | 人事部长 | 马晓云 | 人事部 | 科技二路 |
| 7788 | 张飞 | 3000 | 人事专员 | 李雷 | 人事部 | 科技二路 |
| 7876 | 李涵 | 1100 | 办事员 | 张飞 | 人事部 | 科技二路 |
| 7902 | 张三 | 3000 | 人事组长 | 李雷 | 人事部 | 科技二路 |
| 7499 | 刘博 | 1900 | 售货员 | 刘涛 | 销售部 | 长安区 |
| 7521 | 李兴 | 1250 | 售货员 | 刘涛 | 销售部 | 长安区 |
| 7654 | 刘浩 | 1250 | 售货员 | 刘涛 | 销售部 | 长安区 |
| 7698 | 刘涛 | 2850 | 销售部长 | 马晓云 | 销售部 | 长安区 |
| 7844 | 马琪 | 1500 | 售货员 | 刘涛 | 销售部 | 长安区 |
| 7900 | 李小涵 | 950 | 销售员 | 刘涛 | 销售部 | 长安区 |
+
14 rows in set ( 0.00 sec)
4.列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号。
mysql> select ename 姓名 from emp e inner join dept d on e. deptno = d. deptno where dname = '销售部' ;
+
| 姓名 |
+
| 刘博 |
| 李兴 |
| 刘浩 |
| 刘涛 |
| 马琪 |
| 李小涵 |
+
6 rows in set ( 0.00 sec)
5.列出与"李兴"从事相同工作的所有员工。
mysql> select ename 姓名 from emp where job = ( select job from emp where ename = '李兴' ) ;
+
| 姓名 |
+
| 刘博 |
| 李兴 |
| 刘浩 |
| 马琪 |
+
4 rows in set ( 0.05 sec)
6.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
mysql> select ename 姓名, sal 工资 from emp where sal > ( select max ( sal) from emp where deptno = 30 ) ;
+
| 姓名 | 工资 |
+
| 张飞 | 3000 |
| 马晓云 | 5000 |
| 张三 | 3000 |
+
3 rows in set ( 0.00 sec)
7.列出受雇日期早于其直接上级的所有员工。
mysql> select a. ename 姓名, a. hiredate 受雇日期 from emp a inner join emp b on a. mgr = b. empno where a. hiredate < b. hiredate;
+
| 姓名 | 受雇日期 |
+
| 刘博 | 1992 - 02 - 20 |
| 李兴 | 1995 - 07 - 22 |
| 李雷 | 1991 - 04 - 02 |
| 刘浩 | 1991 - 09 - 28 |
| 马琪 | 1996 - 09 - 08 |
| 李涵 | 1997 - 05 - 23 |
| 李小涵 | 1993 - 02 - 13 |
+
7 rows in set ( 0.00 sec)
四、分组函数查询
1.按照部门编号分组,求出每个部的人数,平均工资
mysql> select deptno 部门号, count ( * ) 人数, avg ( sal) 平均工资 from emp group by deptno;
+
| 部门号 | 人数 | 平均工资 |
+
| 10 | 3 | 2916.6667 |
| 20 | 5 | 1779.0000 |
| 30 | 6 | 1616.6667 |
+
3 rows in set ( 0.00 sec)
2.按照职位分组,求出每个职位的最高和最低工资
mysql> select job 职位, max ( sal) 最高工资, min ( sal) 最低工资 from emp group by job;
+
| 职位 | 最高工资 | 最低工资 |
+
| 办事员 | 1100 | 820 |
| 售货员 | 1900 | 1250 |
| 人事部长 | 2450 | 975 |
| 销售部长 | 2850 | 2850 |
| 人事专员 | 3000 | 3000 |
| 董事长 | 5000 | 5000 |
| 销售员 | 950 | 950 |
| 人事组长 | 3000 | 3000 |
| 人事长 | 1300 | 1300 |
+
9 rows in set ( 0.00 sec)
3.计算出每个各职位的平均工资
mysql> select job 职位, avg ( sal) 平均工资 from emp group by job;
+
| 职位 | 平均工资 |
+
| 办事员 | 960.0000 |
| 售货员 | 1475.0000 |
| 人事部长 | 1712.5000 |
| 销售部长 | 2850.0000 |
| 人事专员 | 3000.0000 |
| 董事长 | 5000.0000 |
| 销售员 | 950.0000 |
| 人事组长 | 3000.0000 |
| 人事长 | 1300.0000 |
+
9 rows in set ( 0.00 sec)
4.查询出每个部门的名称、部门的人数、平均工资
mysql> select d. dname 部门, count ( e. empno) 总人数, avg ( sal) 平均工资 from dept d left join emp e on e. deptno = d. deptno group by d. dname;
+
| 部门 | 总人数 | 平均工资 |
+
| 财务部 | 3 | 2916.6667 |
| 人事部 | 5 | 1779.0000 |
| 销售部 | 6 | 1616.6667 |
| 运输部 | 0 | NULL |
+
4 rows in set ( 0.00 sec)
5.要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000;
mysql> select d. deptno 部门号, d. dname 部门, d. loc 位置, count ( * ) 人数, avg ( sal) 平均工资 from emp e
- > inner join dept d on e. deptno = d. deptno group by d. deptno, d. dname, d. loc
- > having avg ( sal) > 2000 ;
+
| 部门号 | 部门 | 位置 | 人数 | 平均工资 |
+
| 10 | 财务部 | 高新四路 | 3 | 2916.6667 |
+
1 row in set ( 0.00 sec)
6.要求查询出工资比华仔还要高的全部雇员信息
mysql> select * from emp where sal > ( select sal from emp where ename = '华仔' ) ;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7698 | 刘涛 | 销售部长 | 7839 | 1997 - 05 - 01 | 2850 | NULL | 30 |
| 7788 | 张飞 | 人事专员 | 7566 | 1998 - 04 - 19 | 3000 | NULL | 20 |
| 7839 | 马晓云 | 董事长 | NULL | 1991 - 11 - 17 | 5000 | NULL | 10 |
| 7902 | 张三 | 人事组长 | 7566 | 1992 - 10 - 08 | 3000 | NULL | 20 |
+
4 rows in set ( 0.00 sec)
7.要求查询出高于公司平均工资的全部雇员信息
mysql> select * from emp where sal > ( select avg ( sal) from emp) ;
+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+
| 7698 | 刘涛 | 销售部长 | 7839 | 1997 - 05 - 01 | 2850 | NULL | 30 |
| 7782 | 华仔 | 人事部长 | 7839 | 1995 - 06 - 09 | 2450 | NULL | 10 |
| 7788 | 张飞 | 人事专员 | 7566 | 1998 - 04 - 19 | 3000 | NULL | 20 |
| 7839 | 马晓云 | 董事长 | NULL | 1991 - 11 - 17 | 5000 | NULL | 10 |
| 7902 | 张三 | 人事组长 | 7566 | 1992 - 10 - 08 | 3000 | NULL | 20 |
+
5 rows in set ( 0.00 sec)
8.查询出每个部门的编号、名称、位置、部门人数、平均工资
mysql> select d. deptno 部门号, dname 部门, loc 位置, count ( * ) 人数, avg ( sal) 平均工资 from emp e
- > inner join dept d on e. deptno = d. deptno group by d. deptno, d. dname, d. loc;
+
| 部门号 | 部门 | 位置 | 人数 | 平均工资 |
+
| 20 | 人事部 | 科技二路 | 5 | 1779.0000 |
| 30 | 销售部 | 长安区 | 6 | 1616.6667 |
| 10 | 财务部 | 高新四路 | 3 | 2916.6667 |
+
3 rows in set ( 0.00 sec)
9.列出至少有一个员工的所有部门。
mysql> select deptno 部门号, dname 部门, loc 位置 from dept where deptno in
- > ( select deptno from emp group by deptno having count ( * ) > 0 ) ;
+
| 部门号 | 部门 | 位置 |
+
| 10 | 财务部 | 高新四路 |
| 20 | 人事部 | 科技二路 |
| 30 | 销售部 | 长安区 |
+
3 rows in set ( 0.00 sec)
五、等级查询
1.查询每个工资等级各有多少员工
mysql> select grade 工资等级, count ( * ) 人数 from salgrade s inner join emp e on s. losal <= e. sal and e. sal <= s. hisal group by grade;
+
| 工资等级 | 人数 |
+
| 1 | 4 |
| 3 | 2 |
| 2 | 3 |
| 4 | 4 |
| 5 | 1 |
+
5 rows in set ( 0.00 sec)
2.查询部门中(所有人)的平均工资等级
mysql> select deptno 部门号, avg ( grade) 平均工资等级 from emp inner join salgrade on emp. sal between salgrade. losal and salgrade. hisal
- > group by deptno;
+
| 部门号 | 平均工资等级 |
+
| 20 | 2.2000 |
| 30 | 2.5000 |
| 10 | 3.6667 |
+
3 rows in set ( 0.00 sec)