#SQL 语言包括的内容
- DDL,数据库定义语言:定义关系模式、删除关系、建立索引以及修改关系模式。
- DML,数据库操纵语言:查询(select)、插入(insert)、删除(delete)与修改(update)。
- 嵌入式 DML。嵌入在 Pascal、C 等宿主语言中。
- 视图定义。
- 权限管理。(grant、revoke、deny等)。
- 完整性约束。
- 事务控制。(commit、rollback、savepoint)。
#数据库提交事务的几种情况
- 一条显式的COMMIT或者Rollback命令
- 一条DDL或者DCL语句
- 非正常退出sql plus,或者使用exit或quit退出sql plus
- 系统崩溃
后三条为隐式提交。
#SQL 语句
#建表
|
|
完整性约束条件:
- 非空,
not null
。 - 主键,
primary key
。 - 参照完整性约束(外键),
foreign key
。 - 唯一性约束,
unique
。 - 检查约束,
check
。
|
|
#修改表
#删除基本表
|
|
- TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
- DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
- TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
- 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
- TRUNCATE TABLE 不能用于参与了索引视图的表。
- 对用TRUNCATE TABLE删除数据的表上增加数据时,要使用UPDATE STATISTICS来维护索引信息。
- 如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销。
#修改基本表
|
|
#插入数据
|
|
#更新数据
|
|
#查询
|
|
相关子查询和不相关子查询:
-
不相关子查询。子查询的查询条件不依赖于父查询。
处理方式:由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
-
相关子查询。子查询的查询条件依赖于父查询。
处理方式:首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层表全部检查完为止。
#表间数据转换
|
|
#SQL 函数
#字符函数
-
LOWER(列名|表达式):将大写或大小写混合的字符转换成小写
-
UPPER(列名|表达式) :将小写或大小写混合的字符转换成大写
-
INITCAP(列名|表达式) :将每个单词的第一个字母转换成大写,其余的字母都转换成小写
-
CONCAT:连接两个值,等同于 ||
格式:CONCAT(column1|expression1,column2|expression2)
-
SUBSTR:返回第一个参数中从 n1 字符开始长度为 n2 的子串,如果 n1 是负值,表示从后向前数的 abs(n1) 位,如果 n2 省略,取 n1 之后的所有字符
格式:SUBSTR(column | expression,n1[,n2])
-
LENGTH:取字符长度
格式:LENGTH(column | expression)
-
INSTR:返回 s1 中,子串 s2 从 n1 开始,第 n2 次出现的位置。n1,n2 默认值为 1
格式:INSTR(s1,s2,[,n1],[n2])
-
LPAD:返回 s1 被 s2 从左面填充到 n1 长度。
格式:LPAD(s1,n1,s2)
-
RPAD:返回 s1 被 s2 从右面填充到 n1 长度。
格式:RPAD(s1,n1,s2)
-
REPLACE:把 s1 中的 s2 用 s3 替换。
格式:REPLACE(s1,s2,s3)
#日期函数
-
SYSDATE():返回系统日期
-
MONTHS_BETWEEN(date1,date2):返回两个日期间隔的月数
-
ADD_MONTHS(date1,n):在指定日期基础上加上相应的月数
-
NEXT_DAY():返回某一日期的下一个指定日期,例如:NEXT_DAY('02-2月-06','星期一')
-
LAST_DAY:返回指定日期当月最后一天的日期,例如:LAST_DAY('02-2月-2006')
-
ROUND(date[,'fmt'])将 date 按照 fmt 指定的格式进行四舍五入,fmt 为可选项,如果没有指定 fmt,则默认为 ‘DD’,将 date 四舍五入为最近的天。
格式码:世纪 CC,年 YY,月 MM,日 DD,小时 HH24,分 MI,秒 S 例如:ROUND(hire_date, 'MONTH')
-
TRUNC(date[,'fmt'])将 date 按照 fmt 指定的格式进行截取,fmt 为可选项,如果没有指定 fmt,则默认为 ‘DD’,将 date 截取为最近的天。TRUNC(hire_date, 'MONTH')
-
EXTRACT:返回从日期类型中取出指定年、月、日,例如:EXTRACT (MONTH FROM HIRE_DATE)
#数字函数
- ROUND(列名|表达式, n):将列或表达式所表示的数值四舍五入到小数点后的第 n 位。
- TRUNC(列名|表达式,n):将列或表达式所表示的数值截取到小数点后的第 n 位。
- MOD(m,n):取 m 除以 n 后得到的余数。
#转换函数
- TO_CHAR,TO_CHAR(date|number [,‘fmt’])把日期类型/数字类型的表达式或列转换为字符类型
- TO_NUMBER(char[,’fmt’]) 把字符类型列或表达式转换为数字类型。使用格式和 TO_CHAR 中转换成字符类型中的格式相同
- TO_DATE(char[,‘fmt’]) 把字符类型列或表达式转换为日期类型。格式和 TO_CHAR 中转换成字符类型中的格式相同。
#数字格式
- 9:一位数字;
- 0:一位数字或前导零;
- $:显示为美元符号;
- L:显示按照区域设置的本地货币符号;
- .:小数点;
- ,:千位分割符;
#日期格式
- YYYY:4 位数字表示年份;
- YY:2 位数字表示年份,但是无世纪转换;
- RR:2 位数字表示年份,有世纪转换;
- YEAR:年份的英文拼写;
- MM:两位数字表示月份;
- MONTH:月份英文拼写;
- DY:星期的英文前三位字母;
- DAY:星期的英文拼写;
- D:数字表示一星期的第几天,星期天是一周的第一天。
- DD:数字表示一个月中的第几天;
- DDD:数字表示一年中的第几天。
- AM 或PM:上下午表示;
- HH 或HH12或HH24:数字表示小时。HH12 代表 12 小时计时,HH24 代表 24 小时计时;
- MI:数字表示分钟;
- SS:数字表示秒;