sql server 中单表查询、多表查询、聚合查询、多表查询、子查询和几何查询的几个小例题

DEPT (DEPTNO INT, DNAME VARCHAR(14),LOC VARCHAR(13));
EMP (EMPNO INT,ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT, HIREDATE DATE,
        SAL FLOAT, COMM FLOAT, DEPTNO INT);
BONUS (ENAME VARCHAR(10), JOB VARCHAR(9), SAL INT, COMM INT);
SALGRADE ( GRADE INT, LOSAL INT, HISAL INT);

其中表中包含如下数据:

DEPT表:

EMP表:


SALGRADE表:


BONUS表: 无数据

1. 查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。

select ename,job,hiredate,sal
from emp
where deptno=10
2. 查所有已有的职位,要求去除重复项
select distinct job
from emp 

3. 计算每个员工的年薪,并取列名为Salary of Year(emp.sal为员工的月薪),要求输出员工姓名,年薪。

select ename, sal*12 as 'Salary of Year'
from emp
4.查询每个员工每个月拿到的总金额(emp.sal为工资,emp.comm为补助)。(提示:isnull(ex1,ex2)表示如果ex1为空则返回ex2)
select ename,sal+ isnull(comm,0)as total
from emp

5. 显示职位是主管(manager)的员工的姓名,工资。

select ename,sal
from emp
where job= 'manager'
6.显示第3个字符为大写O的所有员工的姓名及工资。
select ename,sal
from emp
where ename like '__O%'
7.显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。
select ename,sal,job
from emp
where job='SALESMAN' or job='MANAGER'
8. 显示所有没有补助的员工的姓名。
select ename
from emp
where comm is null
9. 显示有补助的员工的姓名,工资,补助。
select ename
from emp
where comm is not null
10.   排序显示所有员工的姓名,工资(按工资降序方式)。
select ename,sal
from emp
order by sal desc
11. 显示员工的最高工资和最低工资。
select max(sal) as '最高工资' , min(sal) as '最低工资'
from emp
12. 显示所有员工的平均工资和总计工资。
select avg(sal) as '平均工资',sum(sal) as '总计工资'
from emp
13.显示补助在员工中的发放比例、即有多少比例的员工有补助。(此题需注意两个问题:1.select语句中进行除法如何保留小数点后数据。2.count函数如何处理null型数据。)
select cast ( count(comm) as float) /count(ename)
from emp
14. 显示每种职业的平均工资。
select job,avg(sal) as average
from emp
group by job
15. 显示每个部门每种岗位的平均工资和最高工资。
select deptno,job,avg(sal) as average,max(sal) as max
from emp
group by deptno,job
16.显示平均工资低于2500的部门号,平均工资及最高工资。
select deptno,avg(sal) as average, max(sal) as max
from emp
group by DEPTNO
having avg(sal)<2500 
17. 上一条语句以平均工资升序排序。
select deptno,avg(sal) as average, max(sal) as max
from emp
group by DEPTNO
having avg(sal)<2500 
order by avg(sal)
18.显示工资高于2500或岗位为MANAGER的所有员工的姓名,工资,职位,和部门号。
select ename,sal,job,deptno
from emp
where sal>2500 or job='MANAGER'
19. 排序显示所有员工的姓名,部门号,工资(以部门号升序,工资降序,雇用日期升序显示)。
select ename,deptno,sal
from emp
order by deptno,sal desc,hiredate
20. 采用自然连接原理显示部门名以及相应的员工姓名。 S ql server不支持 NATURAL JOIN 语法。
select dname,ename
from dept inner join emp on dept.deptno = emp.deptno
21.查询SCOTT的上级领导的姓名。
select e.ename
from emp join emp as e on emp.mgr = e.empno
where emp.ENAME = 'SCOTT'
22.   显示部门的部门名称,员工名即使部门没有员工也显示部门名称。
select dname,ename
from emp right join dept on emp.deptno = dept.deptno
23.   显示所有员工的名称、工资以及工资级别。
select ename,sal,grade
from emp left join salgrade on (emp.sal >= salgrade.losal and emp.sal <= salgrade.hisal)
where grade in ( select grade
from salgrade)
24.显示ACCOUNTING部门所有员工的名称,工资。
select ename,sal
from emp left join dept on emp.deptno = dept.deptno
where dept.dname = 'accounting'
25.显示职位属于10号部门所提供职位范围的员工的姓名,职位,工资,部门号。
select ename,job,sal,deptno
from emp
where job in (select job 
	        from emp
                where emp.deptno = 10)
26.显示在所有员工中高于30号部门中任一个员工工资的员工的姓名,工资和部门号。
select ename,sal,deptno
from emp
where sal > all(select sal
		from emp
                where deptno = 30)
27.显示工资高于2500或职位为MANAGER的员工的姓名,工资和职位(采用UNION语法实现)。
(select ename,sal,job
from emp
where sal>2500)
union
(select ename,sal,job
from emp
where job = 'manager')
28.显示工资高于2500且职位为MANAGER的员工的姓名,工资和职位(采用INTERSECT语法实现)。
(select ename,sal,job
from emp
where sal>2500)
intersect
(select ename,sal,job
from emp
where job = 'manager')
29.显示工资高于2500但职位不是MANAGER的员工的姓名,工资和职位(采用EXCEPT语法实现)。
(select ename,sal,job
from emp
where sal>2500)
except
(select ename,sal,job
from emp
where job = 'manager')


























猜你喜欢

转载自blog.csdn.net/weixin_40304882/article/details/80505255