码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-11-29 01:25:39      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:keyword   abs   color   分页查询   als   get   精通   The   data-   

--批量查询
技术分享图片
这样查询,效率比较低下;
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子句用于限制分组显示结果

例:

--group by和having子句使用(having与group by结合使用,可以对分组后的查询结果进行筛选)

--如何显示每个部门的平均工资和最高工资
select deptno"部门号",avg(sal)"平均工资",max(sal)"最高工资",min(sal)"最低工资" from emp group by deptno

--如何显示每个部门的平均工资和最高工资并显示部门名称(多表查询)
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
 
--显示每个部门的每种岗位的平均工资和最低工资
select deptno"部门号",job"岗位",avg(sal)"平均工资",min(sal)"最低工资" from emp group by deptno,job order by deptno
 
--显示平均工资低于2000的部门号和它的平均工资
select deptno"部门号",avg(sal)"平均工资" from emp group by deptno having avg(sal)<2000
 
--显示平均工资大于2000的部门号和它的平均工资并按升序排列
select deptno"部门号",avg(sal)"平均工资" from emp group by deptno having avg(sal)>2000 order by "平均工资"
 
17
 
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 "平均工资"
17
 

表的复杂查询

对数据分组的总结

1、分组函数只能出现在选择列表,havingorder 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
 
1
select deptno,avg(sal),max(sal) 
2
from emp group by deptno 
3
having avg(sal)<2000

这里deptno就一定要出现在group by


















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

标签:keyword   abs   color   分页查询   als   get   精通   The   data-   

原文地址:https://www.cnblogs.com/xuxaut-558/p/10035721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!