打赏

JAVA入门到精通-第60讲-sqlServer基本查询

--批量查询
这样查询,效率比较低下;
in 关键字,批量查询;
select * from emp where  empno  in (123,  345,  800)
 
is null
 
 
 
--使用逻辑操作符
 
--order by 排序
 asc   升序;默认是升序;
 desc 降序;
 
 
order  by 可以根据不同的字段排序;
order by deptno ,  sal  desc
 
使用别名进行排序;
实际上是种浪费,对字段取个别名,对别名进行排序;
 
--分页查询
结果太多,不分页显示不方便;
分页查询需要用到子查询;
 
表的复杂查询:
select语句;
 
报错:min是聚合函数;
 
 
首先执行(  )里面的;得到一个结果来使用:
 
把800作为一个结果来使用:
 
select语句优化的原则,
把减少结果集的条件写在右边;
 
--avg
 
--count(*)
 
 
 
--group by
10号 20号  30号 部门的平均工资的查询;
 
--多表查询
 
--显示每个部门每种岗位的平均薪水和最低工资
 
group  by  deptno,  job 
 
--having 对分组过后的结果进行筛选
   往往和group by 结合使用;
 
having  avg(sal) < 2000
 
vv报错:语法是从右开始执行的,不知道vv是啥;
 
 
 
作业:
建库,建表
练习1、练习2
 
-----------------------------------------

表的复杂查询

说明:

    在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给

大家介绍较为复杂的select语句

数据分组 -max(最大),min(最小),avg(平均),sum(),count(统计)

 

见下例:

--如何显示所有员工中最高工资和最低工资

select min(sal)"最低工资",max(sal)"最高工资" from emp

 

--显示最低工资并显示出雇员名字

select ename"姓名",sal"工资" from emp where sal=(select min(sal) from emp)

 

--显示所有员工的平均工资和工资总和

select avg(sal)"平均工资",sum(sal)"工资总和" from emp

--把高于平均工资的雇员的名字和他的工资显示出来

select ename,sal from emp where sal>(select avg(sal) from emp) order by sal

 

--计算共有多少员工

select count(*)"雇员数" from emp

 

--扩展要求

--请显示工资最高的员工的名字、工作岗位

select ename,job from emp where sal=(select max(sal) from emp)

 

--请显示工资高于平均工资的员工信息,并显示平均工资(效率不高)

select ename"姓名",job"岗位",sal"工资",(select avg(sal) from emp)"平均工资" from emp where sal>(select avg(sal) from emp) order by sal

 

表的复杂查询

group byhaving子句

group by用于对查询的结果分组统计

having子句用于限制分组显示结果

 

例:

 
 1 --group by和having子句使用(having与group by结合使用,可以对分组后的查询结果进行筛选)
 2 
 3 --如何显示每个部门的平均工资和最高工资
 4 select deptno"部门号",avg(sal)"平均工资",max(sal)"最高工资",min(sal)"最低工资" from emp group by deptno
 5 
 6 --如何显示每个部门的平均工资和最高工资并显示部门名称(多表查询)
 7 select emp.deptno"部门号",avg(sal)"平均工资",max(sal)"最高工资",min(sal)"最低工资",dept.dname"部门名称" from emp,dept where emp.deptno=dept.deptno group by emp.deptno,dept.dname
 8  
 9 --显示每个部门的每种岗位的平均工资和最低工资
10 select deptno"部门号",job"岗位",avg(sal)"平均工资",min(sal)"最低工资" from emp group by deptno,job order by deptno
11  
12 --显示平均工资低于2000的部门号和它的平均工资
13 select deptno"部门号",avg(sal)"平均工资" from emp group by deptno having avg(sal)<2000
14  
15 --显示平均工资大于2000的部门号和它的平均工资并按升序排列
16 select deptno"部门号",avg(sal)"平均工资" from emp group by deptno having avg(sal)>2000 order by "平均工资"

 

对数据分组的总结

 

1、分组函数只能出现在选择列表,having、order by子句中

 

2、如果在select语句中同时包含有group byhavingovrder by那么他们的顺序是group byhavingorder by

3、在选择列中如果有列、表达式、和分组函数,那么这些列和表达式必需有一个出现在group by子句中,否则就会出错

如:

select deptno,avg(sal),max(sal) 

from emp group by deptno 

having avg(sal)<2000

 

 



posted on 2018-11-28 23:20  XuCodeX  阅读(337)  评论(0编辑  收藏  举报

导航