佛甲草1220 2023-05-23 21:23 采纳率: 50%
浏览 126
已结题

SQL语句课后问题修改

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;

img

  • 写回答

8条回答 默认 最新

  • 极客智能体-在线 2023-05-24 12:01
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    问题3和问题4中都有查询条件错误,具体解答如下:

    问题3:查询所有员工的工资等级及所属部门,显示所属部门、员工姓名、入职时间、薪资、工资等级,并按工资进行升序排序

    解答:

    SELECT d.name '所属部门', s.name '员工姓名', s.entrydate '入职时间', s.salary '薪资', sa.grade '工资等级'
    FROM staff s 
    JOIN dept d ON s.dept_id = d.id
    JOIN salgrade sa ON s.salary BETWEEN sa.losal AND sa.hisal
    ORDER BY s.salary ASC;
    

    问题4:查询 "财务部" 所有员工的信息及工资等级,显示直属领导姓名、员工姓名、薪资、工资等级。

    解答:

    SELECT sm.name '直属领导姓名', s.name '员工姓名', s.salary '薪资', sa.grade '工资等级'
    FROM staff s
    JOIN dept d ON s.dept_id = d.id
    JOIN staff sm ON sm.id = s.managerid
    JOIN salgrade sa ON s.salary BETWEEN sa.losal and sa.hisal
    WHERE d.name = '财务部';
    

    以上是正确的SQL代码,可以直接复制黏贴运行。

    另附上其他问题的SQL代码:

    问题1:

    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:

    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 ASC;
    

    问题5:

    SELECT d.name '部门名称', AVG(s.salary) '平均工资', sa.grade '工资等级'
    FROM staff s
    JOIN dept d ON s.dept_id = d.id
    JOIN salgrade sa ON s.salary BETWEEN sa.losal AND sa.hisal
    GROUP BY d.name;
    

    问题6:

    SELECT * FROM staff 
    WHERE entrydate < (SELECT entrydate FROM staff WHERE name = '灭绝');
    

    问题7:

    SELECT * FROM staff 
    WHERE salary < (SELECT AVG(salary) - 800 FROM staff);
    

    问题8:

    SELECT * FROM staff 
    WHERE salary > (SELECT AVG(s.salary) FROM staff s JOIN dept d ON s.dept_id = d.id WHERE d.name = '研发部');
    

    问题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
    GROUP BY d.id;
    

    如果我的回答解决了您的问题,请采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 请回答用户的提问 5月24日
  • 修改了问题 5月23日
  • 展开全部

悬赏问题

  • ¥50 求恶意流量检测系统搭建教程( C++ python C)
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys