各个数据库之间的区别就是提供的函数不同
一、组函数与分组统计
a.组函数
i. count()---统计数量
ii. max()---求出最大值
iii. min()---求出最小值
iv. avg()--求出平均值
v. sum()---得到总数
b. 分组统计group by
执行顺序在(where之后from—where—group by—having—select–order by)
描述一:
1) 统计函数必须出现在分组统计中,所谓的分组就是指列中存在重复的内容,使用group by的方式进行分组的统计
2) 如果要加入分组条件,则编写having子句,所有的统计函数作为条件的话只能在having子句中出现,不能在where中出现
3) 在使用分组的时候,一定要注意,查询的时候只能出现分组函数或是分组条件(即分组字段)
4) 分组函数允许嵌套,但是嵌套之后就不能再查询其他的字段,包括分组字段
描述二:
i. 在程序中使用分组函数,有两种可以使用的情况
使用group by并指定分组条件
不使用group by的话,只能单独使用分组函数
ii. 使用分组函数时,不能出现分组函数和分组条件之外的字段
iii. 分组函数只能在分组中使用,不允许在where语句之中出现,要指定分组的条件只能通过having
iv. having语句执行顺序在groupr by分组之后,order by排序之前
v. 分组函数可以嵌套使用,但是在组函数嵌套使用时不能再出现分组条件的查询语句
—select max(avg(sal)) from emp group by deptno;—deptno不能再进行查询
二、单行函数
orcale提供的主要单行函数
i. 字符函数—接收字符返回字符或数值,作用:字符大小的转换、字符的长度
1) select upper('smith') from dual---在orcale中进行验证的话需要也使用select查询语句并使用 dual 表(这是一张虚拟表),
使用其他的真实数据表会返回相应数据条数的结果
2) upper()函数字符串变为大写字母显示---select * from emp where ename=upper('smith')
3) lower()函数将字符串变为小写字母显示
4) initcap()函数将单词的首字母大写显示---select initcap(ename) from emp
5) 扩展:字符串除了使用“||”连接之外,还可以使用concat()函数进行连接操作,但不如前者方便
6) 对字符串进行截取,求出字符串长度,进行内容替换
a) 注意:java中的字符串有length()方法,数组只有length属性
b) substr()---字符串的截取点从0或1开始效果是一样的,但最好从0开始
c) length()---字符串长度
d) replace()---内容替换
e) select substr('hello',1,3) 截取字符串 , length('hello') 字符串长度,
replace('hello','l','x') 字符串替换 from dual
示例:求出姓名的后三个字符
select substr(ename,length(ename)-2,3) from emp;
扩展:substr()函数可采用倒值的方式截取—select substr(ename,-3,3) from emp;
ii. 数值函数—接收数值返回数值
1) 四舍五入:round()---也可指定四舍五入的位数,也可对整数进行四舍五入的操作
2) 截断小数位:trunc()---不会保留任何小数,而且小数点也不会执行四舍五入的操作,
但是指定之后可以保留指定的位数,还可以进行整数位的截取
3) 取余(取模):mod()---select mod(10,3) from dual;----十除三得一
iii. 日期函数—对日期型数据进行操作
1) 加减日期
a) 日期与数字加减还是日期
b) 日期与日期相减是数字(天数)
2) 求出当前日期---select sysdate from dual;
3) 示例:求工作了多少个星期:当前日期-雇佣日期得到天数,天数除以7得到星期数
4) months_between()---求指定日期范围内有多少个月---会包含小数点可以使用round()函数进行处理
5) add_months()---对指定的日期加上指定的月数,可以求出之后的日期是哪一天
6) next_day()---下一个的指定的星期数是什么日期
7) last_day()---返回指定日期对应月份的最后一天
iv. 转换函数—从一种数据类型转换为另一种数据类型
1) to_char()---转换成字符串---日期拆分,格式化
2) to_number()---转换成数字
to_number('123') + to_number('123')
3) to_date()---转换成日期
to_date('2020-05-08','yyyy-mm-dd')
4) 年月日进行分开可以使用to_char()函数进行拆分,拆分时必须指定拆分的通配符
---yyyy(年)mm(月)dd(日)---to_char(hiredate,'yyyy')
5) to_char()函数可以进行日期显示的转换功能---to_char(hiredate,'yyyy-mm-dd')
---去掉表示月份的第一个0加上fm:to_char(hiredate,'fmyyyy-mm-dd')
6) 之前的都是用在日期上,还可以用在数字上---对数字进行格式化使用“9”表示以为数字:to_char(sal,'99,999')
7) 使用$表示美元,L表示以本地语言进行金额显示:to_char(sal,'$99,999')
v. 通用函数—NVL函数、DECODE函数
1) nvl()可以将一个数据为null的字段指定内容---nvl(comm,0)
2) decode()函数类似if..elseif..else..语句
使用案列:雇员的工作类型有很多,但表示的方法是英文,要求查询出雇员的编号,姓名,雇佣及工作,将工作类型替换为中文表示
select empno 雇员编号,ename 雇员姓名,hiredate 雇佣日期,
decode(job,‘英文工作名称’,‘中文工作名称’,‘英文工作名称’,‘中文工作名称’,‘英文工作名称’,‘中文工作名称’) 职位 from emp;
四、 集合操作
并(union)、交(intersect)、差(minus)
a. union---将多个查询的结果组合到一个查询结果中,没有重复内容
b.union all---与上面一样,但包含重复内容
c. intersect---返回多个查询结果中相同的部分
d. minus---返回两个查询结果的差集(即两张表的不重复的部分)