您的位置:首页 > 数据库 > Oracle

oracle常用语句

2016-12-07 13:57 447 查看
unique:唯一

primary key:主键

主键能找到相应的信息,主键没有任何意义,一个表中只能存在一个主键。*--*

foreign key:外键

约束某一个列的取值范围,范围来自于与之关联的主键的值。

default:默认值

check检查(自定义);

create table 表名称(字段名 属性(长度) 约束,。。。。。。。。)

select distinct 字段名 from 表名;查询剔除重复值;

 select distinct  字段名 , 字段名  from 表名; 查询两个字段都重复才回进行剔除

连接字符串 (||) ||代表连接字符串

 select 字段名||拼接的字符串|| 字段名 新字段名 from 表名;

查询时候改变日期格式

 select 字段名,to_char(日期字段名,“YYYY-MM-DD”) 新的日期字段名 from 表名;

select to_char(last_day(sysdate),'yyyy/mm/dd')lastday from day 求每个月最后一天

select to_char(first_day(sysdate),'yyyy/mm/dd')first from day 求每个月最后一天

查询指定的属性名

 select * from 表名 where 字段名='字段属性';

查询两个都匹配的字段属性

select * from 表名 where 字段名='字段属性'and 字段名='字段属性';

首字母是否大写

initcap(字段名)

实例:比较符号查询

 select ename,job from emp where sal<> 2800;//不等于2800的

 select ename,job,sal from emp where not sal>2000;//不大于2000的

实例:between and 区间查询

 select ename,job,sal from emp where sal beteewn 1000 and 2000;//查询在1000到2000的

 select ename,job,sal from emp where sal not beteewn 1000 and 2000;//查询不在1000到2000的;

实例:确定集合

 select ename,job,sal from emp where job in(‘MANAGER’ ,‘ANALYST’);//查询in里的两个值得结果。

实例:模糊查询

Select ename,job from emp where ename like ‘M%’;//查询头一个字母是M的

Select ename,job from emp where ename like ‘%M%’;//查询字段里有M的值

Select ename,job from emp where ename not like ‘M%’;//查询最后一个字母是M的

实例:查询是否为空

 select * from emp where comm is null;//查询comm字段内值为空的属性

 select * from emp where comm is not null;//查询comm字段内值不为空的属性

Null与任何的字段进行运算后还是null

 select ename,sal,comm,sal*comm from emp

实例:逻辑查询

 select ename,sal,comm,sal*comm from emp where id=7900 and ename like ‘%M%’; 查询id为7900并且名字内带有M的值

 select ename,sal,comm,sal*comm from emp where id=7900 or ename like ‘%M%’;查询id为7900或者名字内带有M的值

实例:按照顺序排序

select * from emp order by sal desc;从大到小输出值

select * from emp order by sal ;从小到大输出值

select * from emp order by sal desc,empno;先按工资从大到小输出值如果碰到相等的再按编号从大到小输出;

在Oracle中,插入日期,需要使用 TO_DATE,示例:

INSERT INTO tDateTable(ID,dDate) VALUES('12',TO_DATE('2015-09-23','YYYY-mm-dd'))

查看总共表中有多少条记录;

select count(*) from 表名;

group by 是分组的意思 

第一点:写在where条件之后,当然没有条件就直接跟在table后面(做分组并自动排序) 

select * from table  where ****** group by 字段   

第二点:当查询结果包含聚合函数时,没有使用聚合函数的必须要分组一下,这里的分组没有什么实际意义,但是必须,否则执行不成功 

select aa,bb,cc,sum(dd) from table where ****** group by aa,bb,cc

查看该字段中中有多少条记录;统计的时候如果字段中存在null则不会进行统计。

SQL>

select count(字段名) from 表名;

对该字段求和,只能对数值类型使用

select sum(字段名) from 表名

实例:计算平均工资、最大工资、最小工资

 select sum(sal) as 工资和,avg(sal) as 平均工资,max(sal) as 平均工资,min(sal) as 最小工资 from emp;

使用一个函数round()就可以进行四舍五入

 select sum(sal),round(avg(sal),2),max(sal),min(sal) from emp;

分组查询

 select sum(sal) as 工资和,avg(sal) as 平均工资,max(sal) as 平均工资,min(sal) as 最小工资 from emp group by job;

select * from emp where sal>(select avg(sal) from emp);

查找工资大于平均工资的人;

exists(sql语句)

实际上exists语句的作用与in是比较相似的,是判断一个查询结果是否存在,如果存在则返回true如果不存在则返回false。

集合查询实际上就是一下三种:

 union[ALL]:并

 intersect:交

 minus:差

合并结果集并去掉重复内容

 select empno,ename from emp

 union

 select deptno,dname from dept;

从运行结果我们可以发现,两个结果集合并了,并且按照第一个字段进行排序。

合并结果集不去掉重复内容

select empno,ename from emp

 union all

 select deptno,dname from dept;

从运行结果我们发现,两个结果集合并,并且不排序。

查询数据交集

select deptno,dname from t_dept

 intersect

 select deptno,dname from dept;

现在我们就可以将一个字符串变成小写的。

 select lower(‘I love China’) from dual;

upper:将小写或大小写混合的字符转换成大写;

select upper('i loVe cHIna!') from dual;

