Oracle数据库-02
一.Oracle基础语法
1.Select语句
作用:查询数据
语法:select 查询的列1,列2,,, from 表名;
注意:
尽量避免使用(*)进行测试。
在实践中,即使想要从表的所有列中检索数据,也应该明确指定要从中查询数据的列。
这是因为业务变化,表格未来可能会有更多或更少的列。
如果在应用程序代码中使用星号(*),并假定该表有一组固定的列,但应用程序可能不处理其他不相关的列或访问已删除的列。
2.Order By子句
作用:用来对一列或多列的结果集按照升序或者降序进行排序
语法:
SELECT
column_1,
column_2,
column_3,
...
FROM
table_name
ORDER BY
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
ASC:升序(默认) DESC:降序
NULLS FIRST在非NULL值之前放置NULL值,
NULLS LAST在非NULL值之后放置NULL值。
注意:order by子句一定是select 语句中的最后一个子句
3.Distinct子句
作用:过滤结果集的重复行,确保select子句中返回值指定的一列或者多列的值是唯一的
语法:
SELECT DISTINCT
column_1
FROM
table_name;
注意:
在Oracle中DISTINCT和UNIQUE没有区别,二者为同义词,DISTINCT遵循ANSI标准,UNIQUE是Oracle特定的用法,从移植角度考虑,使用遵循ANSI标准的DISTINCT是一个更好的选择。
4.Where子句
条件查询子句
SELECT
column_1,
column_2,
...
FROM
table_name
WHERE
search_condition
ORDER BY
column_1,
column_2;
5.And子句
逻辑运符,可以用来组合两个或者更多的布尔表达式
两个表达式都为真,返回true
expression_1 AND expression_2
6.Or子句
逻辑运符,可以用来组合两个或者更多的布尔表达式
一个表达式为真,返回true
expression_1 OR expression_2
7.Fetch子句
限制查询返回的行数
语法:
[ OFFSET offset ROWS]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
Offset子句:
指定在行限制开始之前要跳过行数,该子句是可选的。
如果跳过它,则偏移量为 0,行限制从第一行开始计算。
偏移量必须是一个数字或一个表达式,其值为一个数字。偏移量遵守以下规则:
如果偏移量是负值,则将其视为 0。
如果偏移量为 NULL 或大于查询返回的行数,则不返回任何行。
如果偏移量包含一个分数,则分数部分被截断。
fetch子句:
指定要返回的行数或百分比
fetch next 1 rows
fetch first 1 row
7.1 ONLY | WITH TIES 选项
仅返回 FETCH NEXT (或 FIRST) 后的行数或行数的百分比。
WITH TIES 返回与最后一行相同的排序键。
注意:
如果使用 WITH TIES,则必须在查询中指定一个 ORDER BY 子句。如果不这样做,查询将不会返回额外的行。
例子:查询前五条
SELECT 列 FROM 表 FETCH NEXT 5 ROWS ONLY;
7.2 with TIES
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 10 ROWS WITH TIES;
返回了12条数据,最后两条数据的quantity与第十条的quantity值相同
7.3 百分比
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH FIRST 1 PERCENT ROWS ONLY;
7.4 offset
跳过库存量最高的前 10 个产品,并返回接下来的 10 个产品:
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
8.In子句
用来确定值是否与列表或子查询中的任何值相匹配。
语法:
确认是否与值匹配:expression [NOT] IN (v1,v2,...)
表达式的语法与子查询匹配:expression [NOT] IN (subquery)
参数:
expression - 该表达式(expression)是任何有效的表达式,它可以是要匹配的表的列。
v1, v2, v3.. - IN 运算符后面是逗号分隔值列表,用于测试匹配。所有值必须与表达式具有相同的数据类型。
subquery - 子查询返回一列的结果集以测试匹配。该列还必须具有与表达式相同的数据类型。
返回值:
如果表达式(expression)的值等于值列表中的任何值或由子查询返回的结果集,则 IN 运算符返回 true。 否则,它返回 false。
NOT 运算符否定 IN 运算符的结果。
9.Between子句
用来在Oracle中选择值在一个范围内的行数据
允许指定要测试的范围。当使用BETWEEN运算符为SELECT语句返回的行形成搜索条件时,只返回其值在指定范围内的行。
语法:
expression [ NOT ] BETWEEN low AND high
说明:
low 和high - low和hight指定要测试的范围的下限值和上限值。low和hight值可以是文字或表达式。
expression - 是low和hight定义的范围内测试的表达式。 为了能够比较,expression,low和hight的数据类型必须是相同的。
AND - AND运算符充当占位符来分隔low和hight的值。
如果表达式(expression)的值大于或等于low的值,小于或等于hight的值,则BETWEEN运算符返回true。(value >= low AND value <= high)
NOT BETWEEN运算符否定BETWEEN运算符的结果。
10.Like子句
用来测试列中的值是否与指定的模式匹配。
语法:
expresion [NOT] LIKE pattern [ ESCAPE escape_characters ]
说明:
expression:该表达式是一个列名称或一个表达式,要针对该模式 (pattern) 进行测试。
pattern:该模式是在表达式中搜索的字符串。此模式包含以下通配符:
%(百分号)匹配零个或多个字符的任何字符串。
_(下划线)匹配任何单个字符。
escape_character:escape_character 是出现在通配符前面的字符,用于指定通配符不应被解释为通配符而是常规字符。
escape_character (如果指定)必须是一个字符,并且没有默认值。
如果表达式匹配模式,LIKE 运算符返回 true。 否则,它返回 false。
NOT 运算符(如果指定)可以否定 LIKE 运算符的结果。
注意:
upper():大写函数
Lower():小写
二、Oracle事务
1.Commit语句(提交事务)
语法:
COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ];
参数:
WORK:可选的。它被 Oracle 添加为符合 SQL 标准。使用或不使用 WORK 参数来执行 COMMIT 将产生相同的结果。
COMMENT clause:可选的。 它用于指定与当前事务关联的注释。 该注释最多可以包含在单引号中的 255 个字节的文本中。 如果出现问题,它将与事务ID一起存储在名为 DBA_2PC_PENDING 的系统视图中。
WRITE clause:可选的。 它用于指定将已提交事务的重做信息写入重做日志的优先级。 用这个子句,有两个参数可以指定:
WAIT 或 NOWAIT (如果省略,WAIT是默认值)
IMMEDIATE 或 BATCH(IMMEDIATE是省略时的默认值)
FORCE clause:可选的。 它用于强制提交可能已损坏或有疑问的事务。 有了这个子句,可以用3种方式指定FORCE:
FORCE'string',[integer]或FORCE CORRUPT_XID'string' 或 FORCE CORRUPT_XID_ALL
注意:
必须拥有 DBA 权限才能访问系统视图 - DBA_2PC_PENDING和V$CORRUPT_XID_LIST。
必须拥有 DBA 权限才能指定COMMIT语句的某些功能。
2.ROLLBACK语句(回滚事务)
语法:
ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name | FORCE 'string' ];
参数:
WORK:可选的。 它被 Oracle 添加为符合 SQL 标准。 使用或不使用 WORK 参数来发出 ROLLBACK 会导致相同的结果。
TO SAVEPOINT savepoint_name:可选的。 ROLLBACK语句撤消当前会话的所有更改,直到由 savepoint_name 指定的保存点。 如果省略该子句,则所有更改都将被撤消。
FORCE‘string’:可选的。它用于强制回滚可能已损坏或有问题的事务。 使用此子句,可以将单引号中的事务ID指定为字符串。 可以在系统视图中找到名为 DBA_2PC_PENDING 的事务标识。
必须拥有 DBA 权限才能访问系统视图:DBA_2PC_PENDING 和 V$CORRUPT_XID_LIST。
您无法将有问题的事务回滚到保存点。
3.SET TRANSACTION语句(设置事务)
设置事务的各种状态(只读、读写隔离级别),为事务分配名称或者将事务分配回滚段等。
语法:
SET TRANSACTION [ READ ONLY | READ WRITE ]
[ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
[ USE ROLLBACK SEGMENT 'segment_name' ]
[ NAME 'transaction_name' ];
参数:
● READ ONLY:可以将事务设置为只读事务。
● READ WRITE:可以将事务设置为读/写事务。
● ISOLATION LEVEL: 如果指定,它有两个选项:
1.ISOLATION LEVEL SERIALIZE:如果事务尝试更新由另一个事务更新并未提交的资源,则事务将失败。
2.ISOLATION LEVEL READ COMMITTED:如果事务需要另一个事务持有的行锁,则事务将等待,直到行锁被释放。
● USE ROLLBACK SEGMENT:可选的。 如果指定,它将事务分配给由 'segment_name' 标识的回退段,该段是用引号括起来的段名称。
● NAME:为 'transaction_name' 标识的事务分配一个名称,该事务用引号括起来。
4.LOCK TABLE语句(锁表)
用来锁定表、表分区或表子分区。
语法:
LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];
参数:
tables:用逗号分隔的表格列表。
lock_mode:见表
WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取 DML 锁定。
NOWAIT:它指定数据库不应该等待释放锁。
lock_mode |
描述 |
ROW SHARE |
允许同时访问表,但阻止用户锁定整个表以进行独占访问。 |
ROW EXCLUSIVE |
允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。 |
SHARE UPDATE |
允许同时访问表,但阻止用户锁定整个表以进行独占访问。 |
SHARE |
允许并发查询,但用户无法更新锁定的表。 |
SHARE ROW EXCLUSIVE |
用户可以查看表中的记录,但是无法更新表或锁定SHARE 表中的表。 |
EXCLUSIVE |
允许查询锁定的表格,但不能进行其他活动。 |
三、Oracle外键
1.外键创建
外键是强制实施参照完整性的一种方式,使用外键就意味着一个表中的值在另一表中也必须出现。
被引用的表成为父表,带有外键的表称为子表。子表中的外键通常会引用父表中的主键。
1.1使用create table语句创建
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
1.2使用alter table语句创建
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n);
2.级联删除外键
级联删除:当主表中的一条记录被删除,那么子表中所关联的记录也相应的自动删除。
2.1使用create table定义级联删除
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE
);
2.2使用alter table定义级联删除
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE;
3.怎么删除外键
语法:
alter table "表名" drop constraint "主键名"
alter table "表名" drop primary key
4.禁用外键
语法:
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
5.启用外键
语法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
四、字符串函数
1.AscII()函数
https://www.w3cschool.cn/oraclejc/oraclejc-16hq2r6l.html