Oracle的学习记录
SQL初步
SQL语句分为以下三种类型:
DML
: Data Manipulation Language 数据操纵语言DDL
: Data Definition Language 数据定义语言DCL
: Data Control Language 数据控制语言
DML
DML用于查询与修改数据记录,包括如下SQL语句:
INSERT
:添加数据到数据库中UPDATE
:修改数据库中的数据DELETE
:删除数据库中的数据SELECT
:选择(查询)数据
SELECT是SQL语言的基础,最为重要。
DDL
DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
CREATE TABLE
:创建数据库表ALTER TABLE
:更改表结构、添加、删除、修改列长度DROP TABLE
:删除表CREATE INDEX
:在表上建立索引DROP INDEX
:删除索引
DCL
DCL用来控制数据库的访问,包括如下SQL语句:
GRANT
:授予访问权限REVOKE
:撤销访问权限COMMIT
:提交事务处理ROLLBACK
:事务处理回退SAVEPOINT
:设置保存点LOCK
:对数据库的特定部分进行锁定
查询
定义空值
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0
包含空值的数学表达式的值都为空值
列的别名
列的别名:
重命名一个列。
紧跟列名,也可以在列名和别名之间加入关键字‘AS
’,别名使用双引号
,以便在别名中包含空格或特殊的字符并区分大小写。
连接符
连接符:
把列与列,列与字符连接在一起。
用 ‘||’表示。
可以用来‘合成’列。
字符串
删除重复行
SQL 语句与 SQL*Plus 命令
SQL*Plus
描述表结构。
编辑 SQL 语句。
执行 SQL语句。
将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
在保存的文件中执行语句。
将文本文件装入 SQL*Plus编辑窗口。
显示表结构
使用 DESCRIBE
命令,表示表结构
describle employee -- describle 表名
过滤
字符和日期
比较运算
LIKE
ESCAPE
NULL
使用 IS (NOT) NULL
判断空值。
逻辑运算
AND 要求并的关系为真。
OR 要求或关系为真。
ORDER BY子句
单行函数
大小写控制
字符控制
函数SYSDATE 返回:
日期
时间
日期的数学运算
在日期上加上或减去一个数字结果仍为日期。
两个日期相减返回日期
之间相差的天数。
日期不允许做加法运算,无意义
可以用数字除24来向日期中加上或减去天数。
日期函数
隐式数据类型转换
Oracle 自动完成下列转换:
显示数据类型转换
TO_CHAR函数对日期的转换
日期格式的元素
TO_DATE 函数对字符的转换
TO_CHAR 函数中经常使用的几种格式:
TO_NUMBER 函数对字符的转换
通用函数
函数适用于任何数据类型,同时也适用于空值:
NVL 函数
将空值转换成一个已知的值:
使用 NVL2 函数
使用 NULLIF 函数
使用 COALESCE 函数
COALESCE
与NVL
相比的优点在于COALESCE
可以同时处理交替的多个值。- 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行
COALESCE
。
条件表达式
在 SQL 语句中使用IF-THEN-ELSE
逻辑
使用两种方法:
CASE
表达式DECODE
函数
CASE 表达式
使用case表达式
DECODE 函数
在需要使用 IF-THEN-ELSE
逻辑时:
多表查询
笛卡尔集
笛卡尔集会在下面条件下产生:
- 省略连接条件
- 连接条件无效
- 所有表中的所有行互相连接
为了避免笛卡尔集, 可以在WHERE
加入有效
的连接条件。
连接多个表
连接 n个表
,至少需要 n-1个连接条件
。 例如:连接三个表,至少需要两个连接条件。
内连接和外连接
- 内连接: 合并具有同一列的两个以上的表的行,
结果集中不包含一个表与另一个表不匹配的行
- 外连接: 两个表在连接过程中除了返回满足连接条件的行以外
还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接
。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).
外连接语法
自连接
叉 集
自然连接
使用 USING 子句创建连接
使用ON 子句创建连接
满 外连接
在SQL: 1999中,内连接只返回满足连接条件的数据
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外连接。
两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外连接
。
左外连接
右外连接
分组函数
分组函数作用于一组数据,并对一组数据返回一个值。
分组函数类型
AVG
COUNT
MAX
MIN
STDDEV
SUM
函数语法
在组函数中使用NVL函数
NVL函数使分组函数无法忽略空值。
DISTINCT 关键字
GROUP BY
在SELECT 列表
中所有未包含在
组函数中的列都应该包含
在 GROUP BY 子句
中。
包含在 GROUP BY 子句
中的列不必包含在SELECT 列表
中
在GROUP BY子句中包含多个列
HAVING 子句
子查询
语法
注意
子查询要包含在括号内。
将子查询放在比较条件的右侧
- 单行操作符对应单行子查询,多行操作符对应多行子查询。
类型
单行子查询
子查询中的 HAVING 子句
子查询中的空值问题
多行子查询
返回多行。
使用多行比较操作符。
在多行子查询中使用 ANY 操作符
在多行子查询中使用 ALL 操作符
子查询中的空值问题
在查询时基于未知的值时,应使用子查询。
常见的数据库对象
Oracle 数据库中的表
- 用户定义的表:
– 用户自己创建并维护的一组表
– 包含了用户所需的信息
如:SELECT * FROM user_tables;
查看用户创建的表 - 数据字典:
– 由 Oracle Server 自动创建的一组表
– 包含数据库信息
命名规则
表名和列名:
- 必须
以字母开头
- 必须在 1–30 个字符之间
- 必须只能包含 A–Z, a–z, 0–9, _, $, 和
#
- 必须不能和用户定义的其他对象重名
- 必须不能是Oracle 的保留字
CREATE TABLE 语句
数据类型
使用子查询创建表
子查询创建表实例
alter table语句
使用alter table
可以
- 追加新的列
- 修改现有的列
- 为新追加的列定义默认值
- 删除一个列
- 重命名表的一个列名
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法
追加一个新列
修改一个列
删除一个列
重命名一个列
删除表
清空表
改变对象的名称
DDL命令不可回滚
DDL语句创建, 修改, 删除, 和重命名表.