1.去重:distinct关键字

需求:查看公司一共有多少部门?
select department_id from employees; //此代码会查出107条记录,存在部门重复的问题!

select distinct department_id from employees;
思考:参看如下代码有没有问题?
select employee_id,last_name,distinct department_id from employees;
解答:会出现问题(报错了),出错原因,因为在执行代码的过程中对于employee_id,last_name这两列都有107条数据,

而department_id去重之后只有12条数据,数量对不上了!所以报错了!总结:使用distinct需谨慎...

2.单行函数:

概念:单数据进单结果出(单进单出)

分类学习:

1).字符函数

2).数字函数

3).日期函数

4).转换函数

5).通用函数

字符函数:
1).大小写转换函数:3个 ①.lower(m):将字符串中所有字符转换为全小写 ②.upper(m):将字符串中所有字符转换为全大写 ③.initcap(m):将字符串中首字母转为大写,其余字母转换小写 代码实现:
select lower('ORACLE'),upper('oracle'),initcap('oRACLE') from dual;
需求:查询名字为Bell这个人的信息?
select * from employees where lower(last_name) = 'bell';

select * from employees where upper(last_name) = 'BELL';

select * from employees where initcap(last_name) = 'Bell';
2).字符控制函数:8个

①.concat(m,n):将字符串m和字符串n拼接得到一个更长的新字符串

代码实现:
select concat('Hello','World') from dual;

select concat(last_name,first_name) from employees;
②.length(m):得到某个数据的长度

代码实现:
select length('python'),length(123456) from dual;

select length(employee_id),length(first_name),length(hire_date) from employees;
③.substr(x,y,z):将x从y位置开始截取z个长度得到一个新的字符串返回给程序

参数解释:

x:原本的字符串数据

y:起点位置(下标,索引)

z:截取的长度

代码实现:
select substr('HelloWorld',1,5) from dual;
④.instr(m,n):

参数解释:判断某个字符在字符串中首次出现的位置

m:字符串

n:一个字符

代码实现:
select instr('HelloWorld','l') from dual;
⑤.replace(x,y,z):将x中的字符y,全部替换为字符z

参数解释:

x:字符串

y:字符串中某个字符

z:需要被替换成的字符

代码实现:
select replace('aaabcdaacdaabefaanba','a','') from dual;
⑥.trim(x from y):去除y字符串中首尾的字符x

参数解释:

x:字符

y:字符串

代码实现:
select trim('m' from 'mmmmHellmmmomWmmorldmmmmm') from dual;
⑦和⑧.lpad和rpad函数(了解)

lpad(x,y,z):

rpad(x,y,z):

代码实现:
select lpad(salary,10,'*'),rpad(salary,10,'*') from employees;
2.数字函数:3个

①.round(m,n):四舍五入

②.trunc(m,n):截断

③.mod(m,n):求余

代码实现:
select round(439.456,1),round(439.456,0),round(439.456,-1) from dual;

select trunc(439.456,1),trunc(439.456,0),trunc(439.456,-1) from dual;

select mod(1100,300) from dual;
3.日期函数:3个

1).日期

2).时间

①.months_between(m,n):用于计算两个日期之间相差的月数(精确)

②.add_months(m,n):在原本的m月份基础上增加或者删除n个月

③.last_day(m):得到某个日期所在月份的最后一天

关键字:sysdate表示当前系统时间

测试如下代码:

select sysdate from dual;

以上代码由于数据库内部的格式限制只能显示出日期部分数据而不能显示出时间,

我们可以使用转换函数to_char(x,y)来实现日期和时间的显示

补充:oracle中的特殊字母有以下这些

yyyy:年

mm:月

dd:天

day:星期

hh:小时(1-12)

hh24:小时(0-23)

mi:分钟

ss:秒

重构上述代码实现日期时间数据的显示:
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
参看如下代码:
select sysdate + 1,sysdate,sysdate - 2 from dual;

select (sysdate - hire_date) from employees;
总结:

对于日期数据可以和数字做加减运算,得到的结果就是往前或者往后的天数

对于日期和日期数据之间只能做减法运算,得到的结果就是两个日期数据之间相差的天数

案例:

1).查询公司员工入职至今一共多少天了?(使用截断保留到整数位,别名worked_day)
select last_name,hire_date,trunc(sysdate - hire_date) "worked_day" from employees;
2).查询公司员工入职至今一共多少个月了?(粗糙版本:假设每月都是30天)
select last_name,hire_date,(sysdate - hire_date) / 30 "month_work",

months_between(sysdate,hire_date) "mon_work" from employees;
3).查询公司在每个月倒数第二天入职的员工有哪些?
select last_name,hire_date from employees

where last_day(hire_date) - 1 = hire_date;

select last_day(sysdate) from dual;

select add_months(sysdate,2),add_months(sysdate,-3) from dual;
4.转换函数:3个

1).to_date

2).to_char

3).to_number

补充:

转换函数中涉及到的格式字符:

9-->表示1位

99-->表示2位

举例:
select to_number('','') from dual;//早版本,需要定义格式(位数)

select to_number('') from dual;//新版本,可以省略格式
【注意事项】:

在使用to_number函数进行数据转换时,我们一定要计算正确需要被转换的数据的长度,

才能精确定义格式中需要的位数,一旦位数过少,直接报错!!

需求:

查询公司员工的部门编号,如果没有部门的显示"没有部门"
select last_name,department_id,nvl(to_char(department_id,''),'没有部门') from employees;

select last_name,department_id,nvl(to_char(department_id),'没有部门') from employees;
5.通用函数

