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"日"'); 日期转换为 字符 后面 格式如果带字符 需要用 "" 括起来
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()
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')
---------------------------------------------------------------
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"日"'); 日期转换为 字符 后面 格式如果带字符 需要用 "" 括起来
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()
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')
---------------------------------------------------------------