--把工资大于2000的员工的姓名和部门的名称输出 和 工资的等级
--【sql99标准】
--【三表连接】 分析:首先通过deptno字段关联emp跟dept表这样就形成一张
临时表,
然后在通过临时表里面的E.sal跟salgrade表里面的工资范围来连接。
**************重点************************
*select E.ename,D.name, S.grade *
*from emp E *
*join dept D on E.deptno=D.deptno *
*join salgrade S *
*on E.sal >= S.losal and E.sal <= S.hisal*
*where E.sal >2000 *
******************************************
--【sql92标准格式如下】
select*
from emp E,dept D,salgrade S
where E.deptno=D.deptno and (E.sal >= S.losal and E.sal <= S.hisal)
and E.sal > 2000
--总结:所以推荐99标准~!
5:select from where join on group by order by
top having 的混合使用
6 习题
1、求出每个员工的姓名,部门编号,薪水和薪水的等级
2、查找每个部门的编号 该部门所有员工的平均工资 平均工资的等级
3、求出emp表中所有领导的姓名
4、求出平均薪水最高的部门编号,和该部门的平均工资
5、把工资大于所有员工中工资最低的前3人的姓名,工资,部门编号,
部门名称,工资等级 、输出
输出工资最高的前3名 的 名字,工资,工资等级,部门名称
emp 员工表 dept 部门表 salgrade工资等级表
select E.name,E.sal,S.grade,D.name
from emp E
join dept D on E.deptno=D.deptno
join sargrade S on (E.sal >= S.losal and E.sal <= S.hisal)
where E.ename not like '%A%'
order by E.sal desc --排序永远是最后一步
习题集
--求出每个员工的姓名 部门编号 薪水 和薪水等级
select E.name,D.deptno,E.sal,S.grade
from emp E
join dept D on E.deptno=D.deptno --这段可以省略,因为在emp表里可以查询到
deptno字段,写上也不为错
join salgrade S on (E.sal>=S.losal) and (E.sal<=S.hisal)
--查找每个部门的编号 该部门所有员工的平均工资 平均工资等级
select deptno,avg(E.sal),s.grade --嵌套查询
from (select deptno avg(E.sal)
from emp
group by deptno) T
join salgrade S on avg(E.sal) between S.losal and S.hisal
--查找每个部门编号 部门名称 该部门平均工资 平均工资等级
在上面代码后添加join dept D
on D.deptno = T.deptno
--求出emp表中的所有领导的信息
select * from emp
where empno in (select mgr from emp)
--输出emp表中所有非领导的信息
select * from emp
where empno not in (select mgr from emp) --嵌套查询
--输出平均薪水最高的部门编号和部门的平均工资
select top 1 avg(E.sal),E.deptno
from emp E
group by E.deptno
order by avg(E.sal) desc
--把工资最低的前3个人的姓名 工资,部门编号 部门名称 工资等级输出
emp 员工表 dept 部门表 salgrade工资等级表
select T.name,T.sal,T.deptno,S.grade
from (select top 3 sal,deptno
from emp
group by deptno
order by sal ) T
join salgrade S on T.sal between S.losal and S.hisal
分页查询
create procedure usp_User_SelectByPage
@PageSize int,
@PageIndex int
as
===这个是错的存储过程
select top(@PageSize)* from dbo.tb_User
where UserID not in (select top(@PageSize*(@PageIndex-1)) UserID from
dbo.tb_User)
go
分页的sql语句
select top 4 * from tbUser where UserID not in (select top 4 UserID from
tbUser)
|
|