表中存储的名字,现在有大写有小写的还有大小写同时存在的,我们现在怎么一次性查询出来呢?

 select ename from emp where upper(ename)=‘ALLEN’;

initcap:将字符串中每一单词的首字母转换成大写,其余字符转换成小写;

select initcap('i loVe cHIna!') from dual;

查询出一个表中只有首字母大写的人的名字

 select ename from emp where ename=initcap(ename);

concat:将字符串连接在一起;

select concat('I Love', ' China!') from dual;

substr:提取字符串的某一特定部分;

select substr('I Love China!', 0, 5) from dual;

length:返回字符串的长度;

select length('I Love China!') from dual;

查询出表中名字长度大于5的员工的信息

 select * from emp where length(ename)>5;

instr:在字符串中查找某个子串的位置;

select instr('I Love China! ', 'China') from dual;

lpad:在左边以指定字符填充字符型数据;

select lpad('I Love China!', 19, '*') rom dual;

rpad:在右边以指定字符填充字符型数据;

select rpad('I Love China!', 19, '*')  from dual;

ltrim:去除字符串左边空格;

select ltrim('    China   ') from dual;

rtrim:去除字符串右边空格;

select rtrim('    China   ') from dual;

trim:去除字符串头尾空格;

select trim('    China   ') from dual;

数值函数:

round:四舍五入到小数点后的n位小数。

select round(34.567, 2) from dual;

trunc:截取(不进行四舍五入)到小数点后的n位小数。

select trunc(34.567, 2) from dual;

mod(m,n):取m除以n后的余数。

select mod(35, 8) from dual;

日期函数:

months_between(date1,date2):返回date1减去date2的月份的数量。

select months_between(sysdate, sysdate -50) d1 

,months_between(sysdate, sysdate +50)  d2 from dual;

查询表中人员的工作年限:

 select ename,trunc(months_between(sysdate,emp.hiredate)/12) hire from emp;

add_months(date,n):返回date加上n月后的数量。

select sysdate, add_months(sysdate, 3) adddate from dual;

查询表中工作了三十年以上的员工的信息

 select * from emp where add_months(hiredate,30*12)<sysdate;

计算一个月后的日期

 select add_months(to_date(‘2000-01-30’,’yyyy-mm-dd’),1) from dual;

为当前日期增加天数:不用使用函数

 select sysdate+4 from dual;

next_day(date, 星期名/数):返回date后第一个“星期名”的日期。

select sysdate,next_day(sysdate, '星期一') nextday1,next_day(sysdate, 2) nextday2

from dual;其中数字代表的是星期几的编号

last_day(date):返回date所在月的最后一天。

select sysdate, last_day(sysdate) from dual;

转换函数

to_char:将日期或数值按指定格式转换成字符串。

select to_char(12345, ‘99,999,00') numout,to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') dateout from dual;

to_number:将字符类型转换成数值型。

select to_number('453')  from dual;

to_date:将字符型转换成日期型。

select to_date('20060905','yyyymmdd') from dual;

其他函数

nvl:将空值赋以实际值。

select null, nvl(null, 123), nvl(null, 'imti') from dual;

计算每一个员工一个月的总工资

 select ename,job,sal,comm,sal+comm from emp;

从运行结果我们可以发现,当前出现了问题,comm为null的员工,工资总和也变成了null

  select ename,job,sal,comm,sal+nvl(comm,0) from emp;

decode(字段/表达式,条件1,结果1,条件2,结果2,…,默认值)

 select ename,job,sal,comm,sal+decode(comm,null,0,comm,comm) from emp;

分页查询

rowid 每一行的唯一标识 在创建这一行的时候数据库赋给它的唯一的值

将表中sex字段显示为1的变成男,0变成女

 select name,decode(sex,1,’男’,0,’女’) from tab2;

ad33

假设表中有一个人的sex是2,我们可以设置默认值

 select name,decode(sex,1,’男’,0,’女’,’未知’) from tab2;

聚合函数(统计函数,分组函数)

我们现在给大家介绍一个函数,函数在之前我们说过了一个to_char()将一个日期按照某种格式转换为字符串。有两个参数,第一个是格式化的日期,第二个是格式化的格式。我们还有一种函数是集合函数,比如我们java中学习的list集合,在list集合中有方法叫做size()这个size方法会自动的告诉我们集合中存放了多少个元素,这样的方法在操作的时候参数都是不确定的,这样的不确定参数个数的方法,我们叫做聚合函数。在Oracle中也存在这样的聚合函数:

 count(*或列名):计数

 sum(列名或表达式);求和

 avg(列名或表达式);平均值

 max(列名或表达式);最大值

 min(列名或表达式);最小值

我们可以设置事务的保存点,这样我们再使用rollback就可以回滚到事务的保存点开始。

select * from dept;

delete from dept where deptno=10;

savepoint a;

update dept set dname='asd' where deptno=40;

savepoint b;

delete from dept;

rollback to b;

创建一个表之后不能回滚。

支持事务的语句只有:insert,update,delete;

在一个命令提示符窗口A中输入如下命令:

 update dept set dname=‘asdf’ where deptno=10;

在命令提示符窗口B中输入:

 update dept set dname=‘bbb’ where deptno=20;

 update dept set dname=‘aaa’ where deptno=10;

在命令提示符窗口A中输入如下命令:

 update dept set dname=‘asdf’ where deptno=20;。

会产生死锁s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: