跳转到内容

Oracle 数据库/SQL

来自维基教科书,开放世界中的开放书籍

使用 SQL SELECT 语句检索数据

[编辑 | 编辑源代码]

列出 SQL SELECT 语句的功能

[编辑 | 编辑源代码]

选择、投影、连接

执行一个基本的 SELECT 语句

[编辑 | 编辑源代码]
  • 选择所有列
 
Select * from table_name;
  • 选择特定列
 Select column1, column2 from tables_name;
  • 使用列标题默认值
  • 使用算术运算符
 Select 12 salary+100 from emp --sell value is 2.
 Result: 12 * cell's value + 100   --i.e. 12 * 2 + 100= 124
  • 了解运算符优先级
  • 学习 DESCRIBE 命令来显示表结构
 Type- DESCRIBE table_name;  
 *NOTE: Your Oracle user and/or schema must have permissions/privaliages or be within the schema to describe the table.
  You can use the data_dictionary views to get the table info.

限制和排序数据

[编辑 | 编辑源代码]

限制查询检索的行数

[编辑 | 编辑源代码]
  1. 编写包含 WHERE 子句的查询以限制检索的输出
  2. 列出 WHERE 子句中使用的比较运算符和逻辑运算符
  3. 描述比较运算符和逻辑运算符的优先级规则
  4. 在 WHERE 子句中使用字符字符串文字

对查询检索的行进行排序

[编辑 | 编辑源代码]
  1. 编写包含 ORDER BY 子句的查询以对 SELECT 语句的输出进行排序
  2. 以降序和升序排序输出

使用按位与替换在运行时限制和排序输出

[编辑 | 编辑源代码]

按位与运算符用于在运行时获取输入(例如:-&employeename),如果按位与使用两次,即 &&,则它将获取单个按位与运算符的输入,并用于在运行时向查询提供数据。

使用单行函数自定义输出

[编辑 | 编辑源代码]

描述 SQL 中可用的各种函数类型

[编辑 | 编辑源代码]
  • 描述单行函数和多行函数之间的区别

在 SELECT 语句中使用字符、数字和日期函数

[编辑 | 编辑源代码]
  • 使用 SELECT 和 WHERE 子句中的字符函数操纵字符串
  • 使用 ROUND、TRUNC 和 MOD 函数操纵数字
  • 对日期数据执行算术运算
  • 使用日期函数操纵日期

使用转换函数和条件表达式

[编辑 | 编辑源代码]

描述 SQL 中可用的各种转换函数类型

[编辑 | 编辑源代码]

隐式数据类型转换

当 Oracle 尝试将不匹配函数定义的参数的值转换为所需数据类型时,就会发生隐式转换。

显式数据类型转换 显式转换发生在调用 TO_CHAR 等函数以更改值的类型时。

使用 TO_CHAR、TO_NUMBER 和 TO_DATE 转换函数

[编辑 | 编辑源代码]
  • 嵌套多个函数
  • 对数据应用 NVL、NULLIF 和 COALESCE 函数

在 SELECT 语句中应用条件表达式

[编辑 | 编辑源代码]
  • 在 SELECT 语句中使用条件 IF THEN ELSE 逻辑

使用组函数报告聚合数据

[编辑 | 编辑源代码]

识别可用的组函数

[编辑 | 编辑源代码]

描述组函数的使用

[编辑 | 编辑源代码]

使用 GROUP BY 子句对数据进行分组

[编辑 | 编辑源代码]

使用 HAVING 子句包含或排除分组行

[编辑 | 编辑源代码]

从多个表中显示数据

[编辑 | 编辑源代码]

编写 SELECT 语句以使用等值连接和非等值连接从多个表中访问数据

[编辑 | 编辑源代码]

使用自连接将表连接到自身

[编辑 | 编辑源代码]

使用外部连接查看通常不满足连接条件的数据

[编辑 | 编辑源代码]
  1. 使用自连接将表连接到自身

生成来自两个或多个表的全部行的笛卡尔积

[编辑 | 编辑源代码]

使用子查询解决查询问题

[编辑 | 编辑源代码]

定义子查询

[编辑 | 编辑源代码]

描述子查询可以解决的各种问题类型

[编辑 | 编辑源代码]

列出子查询的类型

[编辑 | 编辑源代码]

编写单行和多行子查询

[编辑 | 编辑源代码]

使用集合运算符

[编辑 | 编辑源代码]

描述集合运算符

[编辑 | 编辑源代码]

使用集合运算符将多个查询合并成一个查询

[编辑 | 编辑源代码]

控制返回行的顺序

[编辑 | 编辑源代码]

