Oracle: 四、函数,聚合函数,分组,字符串连接(中)

简介:
内容简介

   1,Demo ,函数练习,涉及的用户有scott2,Demo 聚合函数、分组、字符串连接。

 

技术与环境

操作系统:

windows

语言类别:

SQL之PL/SQL

thankyou: sunshine, 谢谢你的默默付出

数据库:

Oracle

学习软件:

Oracle 10g

课程总策划:

yuanbo

English name:

sunshine

个人主页:

http://www.cnblogs.com/ylbtech/

科研团队:

ylbtech

教研团队:

ylbtech

 

1,Demo ,函数练习,涉及的用户有scott
 
--============================================
---ylb:Oracle
--15:29 2011-12-30
--1,函数练习,涉及的用户有scott
--============================================
  
--1,例:提取 7654 号雇员姓名的 2-4位
SQL> select  substr(ename,2,3) from  emp where  empno=7654;
--2,round函数的使用。
SELECT  ROUND(2.3) FROM  DUAL;
SELECT  ROUND(2.6) FROM  DUAL;
--3,to_char
--以货币形式显示sal列
SELECT  TO_CHAR(SAL, '$99,999,999' ) FROM  EMP;
SELECT  TO_CHAR(SAL, 'L99,999,999' ) FROM  EMP;
SELECT  TO_CHAR(SAL, 'L00,000,000' ) FROM  EMP;
--显示时间
SELECT  TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS' ) FROM  DUAL;
SELECT  TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"' ) FROM  DUAL;
--4,to_date
--查找入职时间在1981-4-01后的员工:
SELECT  * FROM  EMP
WHERE  HIREDATE>TO_DATE( '1981-4-01' , 'YYYY-MM-DD' );
--5,nvl函数
--求员工的年薪
SELECT  SAL*12+NVL(COMM,0) FROM  EMP;
--6.找出收取佣金的员工的不同工作.
SELECT  DISTINCT  JOB FROM  EMP
WHERE  COMM IS  NOT  NULL ;
--7.找出各月倒数第3天受雇的所有员工.
SELECT  * FROM  EMP
WHERE  HIREDATE=LAST_DAY(HIREDATE)-2;
--8.找出早于27年前受雇的员工.
SELECT  * FROM  EMP
WHERE  FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)>27
--9.以首字母大写的方式显示所有员工的姓名.
SELECT  INITCAP(ENAME) FROM  EMP;
--10.显示正好为5个字符的员工的姓名.
SELECT  ENAME FROM  EMP
WHERE  LENGTH(ENAME)=5;
--11.显示不带有"T"的员工的姓名.
SELECT  ENAME FROM  EMP
WHERE  ENAME NOT  LIKE  '%T%' ;
--12.显示所有员工的姓名,用a替换所有"A"
SELECT  REPLACE (ENAME, 'A' , 'a' ) FROM  EMP;
--13.显示满10年服务年限的员工的姓名和受雇日期.
SELECT  * FROM  EMP
WHERE  FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)>10;
--14.显示所有员工的姓名、加入公司的年份和月份
--,按受雇日期所在月排序
--,若月份相同则将最早年份的员工排在最前面.
SELECT  TO_CHAR(HIREDATE, 'YYYY-MM' ) FROM  EMP;
--15.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
--16.找出在(任何年份的)2月受聘的所有员工。
--p:17.对于每个员工,显示其加入公司的天数.
SELECT  TRUNC(SYSDATE-HIREDATE) FROM  EMP;
--18.以年月日的方式显示所有员工的服务年限. (大概)
--19 decode()函数:
显示员工编号,姓名,月薪及月薪等级:
要求800=  初级
1600= 中级
3000= 高级
其余月薪显示其他
SELECT  DECODE(SAL,800, '初级' , '其它' ) FROM  EMP;
--
SELECT  DECODE(SAL,800, '初级' ,
DECODE(SAL,1600, '中级' ,
DECODE(SAL,3000, '高级' , '其它' ))) FROM  EMP;
--20sign函数
显示员工编号,姓名,月薪及月薪等级:
要求1 ----999  初级
1000 ----2999 中级
3000 ----3999 高级
4000 ----超级
SELECT  DECODE(SIGN(SAL-1000),-1, '初级' , '其它' ) FROM  EMP;
--
SELECT  DECODE(SIGN(SAL-1000),-1, '初级' ,
DECODE(SIGN(SAL-3000),-1, '中级' ,
DECODE(SIGN(SAL-4000),-1, '高级' , '超级' ))) FROM  EMP;

 

