Oracle总结二
1 where子句
Where子句的作用:用where子句来指定查询条件
1.1 用法示例
select * from emp where deptno=10;
select * from emp where ename = 'SMITH';
select * from emp where hiredate = '02-4月-81';
注意:
1).字符串和日期值要用单引号括起来
2).字符串大小写敏感
3).日期值格式敏感,缺省的日期格式是'DD-MON-RR‘(RR表示2位数的年份)
1.2 查询条件中使用比较运算符
运算符 |
含义 |
> |
大于 |
>= |
大于等于 |
< |
小于 |
<= |
小于等于 |
= |
等于 |
<> ,!= |
不等于 |
IN(set) |
出现在集合中 |
BETWEEN...AND... |
介于两值之间(包含边界) |
例如:
select * from emp where sal > 2900;
-- 查询部门号不等于30的所有员工信息
select * from emp where deptno <> 30;
-- 查询月薪在1600到2900之间的所有员工信息
select * from emp where sal between 1600 and 2900;
select * from emp where ename in('SMITH','CLARK','KING');
1.3 like运算符执行模糊查询
使用like运算符执行模糊查询(通配查询)
% 表示零或多个字符, _ 表示一个字符
对于特殊符号可使用ESCAPE 标识符来查找
用法举例:
select * from emp where ename like 'S%';
select * from emp where ename like '_A%';
select * from emp where ename like '%\_%' escape '\';
上面的escape表示\后面的字符不被当作特殊字符处理,就是普通的'_'符,将查询ename中带有’_’的所有记录
1.4 IS NULL运算符进行空值判断
使用IS NULL判断某个字段的值是否为空值
select * from emp where comm is null;
select * from emp where comm is not null;
1.5 查询条件中使用逻辑运算符
select * from emp where deptno = 10 and sal > 1000;
select * from emp where deptno = 10 or job = ‘CLERK’;
select * from emp where sal not in (800, 1500, 2000);
And: 并且 or:或者 not:非
SQL优化问题:
AND: 把检索结果较少的条件放到后面
OR: 把检索结果较多的条件放到后面
1.6 运算符优先级
四种运算符优先级:算术>连接>比较>逻辑
优先级 |
运算符 |
1 |
* / |
2 |
+ - |
3 |
|| |
4 |
= , >, >=, <, <=, <> |
5 |
IS [NOT] NULL, LIKE, [NOT] IN |
6 |
[NOT] BETWEEN... AND |
7 |
NOT |
8 |
AND |
9 |
OR |
可使用小括号强行改变运算顺序
select * from emp where job='SALESMAN' or job='CLERK' and sal>=1280;
select * from emp where (job='SALESMAN' or job='CLERK') and sal>=1280;
2 在查询中使用函数
2.1 函数概述
使用函数可以大大提高SELECT语句操作数据库的能力。它给数据的转换和处理提供了方便。
函数只是将取出的数据进行处理,不会改变数据库中的值。
Oracle函数分为单行函数和多行函数两大类
单行函数分类:
1. 字符函数 2. 数值函数 3. 日期函数
4. 转换函数 5. 通用函数
多行函数分类:
1.sum() avg() 仅适用数值型
2.count() max() min() 适用任何类型数据
2.2 单行函数
2.2.1 字符函数
使用:
SELECT UPPER('hello world') FROM dual;
2.2.2 数值函数
使用
SELECT ABS(-10) FROM dual;
2.2.3 日期函数
使用:
SELECT last_day(SYSDATE) FROM dual;
SELECT next_day(SYSDATE,'星期一') FROM dual;
2.2.4 转换函数
Oracle的类型转换分为自动类型转换和强制类型转换。
select '12.5'+30 from dual;
select '12.5'||30 from dual;
尽管数据类型之间可以进行自动转换,仍建议使用显式转换函数,以保持良好的设计风格。常用类型转换函数有to_char(), to_date(), to_number()。
tochar(num,format):使用指定格式把数字转换为字符串
select to_char(12304.560,'99999.99') from dual;
select to_char(104.560,'999.99') from dual;
select to_char(14.560,'0099.990') from dual;
tochar(date,format):使用指定格式把日期转换为字符串
日期字符串转换函数:to_char()
to_char()函数可以将日期型数值转换为字符串形式
to_char(date) //缺省转换为'dd-mon-yy'格式
to_char(date,‘format_model’) //转换为模式串指定的格式
使用举例:
select empno, ename, sal, to_char(hiredate,'yyyy-mm-dd') from emp;
SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual;
SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual;
说明
缺省的日期格式是DD-MON-YY
可使用sysdate函数获取当前系统日期和时间
日期字符串转换函数:to_date()
to_date()函数可以将字符串转换为日期类型
格式:
to_date(char) //按缺省格式进行解析
to_date(char,‘format_model’) //按模式串指定的格式进行解析
使用举例
insert into test2 values('Tom', to_date('2008-02-28 ', 'yyyy-mm-dd '));
问题:查询入职时间某个时间点之后的员工信息
--1.使用to_char()
--2.使用to_date()
--3.使用默认的时间格式
2.2.5 通用函数
A.通用函数:NVL()函数
NVL()函数用于将空值null替换为指定的值,适用于字符、数字、日期等类型数据。
语法格式:NVL(exp1, exp2)
说明:如果表达式exp1的值为null,则返回exp2的值,否则返回exp1的值。
用法举例:
select empno, ename, sal, comm, sal + nvl(comm, 0) from
emp;
select empno, ename, hiredate, nvl(hiredate, sysdate)
from emp;
B.通用函数:NVL2()函数
NVL2()函数用于实现条件表达式功能。
语法格式:NVL2(exp1, exp2, exp3)
说明:如果表达式exp1的值不为null,则返回exp2的值,否则返回exp3的值。
用法举例:
select empno, ename, sal, comm, nvl2(comm,
sal+comm, sal) total from emp;
2.3 多行函数
多行函数:对一组数据进行运算,针对一组数据(多行记录)只返回一个结果,也称分组函数或聚合函数。
多行函数示意图如下:
2.3.1 常用多行函数
1. sum() ,avg() : 仅适用数值型,sum()是求和,avg()求平均值
2. count()
max() min() : 适用任何类型数据
使用示例:
select avg(sal), max(sal), min(sal), sum(sal) from emp;
select max(hiredate), min(hiredate) from emp;
2.3.2 多行函数与空值
多行函数除了count(*)外,都跳过空值而处理非空值
select count(comm),sum(comm),avg(comm) from
emp;
可使用NVL()函数强制多行函数处理空值
select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0))
from emp;
2.3.3 count函数说明
count(*)返回组中总记录数目(总行数);
count(exp)返回表达式exp值非空的记录数目;
count(distinct(exp))返回表达式exp值不重复的、非空的记录数目。
select count(*) from emp;
select count(comm) from emp;
select count(distinct(deptno)) from emp;
select count(nvl(comm,0)) from emp;
2.3.4 GROUP BY子句
GROUP BY 子句将表中数据分成若干小组
语法格式:
select column, group_function(column)
from table
[where condition]
[group by
group_by_expression]
[order by column];
说明:1)语法中用中括号括起来的部分是可选的,即可有可无;
2)WHERE一定放在FROM后面
使用举例
select deptno, avg(sal) from emp group by
deptno;
select
deptno, job, count(*),avg(sal) from emp group by deptno, job;
注意事项
1. 在SELECT列表中的字段,如果没有包含在多行函数中,则该字段必须出现在GROUP
BY子句中。
错误:select deptno,job,sum(sal) from emp group by deptno
2.包含在GROUP BY子句中的字段不必出现在SELECT列表(查询字段)中。
select avg(sal) from
emp group by
job
3.如果没有GROUP BY子句,SELECT列表中不允许出现字段(或单行函数)与多行函数混用的情况
select empno, sal from emp; //合法
select avg(sal) from emp; //合法
select empno, avg(sal) from emp; //非法
4.不能在WHERE 子句中使用分组函数
错误:select deptno, avg(sal) from emp
where avg(sal) > 2000 group by deptno;
2.3.5 HAVING子句
对分组查询的结果进行过滤,要使用having子句。
having子句过滤分组后的结果,它只能出现在group by子句之后,而where子句要出现在group by子句之前。
where过滤行(在分组前筛选数据),having过滤分组(分组后筛选数据)。having支持所有where操作符。
语法格式
select column, group_function(column)
from table
[where condition]
[group by
group_by_expression]
[having
group_condition]
[order by column];
执行过程:from--where
-- group by– having– select-- order by
用法举例
1.在emp表中,列出工资最小值小于2000的职位。
错误:select job,min(sal) from emp where
min(sal)<=2000
正确:Select job,min(sal) from emp group by job
having min(sal)<2000
2.列出平均工资大于1200元的部门和职位,并按部门,职位升序排列
select deptno, job, avg(sal) from emp
group by deptno,job having avg(sal) > 1200 order by deptno,job;
思考:
1.统计人数小于4的部门的平均工资。
2.统计各部门的最高工资,排除最高工资小于3000的部门。
2.3.6 嵌套多行函数
将一个多行函数嵌套在另一个多行函数中,称为嵌套多行函数。
用法举例
显示各部门平均工资的最大值
select max(avg(sal)) from emp group by deptno
3.DML
3.1 插入数据
insert语句用于向表中插入数据,方式有两种,一种是记录值的插入,一种是查询结果的插入
3.1.1记录值的插入
语法:INSERT INTO table
[(column [, column...])] VALUES (value [, value...]);
特点:一次插入操作只插入一行数据(1个记录)
插入数据时,可以为所有列提供数据(添加所有列),也可为部分列提供数据
A. 添加所有列(字段)
例如:
insert into emp
(empno,ename,job,mgr,hiredate,sal, comm, deptno)
values(1111,'gao','clerk',7902,sysdate, 10000,3000,30)
此处插入的记录中列的个数、顺序与emp的结构完全一致,因此表名之后的列名可以省略不写,如下所示:
insert into emp
values(2222,'gaohs','clerk',7902,sysdate,10000,3000,20)
B. 添加部分列
insert into emp(empno,ename) values
(3333,'xiaozhang')
但要求省略的列必须满足下面的条件:
1).该列定义为允许Null值。
2).在表定义中给出默认值,这表示如果不给出值,将使用默认值。
如果不符合上面两个条件,将会报错。不能成功插入。
注意:字符和日期型数据应包含在单引号中
3.1.2查询结果插入
可以用insert语句把一个select语句的查询结果插入到一个表中,语法如下:
Insert into tablename (column,..)
select column,.. from tablename2
用法举例:
A.先创建一个表
create table temp As select * from
emp where 1 = 2
B.执行插入
insert into temp select * from emp;
3.2 更新数据
Update语句用于修改表中记录的某些列,其语法如下:
UPDATE table
SET column
= value [, column = value] …
[WHERE condition];
其语义是:修改表中满足条件表达式的那些记录的字段值,需修改的字段值在set子句中指出。
UPDATE TEMP SET
ENAME='张三',SAL=10000 WHERE
empno=7369;
3.3 删除数据
删除数据有两种方式,分别如下:
3.3.1 使用DELETE删除
DELETE语句用于从表中删除数据,语法如下:
DELETE [FROM] table
[WHERE condition];
当有where子句时,其语义是从表中删除满足条件表达式的记录
DELETE FROM TEMP WHERE EMPNO=7369;
delete from table,语义是 从表中删除所有记录
3.3.2 使用Truncate删除
使用Truncate语句是删除表中的所有记录,与不带where子句的delete功能相同
语法格式: Truncate
[table] table_name;
例如:Truncate table temp
注意:当需要删除表中所有的行时,不要使用delete,可使用truncate
table 语句,完成相同的工作,但是速度更快。
Truncate与delete的比较:
1).Delete语句删除时会把删除的每一行记录在日志中,而Truncate不记录删除的每一行,它删除所有记录并释放记录占用的空间,因而速度更快。
2). Delete删除的数据在未提交前可以恢复(执行”回滚”即可),而Truncate删除的数据不能恢复
Oracle总结二的更多相关文章
- Oracle GoldenGate 二、配置和使用
Oracle GoldenGate 二.配置和使用 配置和使用GoldenGate的步骤 1 在源端和目标端配置数据库支持GoldenGate 2 在源端和目标端创建和配置GoldenGate实例 3 ...
- 7.26实习培训日志-Oracle SQL(二)
Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...
- Oracle笔记二
一.数据库语言分类 二.DML之数据插入 把一个表中的数据查询出来插入另外一个表中. create table student(id number,name varchar2(20),age num ...
- 26、Oracle(二)
1)掌握多行函数与分组操作 2)掌握多表查询与子查询 3)理解集合查询与掌握Oracle分页语法 4)理解创建.修改和删除表和表约束 --------------------------------- ...
- Oracle(二)在 Mysql 的基础上学习 Oracle
毕竟我是先学的mysql,对数据库的一切认知都会有一个先入为主的思想在里面,如果不搞清楚其中的异同,我感觉Oracle我是学不会 了,甚至会把它们混淆.那么,不会mysql的没必要往下看了. 下边第一 ...
- Java基础——Oracle(二)
一.Oracle 中的几个服务 1.OracleDBConsoleorcl 进程:nmesrvc.exe oem控制台服务进程,dba用.Oracle Enterprise Manager(Oracl ...
- Oracle(二)SELECT语句执行顺序
转载自:小强斋太-Study Notes,原文链接 从join on和where执行顺序认识T-SQL查询处理执行顺序 目录 一.样例 二.SELECT语句的处理过程 1. FROM阶段 2. WHE ...
- oracle入门(二)
### 一,视图 ```1. 什么是视图 视图是一张虚表, 可以把视图看成表使用(增删改查),视图中没有数据,所有的数据都在基本表中(tables) 封装了一个复杂的DQL 操作视图 ...
- Oracle【二维表管理:约束】
1.简单的表创建和字段类型最简单的方式去创建表(没有添加主键之类的约束条件)[Oracle的字段类型]number:数值类型--整数类型:number(a) 总长度a--小数类型:number(a,b ...
- oracle之二表的几种类型
Oracle中表的几种类型 1.表的功能:存储.管理数据的基本单元(二维表:有行和列组成)2.表的类型: 1)堆表:heap table :数据存储时,行是无序的,对它的访问采用全表扫描. 2)分区表 ...
随机推荐
- 提高Linux运维效率的命令行常用快捷键
提高Linux运维效率的命令行常用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键 Ctrl+a 光标回到命令行首 Ctrl+e 光标回到命令行尾 Ctrl+k 剪切(删除)光标处到行尾的 ...
- Java字符串池(String Pool)深度解析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存 ...
- React.js 三周 -- 入门到搭建团队基础项目
吐槽 公司自己的产品,由于历史遗留问题,前端一直是和java放到一个项目里写的. 导致了,前端就被死死的绑在了IDEA战车上.想要看页面效果,先起几个java服务.想要调试一个改动,重启个java服务 ...
- source insight 添加 python 支持
从http://www.sourceinsight.com/public/languages/下载Python的配置文件Python.CLF 选择Options > Preferences,单击 ...
- Liferay开发人员培训计划
第1节 1.介绍适合和不适合Liferay的一些应用领域2.安装Liferay开发环境,下载Liferay源码:3.配置Liferay bundle.Liferay SDK,配置数据库:4.Lifer ...
- spring boot -thymeleaf-日期转化
<span th:text="${#dates.format(date)}" ></span><span th:text="${#dates ...
- 同时使用 Ant Design of React 中 Mention 和 Form
使用场景,在一个列表中,点击每一行会弹出一个表单,通过修改表单数据并提交来修改这一行的数据,其中某个数据的填写需要通过Mention实现动态提示及自动补全的功能. 具体效果为: 遇到的问题: 1.希望 ...
- 理解 Python 的执行方式,与字节码 bytecode 玩耍 (上)
这里有个博客讲 Python 内部机制,已经有一些中文翻译. 可能因为我用的Python 3.5,例子跑起来有些不一样. 此外,我又查了其他一些参考资料,总结如下: Python 的执行方式 先看一个 ...
- 分布式协调服务ZooKeeper的典型应用
Zookeeper典型应用 参考官方文档: http://zookeeper.apache.org/doc/current/recipes.html Out of the Box Applicatio ...
- 删除.svn 脱离svn版本控制器
1.for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn" 复制到记事本,将记事本保存为 ...