上篇博客记录了我在mysql考试时遇到的报错,错过了考试时间【我不知道考试时间只有20分钟】

mysql 查询所有上级和下级的id mysql查询每个部门的人数_SQL


关于第二题,第三题,哪位大佬可以有点再简单的操作方法ma,或者其他方法,想学习学习,欢迎各位大佬指点指点!

这篇博客给大家分享一下我的考试题目吧,其实很简单:
准备工作,要建表用的SQL代码:

create DATABASE company_368;
USE company_368;

CREATE TABLE department_368
(
deptid CHAR(5) PRIMARY KEY,
deptname VARCHAR(20) NOT NULL,
description VARCHAR(255)
);

INSERT INTO department_368
VALUES
(303,'人事部',NULL),
(264,'销售部',NULL),
(719,'生产部',NULL),
(168,'技术部',NULL);

CREATE TABLE employee_368
(
employeeid char(6) PRIMARY KEY,
employeename varchar(50) NOT NULL,
deptid char(5),
title varchar(20),
onboarddate date NOT NULL,
selfinto varchar(255),
employeelevel INT(1),
salary int(5),
FOREIGN KEY(deptid) references department_368(deptid)
);

INSERT INTO employee_368
values
('0001','王旭',303,'科员','2014-03-05',NULL,9,4100),
('0002','张世杰',264,'经理','2001-06-01',NULL,3,7000),
('0003','陈哲',719,'科员','2009-05-09',NULL,6,6000),
('0004','闻康',303,'副经理','2005-08-06',NULL,5,5600),
('0005','孙威',264,'科员','2012-07-23',NULL,8,6500),
('0006','吴伟',168,'科员','2011-08-13',NULL,7,4100),
('0007','曾裕豪',719,'经理','2006-09-30',NULL,4,7000),
('0008','王锐光',168,'副经理','2008-06-30',NULL,5,6000),
('0009','赵玉琪',303,'科员','2012-05-10',NULL,7,2000),
('0010','李敏',168,'科员','2011-06-23',NULL,6,3000);

首先!!连接数据库:

我的话直接使用图形化界面工具了:Navicat

mysql 查询所有上级和下级的id mysql查询每个部门的人数_mysql 查询所有上级和下级的id_02


打开Navicat,连接数据库:

mysql 查询所有上级和下级的id mysql查询每个部门的人数_数据库_03


然后 Ctrl + Q新建查询,复制粘贴上面的建表代码,然后点击运行:

mysql 查询所有上级和下级的id mysql查询每个部门的人数_数据库_04


然后在这里右键刷新,即出现刚刚新建的两张表:

mysql 查询所有上级和下级的id mysql查询每个部门的人数_mysql_05


mysql 查询所有上级和下级的id mysql查询每个部门的人数_数据库_06


接下来我们开始做题目:

老师给的题目如下:

mysql 查询所有上级和下级的id mysql查询每个部门的人数_database_07

题目1:查询employee数据表中的第5—8行的数据;
题目2:查询每个部门的员工人数以及平均工资;
题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本工资

老师貌似要求用cmd来做,那我们按住Windows图标键 + R键来召唤cmd吧:

题目1:查询employee数据表中的第5—8行的数据;

这里要用到limit,
MySQL limit用法:
	select * from TABLE_NAME limit X,Y;(查询的是第X+1行 到 第X+Y行的数据)
	第一个参数X表示起始位置,指定第一个返回记录行的偏移量;
	第二个参数Y表示的是条数,指定返回记录行的最大数目,不是索引位置; 
	而初始记录行的偏移量是 0(而不是 1))
	
  以此题为例,要查询5~8行:第一个参数为4;一共是4行,所以第二个参数为4,就是limit 4,4;
  所以就是:select * from employee_368 limit 4,4;

SQL语句:

select * from employee_368 limit 4,4;

mysql 查询所有上级和下级的id mysql查询每个部门的人数_SQL_08


题目2:查询每个部门的员工人数以及平均工资;

涉及到跨表查询了,个人觉得如果不是很熟练的话,做起来还是比较吃力的;

废话不多说,SQL语句如下:

select d.deptname, t.nu, t.avg_sal
from department_368 d,
(select deptid, count(*) nu, avg(salary) avg_sal from employee_368 group by deptid) t
where d.deptid = t.deptid;

mysql 查询所有上级和下级的id mysql查询每个部门的人数_mysql_09

题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本工资;
也是要SQL语句跨表查询了,SQL语句如下:

SELECT e.employeename, e.employeeid, d.deptname, e.employeelevel, e.salary 
FROM department_368 d, employee_368 e 
WHERE d.deptid = e.deptid AND employeename = '孙威';

mysql 查询所有上级和下级的id mysql查询每个部门的人数_SQL_10

OK!以上就是期末测试的三道题目,20分钟的时间也太紧张了,吐槽一下SQL老师太狠了!!!

【小白操作,大佬勿喷!】
关于后面两题,哪位大佬可以有点再简单的操作方法ma,想学习学习,欢迎各位大佬指点指点!