博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle总结二
阅读量:4595 次
发布时间:2019-06-09

本文共 7384 字,大约阅读时间需要 24 分钟。

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删除的数据不能恢复

转载于:https://www.cnblogs.com/topshark/p/10306470.html

你可能感兴趣的文章
(译文)MVC通用仓储类
查看>>
《操作系统》第5章:输入/输出(I/O)管理
查看>>
Python初探第一篇-变量与基本数据类型
查看>>
快速创建SpringBoot2.x应用之工具类自动创建web应用、SpringBoot2.x的依赖默认Maven版本...
查看>>
《剑指offer》字符串中的字符替换
查看>>
PHP学习笔记(11)初探PHPcms模块开发
查看>>
【剑指Offer】44、反转单词序列
查看>>
毕业设计《项目管理》总结01
查看>>
substr 方法
查看>>
Switch to strategy
查看>>
Part3_lesson1---ARM汇编编程概述
查看>>
delphi存储图片路径 转载
查看>>
OC基础(3)
查看>>
【学习笔记】ajax处理XML文件方法
查看>>
dhl:页面无刷新ajax上传文件--模拟iframe,超简单
查看>>
用python代码模拟键盘输入
查看>>
Python 字符编码与转码
查看>>
Docker Flie
查看>>
springMVC参数绑定JSON类型的数据
查看>>
Python flask-sqlalchemy初级解析
查看>>