oracle简单归纳

来源:互联网 发布:淘宝联盟高佣金通过 编辑:程序博客网 时间:2024/06/03 13:43

一个完整的SQL命令叫语句。每一个关键字后面跟着的选项叫子句。例如

SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp
关键字 SELECT 跟后面的列,一起叫子句,FROM 跟后面的列也叫子句。


运算符

在SQL语句当中使用算术运算符时,应该注意运算符的优先级。避免出现意外结果。如使用 + - * / 时。


算术运算符 + - * /

  • 先加减,在乘除。
  • 在表达式中处于同一优先级的运算符计算顺序为从左到右。
  • 如果使用了括号,那么括号内的运算优先。
  • 如果有多层括号嵌套,那么最里层的优先,依次往外扩展。

连接运算符 ||

该运算符把一个或多个列或字符串连接在一起。如
select 'my name is ' || ename from emp where ename = 'FORD';
ename是表中的列名,该语句会将字符串 ‘my name is’ 与从表 emp 查出的 姓名 连接在一起

比较运算符

大于 >、小于 <、大于等于 >=、小于等于 <=、等于 =、不等于 <>(!=)、BETWEEN AND、IN、LIKE

BETWEEN AND
用于查询测试某些之是否在指定的范围之内。 BETWEEN 与 AND 之间的是下限,AND 之后的是上限。显示的结果包含上限与下限。也可用于日期之间的监测,但是必须要用单引号括起来。也可在 BETWEEN AND 前面加上 NOT 来监测值是否不再该范围之内。
如查询工资在 1500到2000 之间的员工,可用如下SQL语句
select * from emp where sal between 1500 and 2000;

IN 运算符

IN 用来测试某些之是否在列表中出现。还可以在 IN 之前加上 NOT 来测试某些之不在列表之内。
select * from emp where job in ('ANALYST','PRESIDENT');
该语句检索职位在 ANALYST 以及 PRESIDENT 中的所有人。

LIKE运算符

该运算符可进行通配符查询。% 代表0个或多个字符。 _ 代表 一个且只能是一个字符。

DISTRINCT 运算符

该运算符的作用是去重。它会去掉重复的行。当作用于单列的时候,该列的每一个值,只会输出一次。当作用于多列的时候,多列的组合的值,如果有重复的,那么将会被去重如:
表:


将去重运算符作用于多列的时候,
select distinct name, id from A
输出如下:


当查询的表比较大时,尽量避免使用 DISTINCT,因为oracle是通过排序的方式来完成 DISTINCT 功能的。会造成效率的降低。

别名

对于一些列名比较长的,可以使用别名。如
select ename as n, hiredate as h from emp;
只需要在列名和别名之间放上 AS 或者 空格 就可,这是别名会被转为大写。如果别名需要大小写组合或者特殊字符的,那么需要加上双引号将别名括起来。

限制条件

WHERE 关键字,其后面一般紧跟限制条件。限制条件一般由列名、字符串、算术表达式、常量和比较运算符组成。WHERE 子句中的字符串区分大小写。

ORDER BY 子句

ORDER BY 子句可用来排序,默认是升序排列,如果配合 ASC 或者 DESC  如: ORDER BY DESC 那么就是降序排列。ASC是升序,如果使用了 ORDER BY 子句,那么该子句一定是 SQL 语句的最后一个子句。如果列名使用了别名的话,那么 ORDER BY 也可以使用别名来进行排序。当然也可以使用列号来排序,加入 sal 在 emp 表所有的列中是排在第3的列,那么我们也可以使用 ORDER BY 3 来进行排序。 这里的3是指第3个列。 也就是 sal 。不过这种是使用列号来排序的方法,不建议使用,因为可读性差。
如查询工资由高到低的人(后一个使用了别名):
select * from emp order by sal desc;
select ename, sal s from emp order by s desc;

也可以使用 ORDER BY 作用于多个列。那么oracle会从 ORDER BY 子句中的列的出现顺序,从左往右进行排序。ORDER BY 后面有几个列,就排序几次。
如:
select ename, job, sal from emp order by job, sal desc;
该语句,先按工职位由A 到Z进行排序,然后在按工资的由高到低进行排序。


单行函数

函数: 任何东西,只要他能接收输入,并对输入进行加工,然后产生输出,它就可以被称之为函数。

单行函数的变量可以为:用户定义的常量,变量,列名、表达式。
单行函数可以用于如下的子句当中: SELECT、WHERE、ORDER BY、
单行函数包括:字符型、数字型、日期型、转换型、一般型函数
常用的单行函数有:
LOWER(将字符串替换成小写)


UPPER(将字符串替换成大写)

INITCAP(将每个字符串的开头字符转成大写,其余转成小写),如:SELECT INITCAP(‘my name is nanren’) from duel
CONCAT(将第一个字符串和第二个字符串连接在一起),如:SELECT CONCAT('my name is shangsan',' my age is 18') FROM dual
SUBSTR(截取字符串,含头不含尾)、如:SELECT substr('my name is shen sha',5) FROM dual ;输出为:ame is shen sha
LENGTH(计算字符串长度)、

INSTR(字符串,要搜索的字符,开始位置,出现次数)、如:
SELECT INSTR('thinkinginjava','i',1,3) FROM dual
表示查找字符串 ‘thinkinginjava’ 中 字符 i 的位置,从第 1 个字符开始
查找,找第 3 次出现 i 的时候。i 在字符串中的位置。

TRIM(去除指定字符),
如果不指定去除左边(头部)还是右边(尾部)的字符的话,Oracle会默认去除左右2边的字符,
SELECT TRIM ('?' FROM '?my name is ? shensh?a?') FROM dual
语句输出为 :my name is ? shensh?a ,说明去掉了左右(头部,尾部)2边的 ? 号。当然也可以指定只去除左边(头部)或者右边(未必)的。如:去除右边(尾部)的:
SELECT TRIM (TRAILING '?' FROM '?my name is ? shensh?a?') FROM dual
使用关键字  TRAILING ,该语句的输出结果为:?my name is ? shensh?a该语句只去除了右边(尾部)的 ‘?’ 号。使用 leading 能去除指定的头部的指定字符

REPLACE(正文表达式,要查找的字符串,替换字符串)
从正文当中查找到 “要查找的字符串”,找到之后用 “替换字符串” 来替换查找到的 “要查找的字符串”。 如:
SELECT REPLACE('thinging in java', 'in', 'oracle') FROM dual 
该语句的输出为:thoraclegoracleg oracle java  说明将字符串 in 替换成了字符串 oracle。



ROUND(列名|表达式,n): 将列名或表达式所表示的数值,四舍五入到小数点后的 n 位。
SELECT ROUND (19.21457852, 5) FROM dual 
输出 19.21458

TRUNC(列名|表达式,n):  将列名或表达式所表示的数值,截取到小数点后的 n 位。
SELECT TRUNC (19.2145796, 5) FROM dual
输出 19.21457

MOD(m,n): 将 m 除以 n 并取余数。
SELECT MOD(5,11) FROM dual
输出 5


日期格式数据的处理

MONTHS_BETWEEN(日期1,日期2):返回日期1和日期2之间的月数。如果日期1大于日期而则返回正数,否则是负数
SELECT months_between (TO_date('2017-08-26', 'yyyy-MM-dd'), to_date('2017-06-11','yyyy-MM-dd')) FROM dual


ADD_MONTHS(日期,n):把 n 个月加到日期上。


NEXT_DAY(日期,字符串):返回下一个由字符串(星期几)指定的日期

这里要记录一下的是,执行该函数,可能会出现错误 “周中的天无效”,这时需要查看oracle的日期环境,使用命令,
select * from v$nls_parameters;

来查询一下环境,红色圈圈中表示,使用的是中文环境,所以用上述函数的时候,需要使用中文的字符串。

LAST_DAY(日期):返回该日期所在的月的最后一天。




NULL值

只要在表达式中包含 NULL 值,那么该表达式的值则为 NULL。NULL值不与任何值相等,即使 NULL 与 NULL 也是不相等的。
在进行升序排列时,NULL 值排在最前面。降序时排在最后面。


逻辑表达式,逻辑运算符

AND、OR、NOT
其中 AND 的优先级要大于 OR,可参考以下优先级表格。


NVL 函数

该函数是用来处理 NULL 值的。
NVL(表达式1,表达式2):如果表达式1位空值(NULL),那么返回值为表达式2的值。可以是,睡姿,字符,或者日期类型。但2个表达式的数据类型必须要一致。


DECODE 函数

该语句类似于JAVA当中的 if else 语句。如下面:

DECODE 函数执行为,当 job 为 CLERK 时,将 职位为 CLERK 的人的工资 乘以 10,否则执行下一步----> 当职位为 SALESMAN 时, 将职位为 SALESMAN 的所有人的工资乘以 2,否则执行下一步.....


分组函数

GROUP BY 字句

分组函数.使用该字句需要注意的是:如果在一个查询语句当中使用了分组函数,那么任何不在分组函数当中的列,或表达式都必须在 GROUP BY 字句当中.

HAVING 字句

用于筛选结果.只筛选出符合满足 HAVING 字句的结果.



使用分组函数通常要扫描整个表,


原创粉丝点击