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表中查询出部门编号为10或20的记录(要求使用IN关键字)
6、在emp表中查询出姓名的第二个字母为A的记录。
7、查询出emp表中总共有多少条记录。
8、查询emp表中出每个部门的部门代码、薪水之和、平均薪水。

-- 在emp表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。
select ename 员工姓名,deptno 部门编号,(sal + ifnull(comm,0)) 薪水 from emp

-- 在emp表中查询出薪水大于1500的记录,并且按照薪水的降序排列
select * from (select *,(sal + ifnull(comm,0)) salary from emp)temp where salary > 1500 ORDER BY salary desc

-- 在emp表中查询出comm字段为空值的记录。
select * from emp where comm is null

-- 查询出emp表中含有几个部门的记录。(用DISTINCT去除重复记录)
select distinct deptno from emp 

-- 在emp表中查询出部门编号为10或20的记录(要求使用IN关键字)
select * from emp where deptno in (10,20)

-- 在emp表中查询出姓名的第二个字母为A的记录。
select * from emp where ename like '_A%'

-- 查询出emp表中总共有多少条记录。
select count(empno) 总记录 from emp

-- 查询emp表中出每个部门的部门代码、薪水之和、平均薪水。
select deptno 部门,sum(salary) 薪水之和,avg(salary) 平均薪水 from (select *,(sal + ifnull(comm,0)) salary from emp)temp group by deptno



练习二

1.列出至少有一个员工的所有部门。
2.列出薪金比“SMITH”多的所有员工。
3.列出所有员工的姓名及其直接上级的姓名。
4.列出受雇日期早于其直接上级的所有员工。
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
6.列出所有“CLERK”(办事员)的姓名及其部门名称。
7.列出最低薪金大于1500的各种工作。
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
9.列出薪金高于公司平均薪金的所有员工。
10.列出与“SCOTT”从事相同工作的所有员工。
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
13.列出在每个部门工作的员工数量、平均工资和平均服务期限。
14.列出所有员工的姓名、部门名称和工资。
15.列出所有部门的详细信息和部门人数。
16.列出各种工作的最低工资。
17.列出薪金最低的MANAGER的基本信息。
18.列出所有员工的年工资,按年薪从低到高排序。

-- 1.列出至少有一个员工的所有部门
select deptno from dept where deptno in (select distinct deptno from emp)

-- 2.列出薪金比“SMITH”多的所有员工
select ename 员工姓名,sal 薪金 from emp where sal > (select sal from emp where ename = 'SMITH')

-- 3.列出所有员工的姓名及其直接上级的姓名
select a.ename 员工的姓名,b.ename 上级的姓名 from emp a left join emp b on a.mgr = b.empno

-- 4.列出受雇日期早于其直接上级的所有员工。 
select a.ename 受雇日期早于其直接上级的员工,a.hiredate 员工受雇日期,b.hiredate 上级受雇日期 from emp a 
left join emp b on a.mgr = b.empno
where a.hiredate < b.hiredate

-- 5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
select  dept.dname,emp.* from dept left join emp on dept.deptno = emp.deptno

-- 6.列出所有“CLERK”(办事员)的姓名及其部门名称
select ename 姓名,dname 部门名称,job 工作 from emp left join dept on emp.deptno = dept.deptno where job = 'CLERK'

-- 7.列出最低薪金大于1500的各种工作
select  job 工作,min(sal) 最低薪金 from emp group by job having min(sal) > 1500

-- 8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号
select ename 姓名,dname 部门名称 from emp left join dept on emp.deptno = dept.deptno
where dname = 'SALES'

-- 9.列出薪金高于公司平均薪金的所有员工
select ename 姓名,sal 薪金 from emp where sal > (select avg(sal) from emp)

-- 10.列出与“SCOTT”从事相同工作的所有员工
select ename 员工姓名 from emp where job = (select job from emp where ename = 'SCOTT') and ename != 'SCOTT'

-- 12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金
select ename 员工姓名,sal 薪金 from emp where sal > (select max(sal) from emp where deptno = 30)

-- 13.列出在每个部门工作的员工数量、平均工资和平均服务期限
select dept.dname 部门名称, count(empno) 员工数量,avg(sal) 平均工资,avg(DATEDIFF(CURDATE(),hiredate)) 平均服务期限
from emp left join dept on emp.deptno = dept.deptno  group by emp.deptno
 
-- 14.列出所有员工的姓名、部门名称和工资。
select ename 姓名,dname 部门名称,sal 工资 from emp left join dept on emp.deptno = dept.deptno 

-- 15.列出所有部门的详细信息和部门人数。 
select dept.*,count(emp.deptno) 部门人数 from emp right join dept on emp.deptno = dept.deptno group by dept.deptno

-- 16.列出各种工作的最低工资。 
select min(sal) 最低工资,job 工作 from emp group by job

-- 17.列出薪金最低的MANAGER的基本信息。 
select * from emp where sal = (select min(sal) from emp where job = 'MANAGER')

-- 18.列出所有员工的年工资,按年薪从低到高排序
select ename 姓名,sal 月薪,(sal * 12) 年薪 from emp order by (sal * 12) 

多敲多练。。。沉着稳重…

你可能感兴趣的:(MySQL,练习)