MySQL高级查询习题
提示:
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno所属部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
工资 = 薪金 + 佣金
在Emp 表中完成如下练习:
1、在emp表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。
2、在emp表中查询出薪水大于1500的记录,并且按照薪水的降序排列。
3、在emp表中查询出comm字段为空值的记录。
4、查询出emp表中含有几个部门的记录。(用DISTINCT去除重复记录)
5、在emp表中查询出部门编号为1或2的记录(要求使用IN关键字)
6、在emp表中查询出姓名的第二个字为博的记录。
7、查询出emp表中总共有多少条记录。
8、查询emp表中出每个部门的部门代码、薪水之和、平均薪水。
创建表
CREATE TABLE dept (deptno int primary key,dname VARCHAR(10),loc VARCHAR(10));
CREATE table emp (
empno int primary key,
ename VARCHAR(10),
job varchar(10),
mgr int,
hiredate varchar(10),
sal int,
comm int,
deptno int);
存储数据
INSERT into dept VALUES(1,'宣传部','连廊');
INSERT into dept VALUES(2,'团总支','系办');
INSERT into dept VALUES(3,'体育部','操场');
INSERT into emp VALUES(1,'朱怀昌','摄影人员',111,'2018/10/10',1000,NULL,1);
INSERT into emp VALUES(2,'张超','编辑人员',111,'2018/10/10',1000,600,1);
INSERT into emp VALUES(3,'赵博林','助理',222,'2018/10/15',1100,600,2);
INSERT into emp VALUES(4,'谭博博','司机',222,'2018/10/15',1100,200,2);
INSERT into emp VALUES(5,'石闯','乒乓球教师',333,'2018/09/10',1200,600,3);
INSERT into emp VALUES(6,'赵博文','羽毛球教师',111,'2018/10/10',1200,700,3);
INSERT into emp VALUES(7,'苏博宇','足球教师',111,'2018/10/10',1200,800,3);
运行结果如下:
1、在emp表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。
SELECT ename AS '姓名',deptno AS '部门编号',IFNULL(sal,0)+IFNULL(comm,0) AS '薪水' FROM emp;
2、在emp表中查询出薪水大于1500的记录,并且按照薪水的降序排列。
SELECT * FROM emp WHERE IFNULL(sal,0)+IFNULL(comm,0)>1500 ORDER BY IFNULL(sal,0)+IFNULL(comm,0) DESC;
3、在emp表中查询出comm字段为空值的记录。
SELECT * FROM emp WHERE comm IS NULL;
4、查询出emp表中含有几个部门的记录。(用DISTINCT去除重复记录)
SELECT COUNT(DISTINCT deptno) AS '部门总数' FROM emp;
5、在emp表中查询出部门编号为1或2的记录(要求使用IN关键字)
SELECT * FROM emp WHERE deptno IN(1,2);
6、在emp表中查询出姓名的第二个字为博的记录。
SELECT * FROM emp WHERE ename LIKE '_博%';
7、查询出emp表中总共有多少条记录。
SELECT COUNT(*) FROM emp;
8、查询emp表中出每个部门的部门代码、薪水之和、平均薪水。
SELECT AVG(sal+IFNULL(comm,0))AS '平均薪水',
SUM(sal+IFNULL(comm,0))AS '薪水之和',
deptno AS '部门编号' FROM emp GROUP BY deptno ;