数据库(Oracle)
SQL 支持下列类别的命令:
1.数据定义语言(DDL)
2.数据操纵语言(DML)
3.事务控制语言(TCL)4.数据控制语言(DCL)
Oracle 数据类型的类别
数据类型:字符,数值,日期时间,RAW/LONG RAW
,LOB
1.字符数据类型
1.1 char :
当需要固定长度的字符串时,使用 CHAR 数据类型
CHAR 数据类型存储字母数字值
CHAR 数据类型的列长度可以是 1 到 2000 个字节
1.2 varchar2:
VARCHAR2数据类型支持可变长度字符串
VARCHAR2数据类型存储字母数字值
VARCHAR2数据类型的大小在1至4000个字节范围内
1.3 long:
LONG 数据类型存储可变长度字符数据
LONG 数据类型最多能存储 2GB
2.数值数据类型
可以存储整数、浮点数和实数
最高精度为 38 位
声明语法:
number(p,s)
P表示精度,S表示小数点的位数
3.日期时间数据类型
存储日期和时间值,包括年、月、日,小时、分钟、秒
主要的日期时间类型有:
1.DATE - 存储日期和时间部分,精确到整个的秒
2.TIMESTAMP - 存储日期、时间和时区信息,秒值精确到小数点后6位4.RAW/LONG RAW
4.RAW
RAW 数据类型用于存储二进制数据
RAW 数据类型最多能存储 2000 字节
LONG RAW 数据类型用于存储可变长度的二进制数据LONG RAW 数据类型最多能存储 2 GB
5.LOB
LOB 称为“大对象”数据类型,可以存储多达 4GB 的非结构化信息,例如声音剪辑和视频文件等
LOB 数据类型允许对数据进行高效、随机、分段的访问
LOB又分为 :CLOB,BLOB,BFILE
伪列
Oracle 中伪列就像一个表列,但是它并没有存储在表中伪列可以从表中查询,但不能插入、更新和删除它们的值
常用的伪列有ROWID和ROWNUM
ROWID: 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行
ROWNUM:是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数
注意
1.选择无重复的行
在SELECT子句,使用DISTINCT关键字
例子:
SELECT DISTINCT vencode FROM vendor_master;
2.插入日期类型的值
日期数据类型的默认格式为“DD-MON-RR”
使用日期的默认格式
使用TO_DATE函数转换
例子:
INSERT INTO order_master
VALUES('o001', '12-5月-05', 'V002', 'c', '25-5月-05');
INSERT INTO my_table (date_col)
VALUES (TO_DATE('2005-10-18', 'YYYY-MM-DD'));
利用现有的表创建表
语法: CREATE TABLE <new_table_name> AS
SELECT column_names FROM <old_table_name>;
例子:
CREATE TABLE newitemfile
AS SELECT * FROM itemfile;
只创建与旧表相同的字段,内容不复制
CREATE TABLE newitemfile2
AS SELECT * FROM itemfile
WHERE 1 = 2;
事务控制语言
COMMIT - 提交并结束事务处理
ROLLBACK - 撤销事务中已完成的工作
SAVEPOINT – 标记事务中可以回滚的点
例子:
UPDATE order_master SET del_date = ‘30-8月-05’
WHERE orderno <= ’o002’;
SAVEPOINT mark1;
DELETE FROM order_master WHERE orderno = ‘o002’;
SAVEPOINT mark2;
ROLLBACK TO SAVEPOINT mark1;
COMMIT;
结果:只执行修改操作
数据控制语言
用于权限控制的命令有:
GRANT 授予权限
REVOKE 撤销已授予的权限
例子:
授予权限:
GRANT SELECT ON vendor_master
TO accounts WITH GRANT OPTION;
撤销权限:
REVOKE SELECT, UPDATE ON order_master
FROM MARTIN;
集合操作符
连接操作符
连接操作符用于将多个字符串或数据值合并成一个字符串, ||
转换函数
转换函数将值从一种数据类型转换为另一种数据类型
常用的转换函数有:
1.TO_CHAR(转换字符串类型)
2.TO_DATE(转换为时间类型)
3.TO_NUMBER(转换数字类型)
例子:
select to_char(100) from dual;
SELECT TO_DATE(‘2005-12-06’ , ‘yyyy-mm-dd’)
FROM dual;
SELECT TO_NUMBER(‘100’) FROM duall;
其它函数
以下是几个用来转换空值的函数:
1.NVL
语法:NVL(re_level,re_leve2)
如果re_level是null值,则返回re_leve2,否则返回re_level
2.NVL2
语法:NVL2(re_level,re_leve2,re_leve3)
re_level如果是不是null值,则返回re_leve2,是null值时,返回re_leve3
3.NULLIF
例子:
SELECT itemdesc, NVL(re_level,re_leve2) FROM itemfile;
结果:将null值转换为re_leve2;
SELECT itemdesc, NVL2(re_level,re_leve2,re_leve3)
FROM itemfile;
结果:re_level如果是不是null值,则返回re_leve2,是null值时,返回re_leve3;
### 分组函数
分组函数:AVG,MIN,MAX,SUM,COUNT
注意:count(1)要比count(*)效率高,建议使用count(1).
GROUP BY和HAVING子句
GROUP BY 子句
1.
用于将信息划分为更小的组
2.每一组行返回针对该组的单个结果
HAVING子句用于指定 GROUP BY 子句检索行的条件
分析函数
1.分析函数根据一组行来计算聚合值
2.用于计算完成聚集的累计排名、移动平均数等3.分析函数为每组记录返回多个行
分析函数:row_number , rank ,dense_rank
区别:
以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始
1.ROW_NUMBER 返回连续的排位,不论值是否相等2.RANK 具有相等值的行排位相同,序数随后跳跃
3.DENSE_RANK 具有相等值的行排位相同,序号是连续的