1).nvl(expr1,expr2):

2).nvl2(expr1,expr2,expr3):

nvl2函数的执行流程:

在执行过程中会先执行expr1,如果expr1的结果不为null,那么执行expr2;

如果expr1的结果为null,那么执行expr3;

需求:

查询员工编号,姓名,薪资,奖金率;

如果奖金率不为空,那么显示奖金率 + 0.015以后的结果,

如果奖金率为空,那么显示0.01;

代码实现:

select employee_id,last_name,salary,commission_pct,

nvl2(commission_pct,commission_pct + 0.015,0.01) "new_comm"

from employees;

sql中的判断结构的引入讲解:

两种:

1).case表达式

模板格式:

case 字段 when expr1 then x

when expr2 then y

when expr3 then z

...

else n end;

需求:

查询公司员工的编号、姓名、薪资,部门号,

如果是70号部门的员工,就显示工资的1.1倍,

如果是80号部门的员工,就显示工资的1.2倍,

如果是90号部门的员工,就显示工资的1.3倍,

其余部门已正常工资显示;

代码如下:
select employee_id,last_name,salary,department_id,

case department_id when 70 then salary * 1.1

when 80 then salary * 1.2

else salary * 1.3 end

-- when 90 then salary * 1.3 end

-- else salary end

from employees

where department_id in(70,80,90);
2).decode函数

模板格式:

decode(字段,expr1,val1,expr2,val2,...):

需求:

查询公司员工的编号、姓名、薪资,部门号,

如果是70号部门的员工,就显示工资的1.1倍,

如果是80号部门的员工,就显示工资的1.2倍,

如果是90号部门的员工,就显示工资的1.3倍,

其余部门已正常工资显示;

代码如下:
select employee_id,last_name,salary,department_id,

decode(department_id,70,salary * 1.1,

80,salary * 1.2,

-- 90,salary * 1.3,

salary * 1.3)

from employees

where department_id in(70,80,90);
返回目录

学习python第三天单行函数的更多相关文章

  1. 学习Python的三种境界

    前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...

  2. 受限玻尔兹曼机(RBM)学习笔记(三)能量函数和概率分布

      去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...

  3. Oracle笔记(三)单行函数

    -函数 函数像一个黑盒子一样(看不到里边的构造),有参数返回值,可以为我们完成一定的功能. -单行 这种函数会对结果中的每一行计算一次,每行返回一个结果,单行概念区别于分组函数. 单行函数主要分为以下 ...

  4. Python(三)enumerate函数

    原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143177932 ...

  5. python第三章:函数

    在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...

  6. 学习python第三天之多行函数

    多行函数:(聚合函数/分组函数) 解释:多条数据进入,单条结果出来(多进单出) 1).max(obj):最大值 2).min(obj):最小值 3).sum(num):求和 4).avg(num):求 ...

  7. 【Python】Java程序员学习Python(三)— 基础入门

    一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...

  8. 学习python第三天

    变量的命名规范 1.只能有 字母 数字 及_组成 2.不能以数字开头 3.避免与系统关键词重名:重名不会报错,但系统的功能就被自定义的功能屏蔽掉了(严重不建议这样做) 4._开头的变量都有特出含义 5 ...

  9. oracle学习笔记(三)oracle函数

    --oracle 函数 --lower(char):将字符串转换为小写格式 --upper(char):将字符串转换为大写格式 --length(char):返回字符串的长度 --substr(cha ...

随机推荐

  1. 使用pd从数据库逆向生成pdm文件

    使用pd从数据库逆向生成pdm文件 好久没更新博客了,最近忙着各种事,捞了点老本行java的一些东西,浑浑噩噩,花了几天时间用java搭建了一个小项目的restful接口,深深觉得这东西论效率被nod ...

  2. MyEclipse中设置代码块快捷键

    如果想用快捷键生成一段自定义代码,可以通过下面方式设置: Java->Editor->Templates->New 如果要设置或者更改某个快捷键,如要设置保存全部文档的快捷键(系统默 ...

  3. Java中Date与String的相互转换

    我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数 ...

  4. linux 目录、文件名、logout、exit、shutdown、reboot、init 0、init 6、runlevel

    /dev 设备目录/boot     系统启动目录/etc 配置文件保存目录/media./mnt./misc  挂载目录,实际可以自己随便定义一个目录作为挂载目录/opt 安装第三方软件位置,但现在 ...

  5. 实现serializable接口的作用

    最重要的两个原因是: 1.将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本: 2.按值将对象从一个应用程序域发送至另一个应用程序域. 实现serializable接口的作用是就是可以 ...

  6. 【Java】操作Sqlite数据库

    首先在https://github.com/xerial/sqlite-jdbc下载jar包 import java.sql.Connection; import java.sql.DriverMan ...

  7. spring boot(10)-tomcat jdbc连接池

    默认连接池 tomcat jdbc是从tomcat7开始推出的一个连接池,相比老的dbcp连接池要优秀很多.spring boot将tomcat jdbc作为默认的连接池,只要在pom.xml中引入了 ...

  8. Jquery异步 Deferred Object

    Deferred Object )); return dtd.promise();};//使用$.when()为普通操作添加回调函数 为多个操作指定回调函数//$.when(deferred, def ...

  9. 2.Spring——maven依赖

    1.spring-core 2.spring-context 3.spring-orm 4.spring-web spring-webmvc others pmo demo1 pmo demo2 1. ...

  10. 【Kettle】8、变量参数传递介绍

    本文为转载,感觉作者的辛勤劳作:http://blog.csdn.net/rotkang/article/details/21008271 ------------------------------ ...