2,Demo 聚合函数、分组、字符串连接
--========================================================
--ylb:Oracle
--17:13 2011-12-30
--1,基于scott用户
--2,聚合函数
--3,分组
--4,聚合函数和分组的结合
--5,字符串连接
--========================================================
  
1,运行产生表格,
set  pagesize 30;
set  linesize 120;
2,字段连接。使用||符号
SQL> select  '编号:' ||empno|| ',姓名:' ||ename 情况 from  emp;
3,分组函数: count   group  by   max  min
   <1> count  : 计数
         a.统计表记录数
SQL> select  count (*) from  emp;
         b.统计comm字段不为空的记录数
SQL> select  count (*) from  emp;
总结: count (列)不计算 null          
    <2> group  by  ... having  .... 分组筛选
一旦涉及 group  by ,记住两点:1, select 后面只能跟分组列及聚合函数,2, where group  by having 在后,顺序不能变, where 筛选的是记录, having 筛选的是组。
--例子: 将班级中及格的同学按性别分组,找到平均分在80分以上的组
select  性别, count (*), sum (成绩), avg (成绩), max (成绩), min (年龄) from  学生表 where  成绩>=60 group  by  性别 having  avg (成绩)>80
 
         a. 统计每个部门的最高工资
SQL> select  deptno, max (sal) from  emp group  by  deptno;
  
         b.  统计每个部门的最高工资 ,显示其中最高工资大于2900的部门
SQL> select  max (sal) ,deptno from  emp group  by  deptno having  max (sal)>2900;
----
--
----
         c. 统计工资在2900元以上的所有员工所在部门的最高工资 , 显示其中最高工资大于4000的部门
SQL> select  deptno, max (sal) from  emp where  sal>2900
  group  by  deptno
having  max (sal)>4000;
  
      <3> max   min  avg
        a.显示所有员工中的最高工资
SQL> select  max (sal),ename from  emp;
 
        b.显示不同工种的最高工资
SQL> select  max (sal),job from  emp group  by  job;
 
        c.显示不同部门的平均工资,并保留两位小数
SQL> select  deptno,round( avg (sal),2) from  emp group  by  deptno;
      <4> distinct  消除重复记录
SQL> select  distinct  job from  emp;

 

本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/archive/2012/08/09/2630678.html,如需转载请自行联系原作者

相关文章
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
49 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
45 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
135 1
|
3月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
36 0
|
3月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
66 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
4天前
|
Oracle 算法 关系型数据库
Oracle常用系统函数之数字类函数:数字的魔术师
【4月更文挑战第19天】Oracle数据库中的数字类函数是数字处理的魔术师,包括`ROUND`(四舍五入),`CEIL`和`FLOOR`(向上/下取整),以及`ABS`(计算绝对值)。还有`MOD`、`TRUNC`和`POWER`等函数,提供求余数、截断和计算幂的功能。熟练运用这些函数能提升数据管理效率,让处理数字变得更简单、有趣。
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何遍历字符串
Oracle之如何遍历字符串
45 1
|
1月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
1月前
|
SQL Oracle 关系型数据库
Oracle insert数据时字符串中有‘单引号问题
Oracle insert数据时字符串中有‘单引号问题
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决

推荐镜像

更多