SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for staff
-- ----------------------------
DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NAME` varchar(50) NOT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`job` varchar(20) DEFAULT NULL COMMENT '职位',
`salary` int(11) DEFAULT NULL COMMENT '薪资',
`entrydate` date DEFAULT NULL COMMENT '入职时间',
`managerid` int(11) DEFAULT NULL COMMENT '直属领导ID',
`dept_id` int(11) DEFAULT NULL COMMENT '部门ID',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='员工表';
-- ----------------------------
-- Records of staff
-- ----------------------------
INSERT INTO `staff` VALUES ('1', '金庸', '66', '总裁', '20000', '2000-01-01', null, '5');
INSERT INTO `staff` VALUES ('2', '张无忌', '20', '项目经理', '12500', '2005-12-05', '1', '1');
INSERT INTO `staff` VALUES ('3', '杨逍', '33', '开发', '8400', '2000-11-03', '2', '1');
INSERT INTO `staff` VALUES ('4', '韦一笑', '48', '开发', '11000', '2002-02-05', '2', '1');
INSERT INTO `staff` VALUES ('5', '常遇春', '43', '开发', '10500', '2004-09-07', '3', '1');
INSERT INTO `staff` VALUES ('6', '小昭', '19', '程序员鼓励师', '6600', '2004-10-12', '2', '1');
INSERT INTO `staff` VALUES ('7', '灭绝', '60', '财务总监', '8500', '2002-09-12', '1', '3');
INSERT INTO `staff` VALUES ('8', '周芷若', '19', '会计', '48000', '2006-06-02', '7', '3');
INSERT INTO `staff` VALUES ('9', '丁敏君', '23', '出纳', '5250', '2009-05-13', '7', '3');
INSERT INTO `staff` VALUES ('10', '赵敏', '20', '市场部总监', '12500', '2004-10-12', '1', '2');
INSERT INTO `staff` VALUES ('11', '鹿杖客', '56', '职员', '3750', '2006-10-03', '10', '2');
INSERT INTO `staff` VALUES ('12', '鹤笔翁', '19', '职员', '3750', '2007-05-09', '10', '2');
INSERT INTO `staff` VALUES ('13', '方东白', '19', '职员', '5500', '2009-02-12', '10', '2');
INSERT INTO `staff` VALUES ('14', '张三丰', '88', '销售总监', '14000', '2004-10-12', '1', '4');
INSERT INTO `staff` VALUES ('15', '俞莲舟', '38', '销售', '4600', '2004-10-12', '14', '4');
INSERT INTO `staff` VALUES ('16', '宋远桥', '40', '销售', '4600', '2004-10-12', '14', '4');
INSERT INTO `staff` VALUES ('17', '陈友谅', '42', null, '2000', '2011-10-12', '1', null);
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NAME` varchar(50) CHARACTER SET utf8 NOT NULL COMMENT '部门名称',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 COMMENT='部门表';
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('1', '研发部');
INSERT INTO `dept` VALUES ('2', '市场部');
INSERT INTO `dept` VALUES ('3', '财务部');
INSERT INTO `dept` VALUES ('4', '销售部');
INSERT INTO `dept` VALUES ('5', '总经办');
INSERT INTO `dept` VALUES ('6', '人事部');
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for salgrade
-- ----------------------------
DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
`grade` int(11) DEFAULT NULL COMMENT '工资等级',
`losal` int(11) DEFAULT NULL COMMENT '最低薪资',
`hisal` int(11) DEFAULT NULL COMMENT '最高薪资'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='薪资等级表';
-- ----------------------------
-- Records of salgrade
-- ----------------------------
INSERT INTO `salgrade` VALUES ('1', '0', '3000');
INSERT INTO `salgrade` VALUES ('2', '3001', '5000');
INSERT INTO `salgrade` VALUES ('3', '5001', '8000');
INSERT INTO `salgrade` VALUES ('4', '8001', '10000');
INSERT INTO `salgrade` VALUES ('5', '10001', '15000');
INSERT INTO `salgrade` VALUES ('6', '15001', '20000');
INSERT INTO `salgrade` VALUES ('7', '20001', '25000');
INSERT INTO `salgrade` VALUES ('8', '25001', '50000');
一共9个问题,问题3/4/7/9有问题,不能得到想要的答案
-- 1.查询工资小于7000的员工的姓名、年龄、职位、所属部门。
SELECT s.name '姓名', s.age '年龄', s.job '职位', d.name '所属部门'
FROM staff s join dept d on s.dept_id =d.id where s.salary<7000;
-- 2.查询所有工资大于7000岁的员工的姓名、年龄、入职时间、所属部门; 如果员工没有分配部门, 也需要展示出来;并按入职时间升序排序。
SELECT s.name '姓名', s.age '年龄', s.entrydate '入职时间', d.name '所属部门'
FROM staff s left join dept d on s.dept_id =d.id where s.salary>7000 ORDER BY s.entrydate;
-- 3.查询所有员工的工资等级及所属部门,显示所属部门、员工姓名、入职时间、薪资、工资等级,并按工资进行升序排序
SELECT d.name '所属部门', s.name '员工姓名', s.entrydate '入职时间', s.salary '薪资',sa.grade'工资等级'
FROM staff s join dept d on s.dept_id =d.id ,salgrade sa
where s.salary>sa.losal and s.salary<sa.hisal ORDER BY s.salary ;
-- 4.查询 "财务部" 所有员工的信息及工资等级,显示直属领导姓名、员工姓名、薪资、工资等级 。
SELECT s.managerid '直属领导姓名' ,s.name '员工姓名', s.salary '薪资',d.name '所属部门',sa.grade'工资等级'
FROM staff s join dept d on s.dept_id =d.id,salgrade sa
where d.NAME='研发部'and s.salary>sa.losal and s.salary<sa.hisal;
-- 5.查询各部门员工的平均工资及平均工资所在的工资等级,显示部门名称、平均工资、工资等级。
SELECT d.name '部门名称',(select avg (salary) from staff GROUP BY dept_id) '平均工资',sa.grade'工资等级'
FROM staff s join dept d on s.dept_id =d.id, salgrade sa
where s.salary>sa.losal and s.salary<sa.hisal ;
-- 6.查询入职时间比 "灭绝" 早的员工信息。
SELECT * from staff where entrydate<(select entrydate from staff where name='灭绝');
-- 7.查询比平均薪资低800的员工信息。
SELECT * from staff where salary =(select avg(salary)-800 from staff );
-- 8.查询高于本部门平均工资的员工信息。
SELECT * from staff where salary >(select avg(s.salary) from staff s , dept d where s.dept_id =d.id);
-- 9.查询所有的部门信息, 并统计部门的员工人数,员工工资总额,员工平均工资。
SELECT d.*, COUNT(s.dept_id) '人数',SUM(s.salary) '工资总额', AVG(s.salary) '平均工资'
FROM dept d
LEFT JOIN staff s ON d.id = s.dept_id;