SQL的全称是Structured Query Language(结构化查询语言)
SQL是数据库语言,Oracle使用该语言存储和检索数据,表是数据库的主要对象,用于存储数据。
1.SQL类别
- 数据定义语言(DDL)
- 数据操纵语言(DML)
- 事务控制语言(TCL)
- 数据控制语言(DCL)
类别 | 形式 | 描述 |
DDL | CREATE | 创建 |
ALTER | 修改 | |
DROP | 删除 | |
DML | INSERT | 插入 |
UPDATE | 修改 | |
DELETE | 删除 | |
SELECT | 查询 | |
TCL | COMMIT | 提交 |
SAVEPOINT | 设置保存点 | |
ROLLBACK | 回滚 | |
DCL | GRANT | 授予权限 |
REVOKE | 收回权限 |
2.Oracle 常见的数据类型
2.1 字符串数据类型
2.1.1 CHAR类型
- 当需要固定长度的字符串时,使用CHAR数据类型
- CHAR数据类型存储字母数字值
- CHAR数据类型的列长度可以是1到2000个字节
2.1.2 VARCHAR2类型
- VARCHAR2数据类型支持可变长度字符串
- VARCHAR2数据类型存储字母数字值
- VARCHAR2数据类型的列长度可以是1到4000个字节范围内
2.1.3 LONG类型
- LONG数据类型存储可变长度字符数据
- LONG数据类型最多存储2GB
2.2 数值数据类型
可以存储整数、浮点数和实数。最高精度38位,范围:负的10的38次方到10的38次方
语法格式:
NUMBER(p,[a])
:p表示精度,s表示小数点后的位数
2.3 日期时间类型
日期时间类型可以存储日期和时间值,包括:年、月、日、时、分、秒
主要的类型有以下两个:
- DATE:存储日期和时间部分,精确到整个秒
- TIMESTAMP:存储日期、时间、时区信息,秒精确到小数点后6位
2.4 RAW、LONG RAW类型
- RAW 数据类型用于存储二进制数据
- RAW 数据类型最多能存储 2000 字节
- LONG RAW 数据类型用于存储可变长度的二进制数据
- LONG RAW 数据类型最多能存储 2 GB
2.5 LOB类型
- LOB 称为“大对象”数据类型,可以存储多达 128TB 的非结构化信息,例如声音剪辑和视频文件等(LOB类型的容量从原来的4G增加到了最大128T)
- LOB 数据类型允许对数据进行高效、随机、分段的访问
3.伪列
Oracle 中伪列就像一个表列,但是它并没有存储在表中。伪列可以从表中查询,但不能插入、更新和删除它们的值。
常用的伪列有ROWID和ROWNUM:
- ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行
- ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数
4.利用现有的表创建表
以下SQL只会复制表数据和表结构,不会复制索引、主键等约束信息
-- 复制表与数据
create table t1 as select * from dept;
-- 复制部分字段
create table t2 as select deptno from dept;
-- 复制表结构
create table t3 as select * from dept where 1=2;
5.字段别名
SQL> select deptno as 部门编号,dname as "名 称" from dept;
部门编号 名 称
---------- --------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
从上述案例中可以看到:当别名中存在空格的时候,需要使用双引号,并且AS在语法中可以省略。
6.插入来自其他表的数据
-- 前提:tt的表结构与emp一致
insert into tt select * from emp;
7.SQL操作符
Oracle 支持的 SQL 操作符分类如下:
7.1 算术操作符
- 算术操作符用于执行数值计算
- 可以在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、数值常量和连接它们的算术操作符组成
- 算术操作符包括加(+)、减(-)、乘(*)、除(/)
7.2 比较操作符
- 比较操作符用于比较两个表达式的值
- 比较操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等,LIKE可以使用匹配符_、%
7.3 逻辑操作符
- 逻辑操作符用于组合多个计较运算的结果以生成一个或真或假的结果。
- 逻辑操作符包括与(AND)、或(OR)和非(NOT)。
7.4 连接操作符
连接操作符用于将多个字符串或数据值合并成一个字符串
select '我是'||ename as text from emp;
- 操作符的优先级
SQL 操作符的优先级从高到低的顺序是:
算术操作符 --------最高优先级
连接操作符
比较操作符
NOT 逻辑操作符
AND 逻辑操作符
OR 逻辑操作符 --------最低优先级
8.Oracle函数
Oracle 提供一系列用于执行特定操作的函数,SQL 函数带有一个或多个参数并返回一个值。
以下是SQL函数的分类:
8.1 单行函数
单行函数对于从表中查询的每一行只返回一个值,可以出现在 SELECT 子句中和 WHERE 子句中
单行函数可以大致划分为:
- 字符函数
- 日期时间函数
- 数字函数
- 转换函数
- 混合函数
-
常见的字符函数
其他的字符函数
CHR和ASCII
LPAD和RPAD
TRIM
LENGTH
DECODE -
常见的日期函数
ADD_MONTHS
MONTHS_BETWEEN
LAST_DAY
ROUND
NEXT_DAY
TRUNC
EXTRACT -
数字函数
-
转换函数
TO_CHAR
TO_DATE
TO_NUMBER -
混合函数
NVL,第一为空返回二;否则返回一。
NVL2,第一个不空则返回二;否则返回三。
NULLIF,两个表达式,相等则返回空;否则第一个 -
分组函数
-
9.集合操作符
集合操作符将两个查询的结果组合成一个结果
union:合并(去重复)
union all:合并(不去重复)
MINUS:操作符返回从第一个查询结果中排除第二个查询中出现的行
INTERSECT:操作符只返回两个查询的公共行。
10.重命名
-- 重命名表
rename old_name to new_name;
-- 重命名列
alter table table_name rename column col_oldName to col_newName ;
11.其他语句
-- 清空表
truncate table table_name;
1.修改表的字段:
修改一个列的数据类型(一般限于修改长度,修改为一个不同类型时有诸多限制):
语法: ALTER TABLE 表名 MODIFY(列名 数据类型);
eg1: alter table skate_test modify (author number(10,0) );
在修改列的长度时,只能改为比现有字段实际存的长度还要大,否则提示下面错误:
ORA-01441: 无法减小列长度, 因为一些值过大
eg2: alter table skate_test modify (author varchar2(10) )
在修改列的数据类型的时候,所修改的列必须为空,否则提示下面的错误:
ORA-01439: 要更改数据类型, 则要修改的列必须为空
2.增加一个列:
语法: ALTER TABLE 表名 ADD(列名 数据类型);
eg1: ALTER TABLE skate_test ADD(author NUMBER(38,0) not null);
3.删除一个列:
语法: ALTER TABLE 表名 DROP COLUMN 列名;
eg1: alter table skate_test drop column author;
4.修改表名:
语法: ALTER TABLE 当前表名 RENAME TO 新表名;
eg1: alter table skate_test rename to test_sakte
5.给表加注释:
语法:comment on column 表名.列名 is '注释内容'; //修改表的列的注释
eg1:COMMENT ON column MOVO_NEW.TEST_SAKTE IS '注释内容'; //修改表的注释