组函数(多值函数)

数据库中函数的分类:
1)单值函数 Single Rows Functions
特点:n条数据参与函数处理,最终得到n条结果。
2)多值函数(组函数) Multiple Rows Functions
特点:n条数据参与函数处理,得到的结果可能小于n。

1.常见的组函数
avg 计算平均值
max 计算最大值
min 计算最小值
sum 计算代数和
count 计算某个字段非空字段值的总数量

2.组函数语法
select 函数名(字段名)
from 表名
where 条件
[group by 要分组的字段]
[having 分组之后的查询条件];

group by如果不出现,则视为将表中的所有数据分为一个大组。
最终的组函数运算只有一个结果。

关键字:
1)group by 用来指定分组的依据,
例如:group by 字段A
在分组时就会把所有字段A的值相等的
数据分为一组。
2)having
做限定性查询的。
功能类似于where。

位置
1)group by关键字出现在where子句的后面。
2)having 出现在group by后面。
六大关键字书写顺序:
select .. 5
from .. 1
where .. 2
group by .. 3
having .. 4
order by.. 6

注意:
1)出现在select后面的字段,
要么是组函数,要么是出现在group by后面的字段。
即分组的依据字段。
2)where和having的区别
where发生在分组之前,
定义的是有关单值筛选的条件。
在where后面不允许出现组函数。
having发生在分组之后,
定义的是有关小组的筛选条件。
在having后面不允许出现单值条件判断。

练习:
1.查看各个部门的最高工资
select max(salary)
from s_emp
group by dept_id;
2.查看各个部门的员工数
count函数 计算某个字段非空字段值的数量

count(*) 把所有字段的字段值数量都计算出来,
取最大的为查询结果。
count(1)

3.查询各个部门各个职称的平均薪水和最大薪水,并且平均薪水大于2000的部门id;
根据多个字段进行分组:
group by 字段1,字段2...
分组时将所有出现在group by后面的字段值都相等的数据
分为一组。
select avg(salary),max(salary),dept_id
from s_emp
group by dept_id,title
having avg(salary) > 1000;

4.查询title中不包含vp字符串的每个职位的平均薪水和总薪水,并对平均薪水进行降序排列,并且每个职位的总薪水大于5000?
select avg(salary),sum(salary)
from s_emp
where title not like '%vp%'
group by title
having sum(salary) > 5000
order by avg(salary) desc;

作业:
1)查询所有员工的平均工资,最高工资最低工资,工资总和,还有有多少个员工?
select avg(salary),max(salary),min(salary),
sum(salary),count(*)
from s_emp;
2)查询每个部门的平均工资?对平均工资降序排序.平均工资大于1400.
select avg(salary)
from s_emp
group by dept_id
having avg(salary) > 1400
order by avg(salary) desc;
3)查看各个部门的最高工资
select dept_id,max(salary)
from s_emp
group by dept_id;
4)查看各个部门的员工数
select count(*)
from s_emp
group by dept_id;
5)查询各个部门各个职称的平均薪水和最大薪水,
并且平均薪水大于2000的部门id。
select avg(salary),max(salary),dept_id
from s_emp
group by dept_id,title
having avg(salary) > 2000;
6)查询title中不包含vp字符串的每个职位的平
均薪水,并对平均薪水进行降序排列,并且每个职位
的总薪水大于5000。
select avg(salary)
from s_emp
where title not like '%vp%'
group by title
having sum(salary) > 5000
order by avg(salary) desc;

8)查看每个区域部门数?
区域-部门:1对多
select count(*)
from s_dept
group by region_id;

查询每个部门的员工数?
select count(*)
from s_emp
group by dept_id;
9)查询南美地区的部门数?
区域名字 = 南美
select count(*)
from s_dept d,s_region r
where d.region_id = r.id
and r.name = 'South America';
10)查询南美地区工资大于1400的员工的信息?
三表查询
select e.id,e.last_name,e.salary
from s_emp e,s_dept d,s_region r
where e.dept_id = d.id
and d.region_id = r.id
and r.name = 'South America'
and e.salary > 1400;

方式二:子查询(嵌套查询)
select id,last_name,salary
from s_emp
where dept_id in(select d.id
from s_dept d,s_region r
where d.region_id = r.id
and r.name = 'South America');

SQL:查询所有工作在南美区域的部门id?
select d.id
from s_dept d,s_region r
where d.region_id = r.id
and r.name = 'South America';

Oracle学习笔记<5>的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  3. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  4. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  7. oracle学习笔记(一)用户管理

    --oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...

  8. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  9. Oracle 学习笔记 11 -- 视图 (VIEW)

    本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...

  10. oracle学习笔记1(环境搭建)

    学习的开始先剧透一下,本人有点笨,本来想用oracle vbox,装个red hat+oracle,但是虚拟机一直报错,0x00000000内存不能written.所以便想到其他的办法,刚好接触了go ...

随机推荐

  1. SharePoint创建web应用程序,提示密码不正确

    使用版本SharePoint2010: $username="domain\username"$newpassword="xxxxxxxx"stsadm -o ...

  2. 毕设问题(1)表格table的表头自定义、复合表头,组合表格

    毕业设计,是一个web项目,遇到的些问题,记录下来.也许也有同样只知道一些,不是那么系统的学过的人,会遇到同样的问题,希望有所帮助. 百度知道有这样一个问题: bootstrap table 如何实现 ...

  3. Spring-DI控制反转和IOC依赖注入

    Spring-DI控制反转和IOC依赖注入 DI控制反转实例 IDEAJ自动导入Spring框架 创建UserDao.java接口 public interface UserDao { public ...

  4. (ACM模板)集合set

    #include<iostream> #include<cstdio> #include<set> using namespace std; int main() ...

  5. SpringBoot中发送邮件服务

    .转载:http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html 简单使用 1.pom 包配置 <dependen ...

  6. ThreadPoolExecuotor源码参考

    Executor --> ExecutorService --> AbstractExecutorService --> ThreadPoolExecuotor Executor接口 ...

  7. phpstorm 开发php入门

    环境:ubuntu  phpstorm apache mysql 一.安装软件 安装apache服务器 https://i.cnblogs.com/EditPosts.aspx?postid=1113 ...

  8. springBoot相关(一)

    2.0新特性: 编程语言: Java8+.Kotlin 底层框架:Spring Framwork 5.0.x 全新特性: web Flux web Flux: 函数编程:java 8 Lambda 响 ...

  9. Ubuntu分区小知识与分区方案

    Most PC operating systems still work with an ancient disk partition scheme that historically makes d ...

  10. 如何在Sketch 54 for mac创建符号?

    Sketch 54 for mac是Mac系统平台上一个出色的数字设计绘图软件,小巧而不失功能齐全, 简约而不失强大!从最初的想法到最终的艺术品,可以通过Sketch 54 for mac来实现!现本 ...