分页:
select * from (
select e.*, rownum from (
select * from emp
) e
where e.rownum > 5 and e.rownum < 10
)
type:
NUMBER(7,2) 总长度7位,小数2位
date 加天 hiredate + 1
加一个小时 hiredate + 1 / 24
oracle中空值和0:
select money, money + 100 from tb;
如果money是空值,加了100还是空值
别名:
select age, age+1 as new_age from user;
select age, age+1 as "new_age" from user;
加了双引号,是什么就是什么, 可以加空格,特殊符号
||用来连接:列和列, 列和字符串
显示表结构,命令, 此命令只能在命令行下运行(仅限PL/SQL,其他不知)
select distinct name, age from user;
相当于distinct(name, age),所以name,age组合不重复就会显示
默认格式DD-MON-RR 日月年
<>不等于 (!= 也ok的)
between x and y (含)
IN(set) 满足set中出现的项就会出现
dual dual位oracle的虚表,常用于查询常量或常量运算
函数:
concat('hello', 'world') 连接
substr('hello world', 1, 5) 取子串 第1-5个字符
lpad(str, 10, ch) 对于str, 如果长度小于10, 则在左侧以ch字符填充
lpad(str, 10, ch) 对于str, 如果长度小于10, 则在右侧以ch字符填充
length(str) 取str的长度
instr(str, ch) 查询ch第一次出现在str是几(从1开始, 没有出现为0)
round(123.456, 2) 保留2位小数,四舍五入
round(date, 'MONTH') 精确到月份:如果天数超过一半(15,16是界限),则进到下个月1号,否则退到本月1号: DAY YEAR同理
trunc(123.456, 2) 保留2位小数
mod(123, 2) ==> 123%2
months_between(date1, date2) 计算两个时间相差多少个月
add_months(hiredate, 3) 往hiredate上向后计算2个月
next_day(date, '星期一') 以date为起点,计算下一个星期一的日期
last_day(date) 对于date中的月份,它这个月中的最后一天的日期
nvl(a, b) 如果a为空,则用b代替
nvl2(a, b, c) return (a is not null) b:c
nullif(a, b) 相等返回null,否则返回1
coalesce(a,b,c,d) 返回第一个不为空的值
decode(job, 'CLERK', 'c',
'MANAGER', 'm',
'ANALYT', 'a',
'd') --如果job等于clerk显示c,manager显示m……
select avg(sal) from emp group by deptno
如果要帅选平均值大于2000的,则在后面加上: having avg全连接(sal) > 2000
不能使用where avg(sal) > 2000, oracle在语法上不支持
=====================================================================================
(+)方式的外连接只有oracle支持
sql 1999 语法支持多种不同的数据库
select * from emp e, dept d where e.deptno(+) = d.deptno
select * from emp e left outer join dept d on (e.deptno = d.deptno)
select * from emp e right outer join dept d on (e.deptno = d.deptno)
select * from emp e full outer join dept d on (e.deptno = d.deptno) --全连接