oracle常用语句

来源:互联网 发布:logo设计自动生成软件 编辑:程序博客网 时间:2024/06/06 08:32

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;
假设表中有一个人的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

0 0
原创粉丝点击