操作数据

[编辑 | 编辑源代码]

描述每个数据操作语言 (DML) 语句

[编辑 | 编辑源代码]

将行插入表中

[编辑 | 编辑源代码]

在数据库中插入数据是在 Oracle 中通过“insert”命令完成的。

语法

INSERT INTO [table name][column1,column2,.....] values(value1,value2,....);

示例

insert into employee values(1,'Rahul','Manager');

通过上述查询,员工表将通过 empid:-1、empname:-'Rahul' 和 empdesignation:-'Manager' 进行填充。

从表中删除行

[编辑 | 编辑源代码]
DELETE client1 WHERE ID = 2;

更新表中的行

[编辑 | 编辑源代码]

要更新表中的行,请写入

update [table name] set [column name] = [your value];

它将使用给定值在选定字段中更新表中存在的所有行。

我们还可以将查询添加到此命令以使其真正有用,例如,

update [table name] set [column name] = [value] where [column name]>=[value];

您可以根据需要在 where 子句之后添加您的查询。

示例

UPDATE client1 SET address = 'the middle of nowhere' WHERE id = 1;

使用集合运算符将多个查询合并成一个查询

[编辑 | 编辑源代码]

控制返回行的顺序

[编辑 | 编辑源代码]

定义子查询

[编辑 | 编辑源代码]

描述子查询可以解决的各种问题类型

[编辑 | 编辑源代码]

列出子查询的类型

[编辑 | 编辑源代码]

编写单行和多行子查询

[编辑 | 编辑源代码]

控制事务

[编辑 | 编辑源代码]
  1. 使用 COMMIT 和 ROLLBACK 语句保存和放弃更改
  2. 解释读一致性

使用 DDL 语句创建和管理表

[编辑 | 编辑源代码]

对主要数据库对象进行分类

[编辑 | 编辑源代码]

查看表结构

[编辑 | 编辑源代码]

列出可用于列的数据类型

[编辑 | 编辑源代码]

创建一个简单的表

[编辑 | 编辑源代码]

"Create table" 命令用于在数据库中创建表。

语法

create table employee(empid number,empname varchar2(20),empdesignation(varchar2(20)));

以上查询将创建一个名为 employee 的表,该表包含列 empidempnameempdesignation,以及它们各自的数据类型。

描述架构对象的工作原理

[编辑 | 编辑源代码]

创建其他架构对象

[编辑 | 编辑源代码]

创建简单和复杂的视图

[编辑 | 编辑源代码]

从视图中检索数据

[编辑 | 编辑源代码]

创建、维护和使用序列

[编辑 | 编辑源代码]

创建和维护索引

[编辑 | 编辑源代码]

创建私有和公共同义词

[编辑 | 编辑源代码]

控制用户访问

[编辑 | 编辑源代码]

区分系统权限和对象权限

[编辑 | 编辑源代码]

授予表上的权限

[编辑 | 编辑源代码]

查看数据字典中的权限

[编辑 | 编辑源代码]

授予角色

[编辑 | 编辑源代码]

区分权限和角色

[编辑 | 编辑源代码]

使用数据字典视图管理对象

[编辑 | 编辑源代码]

解释数据字典

[编辑 | 编辑源代码]

查找表信息

[编辑 | 编辑源代码]

报告列信息

[编辑 | 编辑源代码]

查看约束信息

[编辑 | 编辑源代码]

查找视图信息

[编辑 | 编辑源代码]

验证序列信息

[编辑 | 编辑源代码]

了解同义词

[编辑 | 编辑源代码]

添加注释

[编辑 | 编辑源代码]

操作大型数据集

[编辑 | 编辑源代码]

使用子查询操作数据

[编辑 | 编辑源代码]

描述多表插入的功能

[编辑 | 编辑源代码]

使用不同类型的多表插入

[编辑 | 编辑源代码]

合并表中的行

[编辑 | 编辑源代码]

跟踪一段时间内数据的变化

[编辑 | 编辑源代码]

管理不同时区的数据

[编辑 | 编辑源代码]

使用类似于 DATE 的数据类型,它们存储小数秒并跟踪时区

[编辑 | 编辑源代码]

使用存储两个日期时间值之间差的数据类型

[编辑 | 编辑源代码]

练习使用多个日期时间函数来全球化应用程序

[编辑 | 编辑源代码]

使用子查询检索数据

[编辑 | 编辑源代码]

编写多列子查询

[编辑 | 编辑源代码]

在 SQL 中使用标量子查询

[编辑 | 编辑源代码]

SELECT * FROM TAB

解决相关子查询的问题

[编辑 | 编辑源代码]

使用相关子查询更新和删除行

[编辑 | 编辑源代码]

使用 EXISTS 和 NOT EXISTS 运算符

[编辑 | 编辑源代码]

使用 WITH 子句

[编辑 | 编辑源代码]

编写多列子查询

[编辑 | 编辑源代码]

在 SQL 中使用标量子查询

[编辑 | 编辑源代码]

解决相关子查询的问题

[编辑 | 编辑源代码]

使用相关子查询更新和删除行

[编辑 | 编辑源代码]

使用 EXISTS 和 NOT EXISTS 运算符

[编辑 | 编辑源代码]

使用 WITH 子句

[编辑 | 编辑源代码]

层次查询

[编辑 | 编辑源代码]

层次查询允许您遍历自引用表并显示层次结构。例如,员工表包含员工的经理 ID。

列出所有员工的整个层次结构

SELECT LPAD(' ', 4*(level-1))||last_name "Last Name", salary, department_id
FROM hr.employees
CONNECT BY PRIOR employee_id = manager_id
      START WITH manager_id is null
ORDER SIBLINGS BY last_name;

列出所有“Kochhar”经理下属的员工

SELECT LPAD(' ', 4*(level-1))||last_name "Last Name", 
       salary, 
       department_id,
       CONNECT_BY_ISLEAF
FROM hr.employees
  CONNECT BY PRIOR employee_id = manager_id
        START WITH last_name = 'Kochhar'
 ORDER SIBLINGS BY last_name;

列出所有“Lorentz”汇报的经理

SELECT LPAD(' ', 4*(level-1))||last_name "Last Name", salary, department_id,
       SYS_CONNECT_BY_PATH(last_name, '/') "Path", CONNECT_BY_ISLEAF
FROM hr.employees
        CONNECT BY employee_id = PRIOR manager_id
        START WITH last_name = 'Lorentz'
 ORDER SIBLINGS BY last_name;
  • 伪列 LEVEL -> 根 = 1,下一级 = 2,3,4,5...等等
  • SYS_CONNECT_BY_PATH(col, '/') 显示完整路径,第二个参数是分隔符 (9i)
  • CONNECT_BY_ROOT(col) 返回当前层次结构中根节点的值 (10g)
  • 伪列 CONNECT_BY_ISLEAF 如果返回值位于层次结构的最后一个节点(即叶子节点)上,则返回 1 (10g)
  • order SIBLINGS 通过重新排序输出的顺序并保留层次关系 (10g)
  • connect by NOCYCLE 之前子节点 = 父节点
    • NOCYCLE 表示当子节点引用回根节点时,停止遍历层次结构。 (10g)
    • 伪列 CONNECT_BY_ISCYCLE 如果当前行引用父节点,则评估为“1”。 (10g)


正则表达式支持

[编辑 | 编辑源代码]

列出使用正则表达式的优势

[编辑 | 编辑源代码]

使用正则表达式搜索、匹配和替换字符串

[编辑 | 编辑源代码]
正则表达式
类别 表达式 描述
锚定字符 ^ 行首
-$ 行尾
量词字符 * 匹配 0 次或多次
+ 匹配 1 次或多次
? 匹配 0 次或 1 次
{m} 精确匹配 m 次
{m,} 至少匹配 m 次
{m, n} 至少匹配 m 次,但最多不超过 n 次
\n 使前一个表达式重复 n 次
备选和分组 分隔备选项,通常与分组运算符 () 一起使用
( ) 将子表达式分组为一个单元,用于备选项、量词或反向引用(参见“反向引用”部分)
[char] 表示一个字符列表;字符列表中的大多数元字符被理解为字面量,但字符类、^ 和 - 元字符除外
POSIX 字符 [:alnum:] 字母数字字符
[:alpha:] 字母字符
[:blank:] 空格字符
[:cntrl:] 控制字符(不可打印)
[:digit:] 数字
[:graph:] 任何 [:punct:], [:upper:], [:lower:] 和 [:digit:] 字符
[:lower:] 小写字母字符
[:print:] 可打印字符
[:punct:] 标点符号字符
[:space:] 空格字符(不可打印),如回车符、换行符、垂直制表符和换页符
[:upper:] 大写字母字符
[:xdigit:] 十六进制字符
等价类 = = 嵌入方括号中的等价类,匹配一个基本字母及其所有重音版本。例如,等价类 '[=a=]' 匹配 ä 和 â。
匹配选项 c 区分大小写匹配
i 不区分大小写匹配
m 将源字符串视为多行,激活锚定字符
n 允许句点 (.) 匹配任何换行符
华夏公益教科书