数据源:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`empno` int(11) NOT NULL,
`ename` varchar(255) default NULL,
`job` varchar(255) default NULL,
`mgr` int(11) default NULL,
`hiredate` date default NULL,
`sal` decimal(10,2) default NULL,
`COMM` decimal(10,2) default NULL,
`deptno` int(11) default NULL,
PRIMARY KEY (`empno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('1001', '甘宁', '文员', '1013', '2000-12-17', '8000.00', null, '20');
INSERT INTO `emp` VALUES ('1002', '黛绮丝', '销售员', '1006', '2001-02-20', '16000.00', '3000.00', '30');
INSERT INTO `emp` VALUES ('1003', '殷天正', '销售员', '1006', '2001-02-22', '12500.00', '5000.00', '30');
INSERT INTO `emp` VALUES ('1004', '刘备', '经理', '1009', '2001-04-02', '29750.00', null, '20');
INSERT INTO `emp` VALUES ('1005', '谢逊', '销售员', '1006', '2001-09-28', '12500.00', '14000.00', '30');
INSERT INTO `emp` VALUES ('1006', '关羽', '经理', '1009', '2001-05-01', '28500.00', null, '30');
INSERT INTO `emp` VALUES ('1007', '张飞', '经理', '1009', '2001-09-01', '24500.00', null, '10');
INSERT INTO `emp` VALUES ('1008', '诸葛亮', '分析师', '1004', '2007-09-01', '30000.00', null, '20');
INSERT INTO `emp` VALUES ('1009', '曾阿牛', '董事长', null, '2001-11-17', '50000.00', null, '10');
INSERT INTO `emp` VALUES ('1010', '韦一笑', '销售员', '1006', '2001-09-08', '15000.00', '0.00', '30');
INSERT INTO `emp` VALUES ('1011', '周泰', '文员', '1008', '2007-05-28', '11000.00', null, '20');
INSERT INTO `emp` VALUES ('1012', '程普', '文员', '1006', '2001-12-03', '9500.00', null, '30');
INSERT INTO `emp` VALUES ('1013', '庞统', '分析师', '1004', '2001-12-09', '30000.00', null, '20');
INSERT INTO `emp` VALUES ('1014', '黄盖', '文员', '1007', '2002-01-23', '13000.00', null, '10');
INSERT INTO `emp` VALUES ('1015', '张三', '保洁员', '1001', '2019-09-02', '80000.00', '50000.00', '50');
查询语句:
1、查询出部门编号为30的所有员工
select * from emp where deptno = 30;
2、查询所有销售员的名字、编号和部门编号
select ename as 姓名, empno as 编号, deptno as 部门编号
from emp
where job = '销售员';
3、找出奖金高于工资的员工
select *
from emp
where COMM > sal;
4、找出奖金高于工资60%的员工
select *,(IFNULL(sal,0)*0.6) as `工资的60%`
from emp
where COMM > sal*0.6;
注意:
其中IFNULL是聚合函数:表示将null值变为数值0,便于数学计算
别名中要输出特殊字符 必须使用``反引号(键盘左上角第二排第一个)包含输出内容
5、找出部门编号为10中所有经理和部门编号为20中所有销售人员的详细资料
select *
from emp
where (deptno = '10' and job = '经理') or (deptno='20' and job='销售员');
6、找出部门编号为10中所有经理,部门编号为20中所有销售员,还有既不是经理又不是销售员但其工资大于或等于20000的所有员工详细资料
select *
from emp
where (deptno = '10' and job = '经理') or (deptno='20' and job='销售员') or (job != '经理' and job != '销售员' and sal > 20000);
或者
select *
from emp
where (deptno = '10' and job = '经理') or (deptno='20' and job='销售员') or (job NOT IN('经理', '销售员') and sal >= 20000);
7、无奖金或奖金低于1000的员工
select *
from emp
where COMM IS null OR COMM < 1000;
8、 查询名字由三个字组成的员工
select *
from emp
where ename LIKE '___';
9、查询2000年入职的员工
select *
from emp
where hiredate BETWEEN '2000-01-01' AND '2000-12-31';
或者
select *
from emp
where hiredate like '2000-%';
10、查询所有员工详细信息,用编号降序排序
select *
from emp
ORDER BY empno desc;
11、查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
select *
from emp
ORDER BY sal DESC, hiredate ASC;
12、查询每个部门的平均工资
select deptno, AVG(sal) as 平均工资
from emp
GROUP BY deptno;
13、查询每个部门的雇员数量
select deptno, COUNT(*) as 部门人数
from emp
GROUP BY deptno;
14、查询每种工作的最高工资、最低工资、人数
select job, MAX(sal) as 最高工资, MIN(sal) as 最低工资, COUNT(*)
from emp
GROUP BY job;