Oracle 10g sql 入门基础知识 笔记 第一部分




1、orcale 数据库
DDL 定义语言  create drop 
DML 操作语言  insert  delete update
DCL 控制语言  grant revoke  commit




orcale中  number(7) 数据类型  和date  数据类型 可以进行 数学运算,  但是date类型 不能进行 乘法和除法运算。 空值NULL做数学运算还是空


desc  employees ; 显示表的字段列。


pl_sql 中 ed 显示编辑窗口   / +enter 执行编辑窗口内容。


sql语言 不区分大小写 。  注释用 --


sql中语言与关键词 缩进分行。


列的别名   1、空格 + 别名名称  2. select age  as nianling  列+ as 列别名名称  3、 别名名称 用双引号 "a B _d" 则引号中是啥 别名就是啥  可以是多个单词  




distinct 查询非重复记录。放在查询字段的首列,不能出现在非第一列的  字段列中。


|| 连接符 ||  连接多列列名  。


select  name||'`s age is '|| age  as "Deteils" from employees;








字符类型varcahr2(32)和日期类型Date  要包含在 ''单引号中。


默认日期类型  6-7月-2009  日-月-年的 格式 。   条件比较时   to_char(字段名 ,'yyyy-mm-dd') 转换日期格式。




SQL语句中 不区分大小写,但是 列值区分大小写 。 推荐 在SQL语句中逢 关键词折行提高可读性 。
select *  from  employees 
where name='john';


SELECT *  from  employees 
where name='JohN';


筛选条件  where  


= , <> ,>=,  <=, < ,>.


between  A and  B 包含A 和B的边界。  salary >=A and salary<=B  


name  in (A,D,F,M) 等价于 name=A or name=D 。。。


like 


%一个或者多个字符 
_一个字符 


escape 转义字符  如: name中 包含 _的记录。   like  '%\_%' escape '\'   用 \或者# 均可


is null


is not null 


and or not 


排序 order by  


desc 降序   asc 升序   


单行函数 :


字符函数:
to_char(hire_date,'yyyy-mm-dd')='2013-09-23';把默认日期类型转换为指定格式的字符类型。 默认日期类型格式:'23-9月-2013' 


upper(last_name)='ABSR' --转换成大写之后进行比较相等 
lower(last_name)='cvbn' --字段的值转换为小写后与'cvbn'进行比较
initcap(last_name)='John'; --首字母大写其余小写


concat 连接多个字符


---数据库中位置是从1开始 , 区别于java中字符串位置从0开始。
substr('hellowworld', 2,4) 截取字符串, 从字符串第二个位置开始,截取4个长度的字符串(不是截取到第四个位置) 。


length('hellowworld'); 返回 字符串的长度


instr('helloworld','w'); 返回'w'在字符串中的位置  如果不存在 则返回0。区别于 java中 不存在字符则返回-1 
lpad(last_name,10,'*');  取last_name的值 返回10位,如果不够长 左边用*补齐
rpad(last_name,10,'*');  取last_name的值 返回10位,如果不够长 右边用*补齐




replace('abcdxd','d','m') 把字符串中 所有的d 替换为 m


trim( 'o' from 'ohelloworldo');  去掉字符串首尾的o字符 。




数字函数: 
四舍五入 :指定保留小数 
round(345.36,1) 指定保留小数 1位  ,round(345.36)  默认不保留小数, round(345.36,-1) 四舍五入保留到十位;


截断到某个位置 不进行四舍五入
trunc(345.36,1) 截断到小数点下一位   trunc(345.36) 截断到个数   trunc(345.36,-1) 截断到十位 


取余数
mod(1000,300); 取余数  100




日期函数:


包含 日期 和 时间  
日期函数 只能做加减 不能做乘除 !!


两个日期相减, 返回日期之间相差的天数 。


select sysdate from dual; 返回当前日期+时间


select sysdate-hire_date as days from  employees  计算到目前为止  入职的天数。


months_between(sysdate,hire_date); 两个日期之间相差的月份。


add_months(sysdate,2);当前日期+ 2个月。


add_months(sysdate,-2); 当前日期 往前推俩月。


next_day(sysdate,'星期日'); 从当前日期算,下一个星期日。


last_day(sysdate) 每月的最后一天。


round(sysdate,'month');对日期进行 四舍五入 到月份


trunc(sysdate,'HH'); 对日期进行截断 截断到 小时




转换函数 :


隐式转换 <oracle数据库 自动转换> 显示转换
varchar2  char 转换为 number 。


varchar2  char 转换为 date 。


date和 varchar2 相互转换


number 和 varchar2 相互转化




显示转换 :日期和 字符 之间的转换 
to_char(sysdate,'yyyy-mm-dd'); 日期转换为 字符  


to_char(sysdate,'yyyy"年"-mm"月"-dd"日"'); 日期转换为 字符   后面 格式如果带字符 需要用 "" 括起来   

-----当前系统时间

select to_char(sysdate,'yyyy-MM-dd hh24:mi:ss') from dual;


to_date('1994-06-07','yyyy-mm-dd'); 把字符串 转换成 指定格式的 date类型 


显示转换 :number 和 字符 之间的转换 
number 转换为字符 :
to_char(12366.45,'999,999,999.99');   


to_char(12366.45,'000,000,000.00');   后面 000,000,或者 999,999,均为要转换的格式 ,如果是000,则 前面位数不够补0。


to_char(12366.45,'$999,999,999.99'); 转换为美元


to_char(12366.45,'L999,999,999.99'); 当地的货币符号


字符串 转换为 number:


to_number('$12,234,233.34','$999,999,999.99');  字符串 转换为具体数字 12234233.34  即可进行相应的数学运算


to_number('¥12,234,233.34','L999,999,999.99'); 




通用函数: 适用于任何类型,包括空值
NVL(expr1,expr2) 如果  expr1为空 则用expr2代替, 如果 expr1不为空 则返回expr1  


oracle中 空值做数学运算 还是为空值,  
select last_name  salary*12*(1+nvl(commission_pct,0)) from employees; 
commission_pct字段  会存在空值 防止计算无结果, 用nvl处理 如果是空值 用0代替。




NVL2(expr1,expr2,expr3) 如果 expr1 不为空 返回 expr2 为空 则返回 expr3


NULLIF()  :NULLIF(expr1,expr2)相等返回null  不等 返回expr1


case 表达式 case when then  else  end  可以加别名


select salary ,department_id , case 列名  when  条件  then  处理   when  条件  then  处理 else 处理... end 结束  as "别名"  


from  employees where department_id in (10, 20);




例子:
select last_name,department_id,case department_id
when 10 then department_id+1
when 20 then department_id+2
else  department_id+3 
end as "NewD"
from employees where department_id in (10,20,30)


decode 表达式  decode(department_id,10,department_id+1,
20,department_id+2,
department_id+3) as newD

例子:
select last_name,department_id,decode(department_id,
10,department_id+1,
20,department_id+2,
department_id+3) as "NewD"
from employees where department_id in (10,20,30)






select last_name ,job_id, decode(job_id,'AD_PRES','A',
                                        'IT_PROG','B')
                                        as "GRade"
from employees where job_id in ('AD_PRES','IT_PROG')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值