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 by和having子句

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、分组函数只能出现在选择列表,having、order by子句中

2、如果在select语句中同时包含有group by,having,ovrder by那么他们的顺序是group by,having,order
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中

来自为知笔记(Wiz)

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

时间: 2024-07-31 22:15:05

JAVA入门到精通-第60讲-sqlServer基本查询的相关文章

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

sqlServer基本查询 dept/emp表: MGR:直接上级的编号 HIREDATE:入职日期 COMM:奖金 DEPTNO:部门编号   创建dept表 创建emp表 deptno 是外键,foreign key refercnce dept (deptno) reference 引用: 针对外键: dept: emp: select查询: *能不用则不用:对资源是种浪费: 整个数据带过来是很大的: distinct 区别: distinct只会抛弃完全一样的: select disti

JAVA入门到精通-第58讲-SQLserver数据类型

float查询的时候精度很奇怪,不建议用来声明小数: float (3) 精度:小数和整数的位数加起来的位数: 精度:20  小数位数:2 numeric (10, 2) datetime可以表示到毫秒级的:后面可以不带任何参数: --getdate(  ) 得到当前的时间: 时,分,秒,毫秒: 在程序中去拿到时间,JAVA专有的日期转换格式去转换: image图片其实很少用: 软件公司里面如何保存图片? 在数据库中保存图片的路径: 用图片服务器或者图床技术来解决图片的显示: 后面连接数据库群:

JAVA入门到精通-第57讲-SQLserver数据类型

[关键字]用[ ]包起来 SQLserver数据类型: 非unicode编码: 在计算机世界,每一个字符都有编码的东西 unicode码的特点: 用两个字节表示一个字符(可以是英文字符,汉字). big5支持繁体: iso-8859-1编码:支持欧洲文字编码: gb2312支持中文汉字: gbk可以支持更多的汉字: 邮件服务器,国际性的软件会涉及多种编码的问题, 不同国家的文字,是否支持文字: char最大值能存8000个字符,能存4000个汉字: 非unicode编码,用两个字节 表示一个汉字

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除.查询.添加.修改: -修改: 每个字段都可能修改: //给?赋值 //在prepareStatement语句后面赋值才好用 //修改完了,更新数据 目前为止,已经完成了增删改查-Model1模式 最大特点: 界面和业务逻辑操作是放在一起的: 优点:简单,开发方便: 缺点:代码复用性不高: 中大型项目可读性差,可维护性不高: 前台后端混杂在一起的: 比如:"数据库密码换了, 所有涉及到数据库的地方都需要发生变化" =================================

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第70讲-学生管理系统2-增删改

-完成一个mini版本学生管理系统 jude软件:很好使的,安装一下就可以用了: -学生管理系统的添加 .修改.删除.上下页分页 ---------------------------------------------- 上面是一个流布局,JPanel 下面是一个流布局,JPanel 中间是Border布局,边界布局,CENTER JTextField jtf; 先加JLable--->Jtf文本域->JButton按钮 ------------------------- mis 系统:信息

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.