当前位置:   article > 正文

sql server 复杂查询语句_sqlserver复杂查询语句总结

sqlserver复杂查询语句总结
  1. --复杂查询
  2. --聚合函数,例如min,max
  3. --1,最低工资
  4. select min(sal) from emp
  5. select * from emp
  6. select ename,sal from emp where sal=(select min(sal) from emp)
  7. --sql语句执行顺序从右向左,
  8. --2,平均工资和总和
  9. select avg(sal) 'average',sum(sal) 'total' from emp
  10. --3,高于平均工资的员工选出来
  11. select ename , sal from emp where sal > (select avg(sal) 'average' from emp)
  12. --4,加入平均工资列
  13. --4,总人数
  14. select count(*) from emp
  15. --group by分组函数
  16. --每个部门的平均工资
  17. select avg(sal) 'average',deptno from emp group by deptno
  18. --每个部门每种岗位的平均工资
  19. select avg(sal) 'avg' ,job,deptno from emp group by deptno ,job
  20. --平均工资<2000的部门及平均工资
  21. --having语句,对分组结果进行查询
  22. select avg(sal),deptno from emp group by deptno having avg(sal)<2000
  23. --分组函数:
  24. --1,分组函数只能出现在选择列表
  25. --2,group > having > order 优先性
  26. select * from emp
  27. select * from dept
  28. --多表查询
  29. --基于两个或者以上的表,视图查询,,笛卡儿集
  30. --1,例如显示部门位置和员工姓名
  31. --两张表带有相同的列需要用表名区别
  32. select * from emp,dept where dept.deptno=emp.deptno
  33. --2,指定部门号为20,30,并按照其排序
  34. select * from emp,dept where dept.deptno=emp.deptno and
  35. (dept.deptno=20 or dept.deptno=30) order by dept.deptno
  36. update emp set mgr=7888 where mgr=7788
  37. --自连接
  38. --在同一张表上的连接查询
  39. --1,显示lili的上级姓名
  40. select ename from emp where empno=(select mgr from emp where ename='lili')
  41. --2,显示每个人的姓名和上级的姓名
  42. --构建两张表,分别为w,b,
  43. select worker.ename 'worker',boss.ename 'boss' from emp worker,emp boss
  44. where worker.mgr=boss.empno
  45. --子查询
  46. --嵌入在sql语句的select语句,把查询结果当作临时的结果
  47. --1,单行子查询 显示lili的同部门的员工
  48. select * from emp where deptno=(select deptno from emp where ename='lili')
  49. --2,多行子查询
  50. --查询部门20的工作岗位上的员工的信息
  51. select * from emp where job in (
  52. select distinct job from emp where deptno=20)
  53. --3,from子句中使用子查询,必须给表指定别名
  54. --显示高于各自部门平均工资的员工信息
  55. --(1)拿到各个部门的平均工资
  56. select avg(sal),average from emp group by deptno
  57. --(2) 把上面的表当作临时另一张表,进行多表查询
  58. select * from emp ,(select avg(sal) average,deptno from emp group by deptno) salary
  59. where emp.sal>salary.average and emp.deptno=salary.deptno
  60. --分页查询,数据量比较大时,分页显示
  61. --按员工的id号升序取出,显示6-10排名的人
  62. --top指令,top后面的数表示选出6条,这6条根据后面的where选择
  63. select top 5 * from emp order by empno
  64. select top 5 * from emp where empno not in
  65. (select top 5 empno from emp order by empno)
  66. order by empno
  67. --删除表中的重复数据
  68. create table cat(
  69. catID int,
  70. catName nchar(10)
  71. )
  72. --重复执行创建大量数据
  73. insert into cat values(2,'kk')
  74. select * from cat
  75. --选择不重复数据输出至临时表tmp
  76. select distinct * into tmp from cat
  77. --删除临时表tmp
  78. drop table cat
  79. --把tmp数据插入cat
  80. select * into cat from tmp
  81. --删除tmp
  82. drop table tmp
  83. --左连接和有连接
  84. --显示员工和上级名字,要求没有上级的人也要写出来
  85. select * from emp
  86. update emp set mgr=0 where mgr=7888
  87. --内连接
  88. select w.ename,b.ename from emp w,emp b where w.mgr=b.empno
  89. --左外连接:指左边的表的记录全部都要出现,如果右面没有匹配的记录,
  90. -- 就用null来填
  91. select w.ename,b.ename from emp w left join emp b on w.mgr=b.empno

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号