`
836811384
  • 浏览: 547598 次
文章分类
社区版块
存档分类
最新评论

Oracle学习笔记之二SQL更新数据和一些常用函数

 
阅读更多

数据库中的数据变更,主要有以下三种:插入数据(insert)、修改数据(update)、删除数据(delete)。这几种操作都是开发人员常用的操作。本章将针对这几种操作进行简要讲解。本章的主要内容包括:

insert操作及注意事项

update操作及注意事项

delete操作及注意事项

通过本章的学习,读者既可以学习insert/update/delete操作的基本语法,同时,还可以了解实际开发中的注意事项。

1插入数据——insert操作

insert操作用于向表中插入新的数据。insert操作既可以单条插入,也可以与子查询结合使用实现批量插入。本章将讲述insert操作的语法及使用。

1.1单条插入

对于insert操作来说,单条插入是最常用的方式,其语法形式如下所示。

insertinto表名(列名1,列名2,列名3…列名n)

values(1,2,3…n)

insert操作中,列名列表中的各列需要以逗号进行分隔;而值列表指定各列的值,列名与值需要一一对应

1.2批量插入

c_students的数据结构及内容如下所示。

SQL>select*fromc_students;

STUDENT_IDSTUDENT_NAME

我们可以利用如下SQL语句向其中插入新的数据,新数据来自表studentsstudent_id处于前十的学生信息。

SQL>insertintoc_students(student_id,student_name)

selectstudent_id,student_name

fromstudents

wherestudent_id<=10;

1.3注意事项与技巧

insert操作语法简单,也是广大开发人员掌握的最熟练的SQL语句之一。在实际开发过程中,有以下问题和技巧需要注意。

1.应该养成使用列名列表的习惯

2.快速获得列名列表

2更新数据——update操作

update操作用于更新已有数据。

2.1update更新单列

update操作的语法形式如下所示。

update表名set=新值

其中update命令用于更新表中数据,其后紧跟表名;set命令用于重新设置列值,其后紧跟列名,并用等号指定新值。

在表students中,列status的值均为小写形式。我们可以利用update语句将其转换为大写形式。

SQL>updatestudentssetstatus=upper(status);

2.2update更新多列

使用update语句,同样可以更新多列,其语法如下所示。

update表名set1=新值1,2=新值2,…

set命令之后,可以为多列同时赋值,而这些列之间使用逗号进行分隔。

对于表students中的学生信息,可以在修改列status的同时,修改列student_age的值。例如,除了将status进行大写转换之外,还需要将学生年龄student_age增加1。相应的SQL语句如下所示。

SQL>updatestudentssetstudent_age=student_age+1,status=upper(status);

2.3注意事项

对于update操作,最容易被用户忽视的就是添加where条件。在示例5-3及示例5-4所进行的操作实际是非常危险的。因为没有添加任何限制条件,因此Oracle将更新表中所有数据。而实际应用中,往往只需更新部分数据。因此,对于重要数据的update操作,首先添加where关键字是一个好的习惯,尽管有时候并不需要过滤条件。

update操作添加where条件。

SQL>updatestudentssetstudent_age=student_age+1

wherestudent_age>20;

3删除数据——delete操作

delete操作用于删除表中数据。除了delete语句之外,truncate命令同样可以删除表中数据。

3.1delete操作

delete操作用于删除表中数据,其使用语法如下所示。

deletefrom表名

deletefrom指定从哪个表中删除数据。因为删除动作的作用对象为记录级别,因此无需指定列名信息。

我们可以利用delete命令删除表students中、employee_id大于10的记录,相应的SQL语句如下所示。

SQL>deletefromstudentswherestudent_id>10;

3.2delete操作与truncatetable操作

除了delete命令,Oracle还可以利用truncatetable命令来删除表中数据。但是truncatetable语句与delete语句是有着本质区别的。delete语句与insertupdate语句同属于DML——数据操作语言的范畴,当数据修改之后,可以通过回滚操作,来忽略所做的数据修改。而truncatetable语句则是属于DDL——数据定义语言的范畴,当数据被删除之后,无法回滚。

SQL>rollback;

lower函数:
此函数将全部的大写字母都可以变为小写字母
SELECT lower('ABCDE') FROM dual ;
• dual表为一个虚拟表,以后介绍
upper函数:将输入的字符串变为大写字母
SELECT upper('abcd') FROM dual ;
例如:之前查询的时候区分大小写,所以此处如果输入的是小写字母,就可以通过upper函数进行转换。
查询雇员姓名内容为smith的全部员工。
SELECT * FROM emp WHERE ename=UPPER('smith') ;
initcap函数:将每个字符串的首字母大写
例如:要求将雇员表中的全部雇员信息的首字母大写。
SELECT initcap(lower(ename)) FROM emp ;
函数可以进行嵌套。
concat函数:字符串连接,可以连接两个字符串
SELECT concat('hello',' world!!!') FROM dual ;
实际上使用“||”也可以完成两个字符串的连接操作。
substr函数:字符串截取
截取的时候需要注意:要从那里开始截取,之后取多长的长度。
SELECT substr('hello',1,2) FROM dual ;
注意:substr函数的开始点是从1开始的。
length:取出字符串的长度,例如,取出每一个雇员的姓名的长度:
SELECT ename||' 姓名的长度为:'||length(ename) FROM emp ;
instr函数:查找在一个字符串中是否有指定的字符串,如果有,则返回其位置
SELECT instr('hello','x') FROM dual ;
• 如果有此字符串,则返回位置,如果没有,则返回0。
replace函数:替换,可以将一个字符串中的指定字符串替换为其他内容:
SELECT replace('hello','l','x') FROM dual ;
trim函数:去掉左右空格的函数
SELECT trim(' hello ') FROM dual ;
查询:
1、 检索姓名最后一个字母为N的雇员
• SELECT * FROM emp WHERE substr(ename,-1,1)='N';
2、 检索职务为“SALE”的全部员工信息
• SELECT * FROM emp WHERE substr(job,1,4)='SALE';
ROUND表示四舍五入
•SELECT ROUND(34.56,-1) FROM dual ;
TRUNC函数:表示截取函数
• SELECT TRUNC(34.56,-2) FROM dual ;
MOD函数:取余数
•SELECT MOD(10,3) FROM dual ;
取得当前日期:
在Oracle中可以通过查询sysdate取得当前的日期:
• SELECT sysdate FROM dual ;
例如:计算10部门中的员工进入公司的日期数:
肯定使用当前日期-雇佣日期(hiredate) = 天数,天数/7为日期数。
SELECT ename,round((sysdate-hiredate)/7) from emp ;

例如:
求出所有员工的受雇月数:months_between,使用当前日期与雇佣日期比较。
• SELECT ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;
ADD_MONTHS:表示在日期的基础上增加几个月之后的日期:
求出,三个月之后的日期是那一天:
SELECT ADD_MONTHS(sysdate,3) FROM dual ;
NEXT_DAY:表示下一个这天(星期几)
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ;
LAST_DAY:求出当前日期所在月的最后一天:
SELECT LAST_DAY(sysdate) FROM dual ;
例如:
显示受雇时间不满320-个月的雇员的编号、受雇日期、受雇的月数、满六个月的复审日期、受雇后的第一个星期五以及受雇当月的最后一天
求出雇佣月数大于320的雇员信息:
SELECT * FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)>320 ;
综合:
SELECT empno 雇员编号,hiredate 雇佣日期,
round(MONTHS_BETWEEN(sysdate,hiredate)) 雇佣月数 ,
add_months(hiredate,6) 复审日期,next_day(hiredate,'星期五') 受雇后到第一个星期五,
last_day(hiredate) 最后一天
FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)>320 ;
例如:现在要求取出全部员工受雇的年份
实际上要对hiredate中的内容进行分离,取出年份。
SELECT empno,ename,TO_CHAR(hiredate,'YYYY') FROM emp ;
取出雇佣的月份和日:
SELECT empno,ename,TO_CHAR(hiredate,'YYYY') 年,
TO_CHAR(hiredate,'MM') 月,TO_CHAR(hiredate,'DD') 月 FROM emp ;
也可以通过此函数把显示的日期的格式进行修正:
年-月-日:2008-4-7
SELECT empno,ename,TO_CHAR(hiredate,'YYYY-MM-DD') FROM emp ;
正常情况下的日期,如果是月应该是两位,如果现在是2月,则会显示02月,如果现在不希望显示出前导0,则可以加入一个fm
SELECT empno,ename,TO_CHAR(hiredate,'fmYYYY-MM-DD') FROM emp ;

可以将一个数值按照指定的格式输出。
SELECT empno,sal FROM emp ;  此时不是很明确的知道查询出的工资,而且工资的位数也不标准。
使用to_char完成:SELECT empno,to_char(sal,'L99,999') FROM emp ;
to_date函数:
可以将一个字符串变为一个日期类型。
SELECT to_date('2007-4-7','YYYY-MM-DD') FROM dual ;
要求:
查询出全部雇员的年薪(基本工资和佣金)。
SELECT empno,(sal+comm)*12 FROM emp ;
如果没有奖金的雇员,则年薪也没了,因为是null值,所以最后的计算结果仍然是null。
希望如果最后的值为null,则应该按0进行计算,此时就需要NVL函数的支持。
Nvl函数可以将空值变为一个特定的数值
SELECT empno,sal,NVL(comm,0) FROM emp ;
使用此函数修改上面的查询:
SELECT empno,(sal+NVL(comm,0))*12 FROM emp ;

select empno,ename,job from emp ;
希望:
• 如果工作是CLERK:则显示办事员
• 如果工作是SALESMAN:则显示为销售人员
• 如果工作是MANAGER,则显示为经理
SELECT empno,ename,DECODE(job,'CLERK','办事员','SALESMAN','销售人员','MANAGER','经理') FROM emp ;

分享到:
评论

相关推荐

    oracle帮助资料(入门教程、学习笔记、函数大全、sql和oracle通解)

    oracle帮助资料 oracle 入门教程 学习笔记 函数大全 sql和oracle通解 sqlsyntax oracle帮助资料 oracle 入门教程 学习笔记 函数大全 sql和oracle通解 sqlsyntax

    ORACLE经典学习笔记

    第一章 ORACLE 命令 第二章 ORACLE 卸载 第三章 ORACLE 用户管理 第四章 数据字典 第五章 SQLServer和Oracle的常用函数对比 第六章 SQL 函数

    Oracle 10g 学习笔记

    │ ORACLE学习笔记(二)oracle的逻辑结构 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(二)SQLPLUS基础 - lvhuiqing的专栏 - ...

    oracle学习笔记整理

    学习oracle知识笔记整理,包括pl/sql编程,过程、函数、游标开发等。

    成功之路:Oracle11g学习笔记.pdf

    在介绍Oracle系统管理的知识以后,将介绍与开发相关的内容(如PL/SQL基础知识、存储过程、函数、包等),并介绍数据库性能调整,《成功之路:Oracle 11g学习笔记》重点介绍SQL语句调优。SQL语句调优是《成功之路:Oracle...

    oracle学习笔记(txt格式,自己总结的,很详细,每章附有例题和习题及答案)

    oracle学习笔记,txt格式,完全是自己总结的,特别详细,有例子,还有练习题以及答案。包括1.基本SQL语句 2.限制和排列数据 3.单行函数 4.多表查询 5.组函数 6.子查询 7.数据操作 8.创建和维护表 9.约束 10.创建视图...

    韩顺平oracle学习笔记

    韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...

    Oracle 入门文档

    Oracle 入门文档 Oracle笔记 一、oracle...Oracle笔记 十一、PL/SQL函数和触发器 Oracle笔记 十二、PL/SQL 面向对象oop编程 Oracle笔记 十三、PL/SQL面向对象之package Oracle笔记 十四、查询XML操作、操作系统文件

    oracle笔记

    oracle学习笔记,涉及oracle常用函数,分析函数,sql语句。

    成功之路 Oracle 11g 中文学习笔记

    成功之路 Oracle 11g 中文学习笔记 专为开发人员编写,先引导开发新手熟悉Oracle环境,然后进入数据库开发,并要掌握项目开发的一些技巧。开发技巧展示是本书一大特色(这一点很值得资深的开发人员借鉴)! 本书共24...

    ORACLE_PlSql-甲骨文学习笔记

    三、ORACLE 10g新增的数据类型 4 说明 4 示例 4 特殊值 4 四、ORACLE PL/SQL简介 5 1 块结构 5 2 变量和类型 6 3 条件逻辑 6 4 循环 7 5 游标 8 №1声明一些变量,用于保存select语句的返回的列值 8 №2声明游标,并...

    oracle学习笔记

    这是我自己总结的oracle学习笔记,适合入门学习,包含服务启动,基本配置,Sql语句练习,窗口函数,PL/SQL编程等

    Oracle笔记,主要是关于SQL以及PL/SQL部分

    最近学习Oracle时写的笔记,对于Oracle中常用的数据库对象、函数,常用语句,PL/SQL都有涉及到,学习的时候是看的动力节点的视频,其中部分知识点摘自网络

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    2009达内SQL学习笔记

    函数一般在数据上执行,它给数据的转换和处理提供了方便。不同的DBMS提供的函数不同。 函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数...

    Oracle学习笔记(一)

    一.基本的查询语句,特殊符号||。制定列的别名AS,唯一标示distinct 1.字符连接符“||”与“+”符 oracle:select 列名||’...数据排序与数据过滤查询与sql相同 in ,like, is null,between … and …,and ,

    oracle数据库sql-笔记.zip

    以思维导图的形式(xmind),呈现oracle数据库知识点....函数,表达式,聚合函数,子查询,分组查询,分页查询,视图,序列等)以及数据库的整体框架,以便你更好的学习,阅读。。感谢各位的支持,谢谢大家赏识

    ORACLE学习笔记-添加更新数据函数篇

    Oracle系统,即是以Oracle关系数据库为数据存储和管理作为构架基础,构建出的数据库管理系统。世界第一个支持SQL语言的商业数据库,定位于高端工作站,以及作为服务器的小型计算机,Oracle公司的整个产品线包括...

Global site tag (gtag.js) - Google Analytics