序列
//(序列名一般以sq_开头,以“sq_表名”命名)
一般,一张表对应一个序列。
create sequence 序列名
start with n incrementby n;
--序列在使用前必须初始化,方法:序列名.nextval。
即:先select sq.nextval from dual,
再select sq.currval from dual。
insert into test values(sq_test.nextval,'');
sql的执行顺序:先执行where
连接查询
效率较高
--内连接
--外连接:左外、右外(默认为左外)
--自连接
--交叉连接
查询“所有...”时,一般用外连接
===单行函数===对于从表中查询的每一行只返回一个值
数字函数:
round(sal,1)--四舍五入,保留一位小数
round(sal,-1)--四舍五入,保留到十位
--length()、trim()
--nvl(列名,0):如果列的值为null,就替换为0
nvl2(列名,value1,value2):
如果列的值不为null,就替换为value1
如果列的值为null,就替换为value2
--decode(列名,0,2300,2500,other):
例如:decode(sal,null,0,2300,2500,sal)
如果为null,显示0;如果为2300,显示2500;其他情况,显示本身
字符函数:substr(tid,1,2)/substr(tid,0,2)结果一样--从1开始截取2位
日期函数:SELECT SYSDATE FROM dual;
sysdate --当前系统时间
sysdate+1 --当前系统时间的下一天,即明天
sysdate+1/4 --当前系统时间的6小时后
转换函数:在以上3个函数间进行转换
--用户输入字符串格式,使用转换函数。
SELECT to_date('1224-12-12','yyyy-mm-dd') FROM dual;
--to_number():将字符串转为数值
--to_char可以指定格式
SELECT to_char(111111,'999,999') FROM dual;
-111111与999,999的长度要一样,'999,999'可以换成‘000,000’
0和9也可以混着用
其他函数
===分析函数====
用于排名
可以用于分页,但一般不用
row_number():无并列,连续。
rank():有并列,不连续。
dense_rank():有并列,连续。
select tname,deptno,
rank() over(partition by deptno order by sal) rank,
dense_rank() over(partition by deptno order by sal) dense_rank,
row_number() over(partition by deptno order by sal)
from dept;
--先分组,再在组内排名
--必须要有over,且over内必须有order by表达式,指定以谁为标准
进行排名。
联合查询
--集合操作符,将两个查询结果合并为一个结果
UNION:并集,重复的只算一次。
UNION ALL:并集,全部加起来,算上重复的。
INTERSECT:交集
MINUS:补集
分页查询
--伪列(比索引查找快)
rowid:行在oracle中的存储地址--oracle的物理地址
rownum:结果集中行的序号,相当于“行号”,从1开始。
基于结果集。
例:
select * from
(
select teacher.*,rownum as rn from teacher
where rownum<=10
)t
where t.rn>=5;
方法--分层
第一层:加限制条件,如order by
第二层:给结果集过滤最大的范围(10条)
第三层:给结果集过滤出最小的范围(从第几条开始)
select * from TEACHER t
--所有老师的姓名以及其导师
SELECT T1.TNAME, T1.MGRNO, T2.TNAME
FROM TEACHER T1
LEFT JOIN TEACHER T2
ON T1.MGRNO = T2.TNO;
--函数
--日期函数(日期以数值进行存储)
SELECT SYSDATE FROM dual;
--用户输入字符串格式,使用转换函数。
SELECT to_date('1224-12-12','yyyy-mm-dd') FROM dual;
--to_number():将字符串转为数值
--to_char可以指定格式
SELECT to_char(111111,'999,999') FROM dual;
--length()、trim()
--nvl()/nvl2()
--decode():如果为null,显示0;如果为2300,显示2500;其他情况,显示本身
--decode(sal,null,0,2300,2500,sal)
ORACLE语句
最新推荐文章于 2022-11-16 15:00:26 发布