SQL 的复杂查询语句,例子及解析 |
您所在的位置:网站首页 › sql复杂查询语句 › SQL 的复杂查询语句,例子及解析 |
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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |