一、SQL语句
SQL是结构化查询语言,专门用于数据存取,数据更新及数据库管理操作.
Oracle SQL语句由如下命令组成:
数据定义语言(DDL),包括create(创建)命令、alter(修改)命令、drop(删除)命令等。
数据操纵语言(DML),包括insert(插入)命令、update(更新)命令、delete(删除)命令、select … for update(查询)等。
数据查询语言(DQL),包括基本查询语句、order by子句、group by子句等[selects]。
事务控制语言(TCL),包括commit(提交)命令、savepoint(保存点)命令、rollback(回滚)命令等。
数据控制语言(DCL),grant(授予)命令 和 revoke(撤销)命令。
二、Oracle函数
2.1 字符函数
----(1)ASCII(x) 返回字符 x 的 ASCII 码。
select ASCII('a') from DUAL;
----(2)CONCAT(x,y) 连接字符串 x 和 y。
select concat('hello,','oracle!') from DUAL;
----(3)INSTR(x, str [,start] [,n) 在 x 中查找 str,可以指定从 start 开始,也可以指定从 第 n 次开始。
select instr('hello,oracle','ll',) from DUAL;
----(4)LENGTH(x) 返回 x 的长度。
select length('hello,oracle') from dual;
----(5)LOWER(x) x 转换为小写。
select lower('HELLO') from dual;
----(6)UPPER(x) x 转换为大写。
SELECT UPPER('hello') FROM DUAL;
----(7)LTRIM(x[,trim_str]) 把 x 的左边截去 trim_str 字符串,缺省截去空格。
select ltrim('==hello==','=') from dual;
----(8)RTRIM(x[,trim_str]) 把 x 的右边截去 trim_str 字符串,缺省截去空格。
select rtrim('==hello==','=') from dual;
----(9)TRIM([trim_str FROM] x) 把 x 的两边截去 trim_str 字符串,缺省截去空格。
select trim('=' from '==hello==') from dual;
----(10)REPLACE(x,old,new) 在 x 中查找 old,并替换为 new。
SELECT REPLACE('hello','hello','oracle') FROM DUAL;
----(11)SUBSTR(x,start[,length]) 返回 x 的字串,从start处开始,截取 length 个字符, 缺省 length,默认到结尾
select substr('ABCDE',2) from dual; --从第二个位置后所有的字符
select substr('ABCDE',2,3) from dual; --从第二个位置(包括第二个位置)后的三个字符
2.2 数字函数
----(1)abs(x) x的绝对值
select abs(-1) from dual;
----(2)ceil(x)大于或等于x的最小值
select ceil(5.4) from dual;
----(3)floor(x)小于或等于x的最大值
select floor(5.4) from dual;
----(4)round(x,y) 四舍五入 默认y为0
-----y是正整数时,就是四舍五入到小数点后y位,round(5.645,2)=5.65
-----y是负整数时,四舍五入到小数点左边y位。
select round(5.4561,2) from dual;
----(5)power(x,y) x的y次幂
select power(2,3) from dual;
----(6)trunc(x,y) x在第y位截断,从小数点位数
select trunc(1.2345789,2) from dual;
2.3 日期函数
----(1)Add_months(d,n):在某一个日期d上,加上指定的月数n.返回计算后的新日期,d 表示日期,n表示要加的月数。
select add_months(sysdate,5) from dual;
select add_months(to_date('2021-10-11','YYYY-MM-dd'),5) from dual;
----(2)LAST_DAY(d),指定日期当月的最后一天
select last_day(sysdate) from dual;
----(3)Extract(fmt FROM d):提取日期中的特定部分。
/*
fmt为YEAR,MONTH,DAY,HOUR,MINUTE,SECOND.
其中YEAR,MONTH,DAY可以为DATE类型匹配,
也可以与TIMESTAMP类型匹配,
但是HOUR,MINUTE,SECOND必须与TIMESTAMP类型匹配。
*/
select sysdate "date",
extract(year from sysdate)"year",
extract(month from sysdate)"month",
extract(day from sysdate)"day",
extract(hour from systimestamp)"hour",
extract(minute from systimestamp)"minute",
extract(second from systimestamp)"second" from dual;
----(4)Months_between
select months_between(sysdate,to_date('2018-9-2','YYYY-MM-dd')) from dual;
----(5)在oracle中,可以将两个日期直接相减,或得俩日期之间的天数
2.4 转换函数
----(1)TO_CHAR(d[,fmt]) 将日期和数字转换为制定格式的字符串。
----- Fmt是格式化字符串。YYYY:年 MM:月 DD:日 HH24:24小时 MI:分钟 SS:秒
----- 在格式化字符串中,使用双引号对非格式化字符进行引用。
select to_char(sysdate,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date" from dual;
----(2)TO_NUMBER(x[,fmt])函数:将一个字符串以fmt格式转换为一个数字
select to_number('111') from dual;
----(3)TO_DATE('2018-7-25','yyyy-MM-dd'):将一个字符串转换为日期类型
2.5 其它单行函数
----- 1> nvl(x,value) 如果x为空,返回value,否则返回X
对工资是2000以下的员工,如果没有发奖金,则奖励100元
select ename,job,sal,nvl(comm,100) from emp where sal < 2000;
----- 2> nvl2(x,value1,value2) 如果x非空,返回value1,否则返回value2
对emp表中工资为2000以下的员工,如果没有奖金,则奖金为200,如果有奖金,则原来奖金的基础上加100
select ename,job,sal,nvl2(comm,comm+100,200) from emp where sal<2000;
----- 3> exists 查询性别为男的学生成绩
2.6 聚合函数
聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值 等。
----(1)avg(表达式) 求平均值
----(2)sum(表达式) 求和
----(3)min(表达式)、max(表达式) 求最小值、最大值
----(4)count(表达式) 数据统计