select *from emp where deptno=
(select deptno from emp where ename="smith")
这是查询出与smith同一部门的员工信息。
-----------------------------------------------------------------------------------------------------
select *from emp,(select avg(sal) mysal,detno from emp group by deptno) tem
where emp.deptno=tem.deptno and emp.sal>tem.mysal
这是查出高于对应部门平均工资的员工信息。
---------------------------------------------------------------------------------------------
select *from emp where job in (select distinct job from emp where deptno=10)

这是查询与部门id为10的部门里面的工作相同的人员信息
---------------------------------------------------------------------------------------------
select top*4 from emp order by hiredate 
查出表的前四条信息


select top6 *from emp where empno   not in (select top4 empno from emp order by hiredate)
order by hiredate
查出5-10的信息条,
这里使用的是先把前4条信息的empno查询出来,然后使用not in ,来再查询前6条,
这样达到查询出5-10的信息条
---------------------------------------------------------------------------------------------

insert into 表名 (字段,字段) select 字段 ,字段 from 表名
简单的多条数据压力测试

---------------------------------------------------------------------------------------------
删除数据库表中的重复数据


如果是查询的话,思路就是利用distict直接把不唯一的数据查询出来;
但是如果是永久性删除重复数据的话,这就得:

先用distict把数据库表里面的不唯一数据先查询出来,放进一个临时表里面;
然后直接把原表里面的数据全部删除;
最后把临时表里面的不唯一数据全部添加进原表里面,这样就达到删除数据库表中的重复数据。
  select distict * into 临时表名 from 原表名
  delect *from 原表名
  insert into 原表名  select * from 临时表名
  drop table 临时表名
---------------------------------------------------------------------------------------------


select replace('XX' , 'xx') from 表名






----------------------------------------------------------------------------------------------

select ename ,datepart(year,hiredate) y,datepart(month,hiredate) m from emp 
order by m,y

按照年和月去对职工排序,先优先对月去排序,再对年去排序,如果月相同,再对年排序


这个给datepart取别名的操作很重要,可以用与后面的函数调用
----------------------------------------------------------------------------------------------

select *from emp where sal>(select sal from emp where name='xxx')
查出工资大于名字为‘xxx’的员工信息
----------------------------------------------------------------------------------------------
select count(*),deptid from emp group by deptid having count(*)>1
查出部门成员大于1的部门,用having count(*)>1作为条件部分
-----------------------------------------------------------------------------------------------
select emp.ename,boss.ename from work emp,work boss where emp.bossid=boss.eid

查询出员工信息及其上级的信息

在这基础上扩展,查出进入公司的时间比其上司晚的员工信息:
select emp.ename,emp.hiredate,boss.ename ,boss.hiredate from work emp,work boss where emp.bossid=boss.eid
and emp.hiredate>boss.hiredate
----------------------------------------------------------------------------------------------
列出部门信息和部门的员工信息,同时也把没有员工的部门信息列出来
select dep.dname,emp.ename from department dep,emp where dep.depid=emp.eid
以上只能够查询出部门信息和部门的员工信息。
但是那些没有员工的部门信息没列出来。
这时候需要用到的是右外连接,就是以department表为主,右连接上emp表,
这样部门全部都能列出来,然后员工的话看具体情况显示,没有就显示‘NULL’值。
select dep.dname,emp.ename from department emp right  jion department dep on
emp.depid=dep.depid
如果是用左外连的话,那就是 emp left jion department
----------------------------------------------------------------------------------------------
select name ,salary from employee where salary >
(select max(salary) from employee where depid=2 )
 查询出工资高于某个部门员工工资的员工信息
这边在()里面的sql语句使用max函数是必须的,因为>这个符号是不能与多条信息做比较的
。用max的话返回数据就是一条。

----------------------------------------------------------------------------------------------
select count(*) 总人数,avg(sal)平均工资,avg(datediff(year,hiredate,getdate()))平均服务年限,
deptno from emp group by depid



在SQL server里面给表起别名加不加as 都oK