Sql:基本语句、规范化表、字符串函数、多表处理

一、基本语句:

创建数据库:CREAT DATABASE gregs_list;
注:(1)数据库标准大小,区分命令和文件名
(2)文件名中不可以出现空格,用下划线替代
(3);表示命令结束
使用数据库:USE gregs_list;
新增列:列名称+数据格式
注:数据格式包括:(1)VARCHAR文本数据,最长255个字符
(2)CHAR或CHARACTER预先设定好长度,后加(长度)
(3)DATE记录日期;
DATETIME适合存储将来时间;
TIMETAMP用于记录当下这个时刻
(4)INT整数
(5)DEC提供数值空间
(6)BLOB大量文本数据
表明不能未定义:列名+NOT NULL
设置默认值:列名+DEFAULT(默认值)
查看表:
1、DESC my_contacts;
2、DESCRIBE my_contacts;查看表的构成,包括是否为主键,每列存储的数据类型
3、SHOW CREATE TABLE my_contacts;(查看表的创建方式)
删除表:DTAP TABLE my_contacts;(删除表和表里所有数据)
插入值:INSERT INTO my_contacts
(列1,列2,…,列n)
VALUES
(值1,值2,…,值n)
注:(1)列和值可以换位置,也可以只输入部分列,但要保证一一对应
(2)CHAR、VARCHAR、DATE 、BLOB的值需要加单引号;DEC、INT不需要
(3)列名可以全部省略,值的顺序与原来列的顺序对应
(4)如果文本中包含单引号则在单引号前加\或‘,表示转义
查找表:情况1:
SELECT表名(查看表内所有列)
WHERE first_name=‘Anne’;
情况2:
SELECT 列1,列2,列3 FROM 表名(查看部分列)
WHERE type=‘plain glazed’
AND
rating=10;
AND

情况3:
SELECT
FROM my_contacts
WHERE location LIKE ‘%CA’;(在locaton列中查找所有以"CA"结尾的值)
注:(1)判断句中可以是关系运算符:>,<,>=,<=,<>;
(2) 可以是IS NULL
(3)模糊查找的时候:LIKE与通配符搭配使用
1)%:‘%im’(以im结尾,前面字符长度无所谓)
2)_:‘_im’(im前只有一个字符)
(4)条件之间可以用:
1)AND并且
2)OR或者
3)BETWEEN数值在某个范围之间
例:WHERE calories BETWEEN 30 AND 60;
4)IN在某个值的集合中选择
例:WHERE ratin IN(’innovative‘,’fabulous‘,’delightful‘);
NOT IN取值不在这个集合中
5)NOT和AND或OR连用(NOT 直接跟在WHERE和AND或OR之后)
例:WHERE NOT date_name LIKE ‘A%’
AND NOT date_name LIKE ‘B%’;
6)NOT和NULL一起使用:
例:WHERE main IS NOT NULL 同 WHERE NOT main IS NULL
删除行:DELETE(用法同SELECT)
DELETE FROM clown_info
WHERE
activities=‘dancing’;(删除某行)
DELETE FROM your _table(删除每一行)
更新数据:UPDATE SET
情况1: 根据WHERE子句筛选出行,对该列内容赋新值
UPDATE daoughnut_ratings
SET type=‘glazed’
WHERE type=‘plain glazed’;
注:(1)SET后可跟多个赋值,逗号分开;
也可以在原来的基础上运算,如cost=cost+1
(2)UPDATE可用于更新单一行或多行,一切都交给WHERE
情况2:在新的一列中填充其他列的部分值
UPDATE my_contacts
SET state=RIGHT(location,2);
更改数据:ALTER
(1)更换表的名称:(把projekts改名为project_list)
ALTER TABLE projekts
RENAME TO project_list;
(2)同时改变列的名称和类型
ALTER TABLE project_list
CHANGE COLUMN number proj_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY(proj_id); (把number列改名为proj_id,不能未定义,自动递 增,设为主键)
CHANGE 其他列
(3)只更改列的数据类型,不改变列的名称
ALTER TABLE project_list
MODIFY COLUMN proj_desc VARCHAR(120)
(4)增加新的列:
ALTER TABLE my_contacts
1)ADD COLUMN phone VARCHAR(10) FIRST;(放在第一列)
2)ADD COLUMN phone VARCHAR(10) LAST;(放在最后一列)
3)ADD COLUMN phone VARCHAR(10) THIRD;(放在指定个数列)
4)ADD COLUMN phone VARCHAR(10);(默认放在最后一列)
5)ADD COLUMN phone VARCHAR(10) AFTER model;(phone列放在model列后面)
(5)删除某列:
ALTER TABLE projuect_list
DROP COLUMN start_date;(删除start_date列)
DROP PRIMARY KEY;(删除主键列)

二、规范化表:

(一)第一范式:1NF
1、表规范化方法:
(1)让数据具有原子性:
规则1:具有原子性数据的列中不会有多个类型相同的值
规则2:具有原子性数据的表中不会有多个存储同类数据的列
(2)每个数据行必须有独一无二的识别项,人称主键。可以使用ID
规则1:主键不可以为NULL
规则2:插入新纪录时必须指定主键值
规则3:主键值不可以被修改
对已有的表进行修改:
方法一:查看原表sql代码,重新创建表
SHOW CREATE TABLE my_contacts;(查看表的创建方式)
(
contact_id INT NOT NULL AUT_INCREMENT
(创建主键列,注意必须NOT NULL,自动递增)
…(创建其他列)
PRIMARY KEY(contact_id)(指定主键的列)
);
方法二:在原表的基础上修改
ALTER TABLE my_contacts
ADD COLUMN contact_id INT NOT NULL AUTO_INCREMENT FIRST,
(FIRST意为把新增加的列放在最前面)
ADD PRIMARY KEY(contact_id);
2、表规范化优点:
(1)没有重复的数据,可以减小数据库的大小
(2)因为查找的数据较少,查询会更快速
(二)第二范式(2NF)
只要所有列都是主键的一部分或者表中有唯一主键列符合1NF的表,也会符合2NF
规则1:先符合1NF
规则二:没有部分函数依赖性
(三)第三范式(3NF)
规则一:符合2NF
规则二:没有传递函数依赖性

三、字符串函数

1、RIGHT(列名,个数)或LEFT(列名,个数)从列中选出指定数量的字符
例:SELECT RIGHT(location,2) FROM my_contacts;
2、SUBSTRING_INDEX(列名,寻找目标,第几个目标)可撷取部分列值
例:SELECT SUBSTRING_INDEX(location,’,’,1) FROM my_contacts;
3、SUBSTR(interests列,LENGTH(interest1)+2)返回本列内原始字符串的一部分,它接受字符串并切除我们用括号指定的第一部分,然后返回剩下的部分。
3、UPPER(列名)或LOWER(列名)可把整组字符串改为大写或小写
例:SELECT UPPER(’uSa‘);
4、REVERSE(字符串)反转字符串里的字符排序
例:SELECT REVERSE(’spaGHEtti’);
5、LTRIM(字符串)和RTRIM(字符串)返回清楚多余空格后的字符串,分别清楚字符左侧和右侧的多余空格
例:SELECT LTRIM(‘ dogfood’);
6、LENGTH(字符串)返回字符串中的字符数量
例:SELECT LENGTH(‘San Antonio,TX’);
7、CASE语句(按照相应的条件赋相应值)
UPDATE movie_table
SET category=
CASE
WHEN drama=‘T’ THEN ‘drama’
WHEN comedy=‘T’ THEN ‘comedy’
WHEN cartoon=‘T’ AND rating=‘G’ THEN ‘family’
ELSE ‘misc’
END;
8、ORDER BY(按照要求排列数据)
情况1:按照一种方式排序
SELECT title,category
FROM movie_table
WHERE
category=‘family’
ORDER BY titile;
注:顺序为:(NULL在数字和字母前面)
在这里插入图片描述
情况2:按照多种方式排序(在第一种排序方式的基础上,按第二种方式排列)
SELECT title,category,purchased
FROM movie_table
ORDER BY category,purchased;
情况3:按照某种方式降序排列(ASC默认升序,DESC降序)
SELECT title,purchased
FROM movie_table
ORDER BY title ASC,purchased DESC;
9、SUM加总
情况1:在where语句规定的范围内加和
SELECT SUM(sales)
FROM cookie_sales
WHERE first_name=‘Nicole’;
情况2:分组加总
SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales)DESC;
10、AVG平均
SELECT first_name,AVG(sals)
FROM cookie_sales
GROUP BY first_name;
11、MAX与MIN
SELECT first_name,MAX(sals)
FROM cookie_sales
GROUP BY first_name;
12、COUNT(返回指定列的行数)
SELECT COUNT (sale _date)
FROM cookie_sales;
13、查询
(1)DISTINCT(去掉重复后的值)
SELECT DISTINCT sale_date
FROM cookie_sales
ORDER BY sale_date;
注:DISTINCT是关键字不是函数
(2)LIMIT(起始偏移量,返回查询结果的数量)
情况1:返回前两条结果
SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales)DESC
LIMIT 2;
情况2:返回第二条结果
LIMIT 0,4(代表从0开始,取第4个结果)

五、多张表

1、外键
外键是表中的某一列,引用到另一个表的主键
(1)外键可能与它引用的主键名称不同
(2)外键使用的主键也称为父键,主键所在的表又被称为父表。
(3)外键能用于确认一张表中的行与另一张表中的行相对应。
(4)外键的值可以是NULL,即使主键值不可为NULL。外键为NULL,表示在父表中没有相符的主键。
(5)外键值不需唯一——事实上,外键通常都没有唯一性
(6)外键约束(如果违反了规则,约束会阻止我们破坏表)
CREATE TABLE interests 创建子表interests表

int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,指定int_id为主键
interest VARCHAR(50) NOT NULL,
contact_id INT NOT NULL,
CONSTRAINT my_contacts_contact_id_ 约束父表my_contacts中contact_id列
FOREIGN KEY (contact_id)指定外键contact_id列
REFERENCES my_contacts (contact_id)指定外键的来源和外键列在另一张表中的名称
);
2、多对多
junction table存储原始表的主键,然后把原始表的主键列与junction table的相应列产生链接。
3、组合键
组合键就是由多个数据列构成的主键,组合多列后形成具有唯一性的键。
4、依赖列
(1)当某列的数据必须随着另一列的数据的改变而改变时,表示第一列函数依赖于第二列。
速记符号:T.x->T.y,表示在关系表T中,y列函数依赖于x列。
(2)传递依赖:如果改变任何非键列可能造成其他列的改变,即为传递依赖。
传递函数依赖:任何非键列与另一个非键列由关联。

六、联接与多张表的操作

(一)AS:
1、把SELECT的查询结果填入新表
在这里插入图片描述
2、设置列的别名
在这里插入图片描述
3、设置表的别名(表别名又称相关名称)
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
注:分二卷,点击上传者查看第二卷地址。亲,本人纯手工添加了书签哦!!方便阅读 《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决方案。   作为一本讲述T-SQL高级查询的专业图书,《Microsoft SQL Server 2008技术内幕:T-SQL查询》旨在结合实践中的各种常见问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。《Microsoft SQL Server 2008技术内幕:T-SQL查询》内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性很强,可以把它们作为解决实际问题的标准模式。阅读《Microsoft SQL Server 2008技术内幕:T-SQL查询》,可以充分地理解T-SQL语言和良好的编程实践,学会如何编写更加有效而强大的查询语句。 序言 I 致谢III 前言 V 第1章 逻辑查询处理 1.1 逻辑查询处理的各个阶段 1.1.1 逻辑查询处理阶段简介 1.2 客户/订单场景下的查询示例 1.3 逻辑查询处理阶段详解 1.3.1 步骤1:FROM阶段 1.3.2 步骤2:WHERE阶段 1.3.3 步骤3:GROUP BY阶段 1.3.4 步骤4:HAVING阶段 1.3.5 步骤5:SELECT阶段 1.3.6 步骤6:排序用的ORDER BY阶段 1.4 逻辑查询处理的深入内容 1.4.1 运算符 1.4.2 OVER子句 1.4.3 集合运算符 1.5 总结 第2章 集合论和谓词逻辑 2.1 自然语言述到数学示的转换 2.1.1 严格定义(well-Definedness) 2.1.2 相等、恒等和同一性 2.1.3 数学命名约定 2.1.4 数字 2.1.5 上下文 2.1.6 函数、参数和变量 2.1.7 指令和算法 2.2 集合论 2.2.1 集合的标记方法 2.2.2 集合的严格定义 2.2.3 论域 2.2.4 真实性 2.2.5 罗素悖论(Russell s Paradox) 2.2.6 有序对、元组和笛卡尔积 2.2.7 空集 2.2.8 集合的特征函数 2.2.9 集合的基数(Cardinality) 2.2.10 顺序 2.2.11 集合运算符 2.2.12 集合论的推广 2.3 谓词逻辑 2.3.1 编程语言中的逻辑功能 2.3.2 命题和谓词 2.3.3 排中律 2.3.4 与、或、非运算 2.3.5 逻辑等价 2.3.6 逻辑蕴含 2.3.7 量化(Quantification) 2.3.8 替代和推广 2.4 关系 2.4.1 自反性、对称性和传递性 2.5 一个实际的应用 2.6 总结 第3章 关系模型 3.1 关系模型简介 3.1.1 关系、元组和类型 3.1.2 关系模型:快速摘要 3.2 关系代数和关系计算 3.2.1 基本运算符 3.2.2 关系代数 3.2.3 Codd提出的8个原始关系运算符 3.2.4 关系演算 T-SQL支持 3.3 数据完整性 3.3.1 声明式约束 3.3.2 实施完整性的其他方法 3.4 数据库正规化和其他设计主题 3.4.1 解决函数依赖的范式 3.4.2 更高级的范式 3.4.3 反规范化(Denormalization) 3.4.4 一般化和特殊化 3.5 总结 第4章 查询优化 4.1 本章用到的样本数据 4.2 优化方法论 4.2.1 分析实例级别的等待 4.2.2 关联等待和队列 4.2.3 确定行动方案 4.2.4 细化到数据库/文件级别 4.2.5 细化到进程级别 4.2.6 优化索引和查询 4.3 查询优化的工具  4.3.1 查询执行计划的缓存  4.3.2 清空缓存 4.3.3 动态管理对象 4.3.4 STATISTICS 4.3.5 测量查询的运行时间 4.3.6 分析执行计划 4.3.7 图形化的执行计划 4.3.8 提示(Hint) 4.3.9 跟踪/Profiler 4.3.10 数据库引擎优化顾问 4.3.11 数据收集和管理数据仓库 4.3.12 使用SMO来复制统计信息 4.4 索引优化 4.4.1 和索引的结构 4.4.2 索引访问方法 4.4.3 索引策略的分析 4.4.4 碎片 4.4.5 分区 4.5 准备样本数据 4.5.1 数据准备 4.5.2 TABLESAMPLE2 4.6 基于集合的方法和迭代/过程方法的比较,以及一个优化练习2 4.7 总结 第5章 算法和复杂性 5.1 你有一个1夸特的硬币吗? 5.1.1 如何从零钱罐中取回1夸特钱 5.1.2 有时零钱罐中没有1夸特的硬币 5.2 如何度量算法(How Algorithms Scale) 5.2.1 二次缩放(Quadratic Scaling)的一个例子 5.2.2 具有线性复杂度的算法 5.2.3 指数和超指数复杂度 5.2.4 次线性(sublinear)复杂度 5.2.5 常量复杂度 5.2.6 复杂度的技术定义 5.2.7 复杂度的比较 5.3 经典算法和算法策略 5.3.1 排序算法 5.3.2 字符串查找 5.4 一个实际的应用程序 5.4.1 识别测量数据的趋势 5.4.2 LISLP算法的复杂度 5.4.3 用T-SQL解决最长上升子序列的长度问题 5.5 总结 第6章 子查询、达式和排名函数 6.1 子查询 6.1.1 独立子查询 6.1.2 相关子查询 6.1.3 行为不当的子查询 6.1.4 不常用的谓词 6.2 达式(Table Expressions) 6.2.1 派生 6.2.2 公用达式 6.3 分析排名函数 6.3.1 行号 6.3.2 排名和密集排名(Dense Rank) 6.3.3 组号(Tile Number) 6.4 数字辅助 6.5 缺失范围和现有范围(也称为间断和孤岛) 6.5.1 缺失范围(间断) 6.5.2 现有范围(孤岛) 6.6 总结 第7章 联接和集合运算 7.1 联接 7.1.1 旧语法和新语法 7.1.2 基本联接类型 7.1.3 其他的联接分类 7.1.4 上一年度的滑动合计 7.1.5 联接算法 7.1.6 拆分元素 7.2 集合运算 7.2.1 UNION 7.2.2 EXCEPT  7.2.3 INTERSECT 7.2.4 集合运算的优先级 7.2.5 在集合运算中使用INTO 7.2.6 避开不支持的逻辑阶段 7.3 总结 第8章 数据聚合和透视 8.1 OVER 子句 8.2 决胜属性(Tiebreaker) 8.3 连续聚合 8.3.1 累积聚合(Cumulative Aggregation) 8.3.2 滑动聚合(Sliding Aggregation) 8.3.3 年初至今(YTD) 8.4 透视转换(Pivoting)35 8.4.1 透视转换属性35 8.4.2 关系除法 8.4.3 聚合数据 8.5 逆透视转换 8.6 自定义聚合 8.6.1 使用透视转换的自定义聚合 8.6.2 用户定义聚合函数(UDA,User Defined Aggregate) 8.6.3 专用解决方案 8.7 直方图(Histogram) 8.8 分组因子 8.9 分组集 8.9.1 样例数据 8.9.2 GROUPING SETS从属子句 8.9.3 CUBE从属子句 8.9.4 ROLLUP从属子句 8.9.5 分组集代数 8.9.6 GROUPING_ID函数 8.9.7 保存分组集 8.9.8 排序 8.10 总结 第9章 TOP和APPLY 9.1 SELECT TOP 9.1.1 TOP和确定性 9.1.2 TOP和输入达式 9.1.3 TOP和修改 9.1.4 增强的TOP 9.2 APPLY 9.3 使用TOP和APPLY解决常见问题 9.3.1 每组中的TOP n 9.3.2 匹配当前值和前一个值 9.3.3 分页 9.4 逻辑转换 9.5 总结 第10章 数据修改 10.1 插入数据 10.1.1 增强的VALUES子句 10.1.2 SELECT INTO 10.1.3 BULK行集提供程序 10.1.4 按最小方式记录日志的操作  10.1.5 INSERT EXEC 10.1.6 序列机制45 10.2 删除数据 10.2.1 TRUNCATE与DELETE 10.2.2 删除包含重复数据的行 10.2.3 基于联结的DELETE 10.3 更新数据 10.3.1 基于联结的UPDATE 10.3.3 更新大值数据类型 10.3.3 用SELECT和UPDATE语句进行赋值 10.4 合并数据 10.4.1 MERGE语句基础 10.4.2 额外增加一个谓词 10.4.3 多个WHEN子句 10.4.4 WHEN NOT MATCHED BY SOURCE子句 10.4.5 MERGE Values 10.4.6 MERGE与触发器 10.5 OUTPUT子句 10.6 总结 第11章 查询分区 11.1 在SQL Server中进行分区 11.1.1 分区视图 11.1.2 分区 11.2 总结 第12章 图、树、层次结构和递归查询 12.1 术语 12.1.1 图 12.1.2 树 12.1.3 层次结构 12.2 应用场景 12.2.1 员工组织图 12.2.2 材料清单(BOM) 12.2.3 道路系统 12.3 迭代/递归 12.3.1 下属 12.3.2 祖先 12.3.3 带有路径枚举的子图/子树 12.3.4 排序 12.3.5 环 12.4 具体化路径 12.4.1 维护数据 12.4.2 查询 12.5 使用HIERARCHYID数据类型的具体化路径5 12.5.1 维护数据 12.5.2 查询 12.5.3 使用HIERARCHYID的其他方面 12.6 嵌套集合 12.6.1 分配左值和右值 12.6.2 查询 12.7 传递闭包(Transitive Closure) 12.7.1 有向无环图 12.7.2 无向有环图 12.8 总结 索引
标准中文版的pdf和实例数据脚本,分享给大家 《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决方案。 作为一本讲述T-SQL高级查询的专业图书,《Microsoft SQL Server 2008技术内幕:T-SQL查询》旨在结合实践中的各种常见问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。《Microsoft SQL Server 2008技术内幕:T-SQL查询》内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性很强,可以把它们作为解决实际问题的标准模式。阅读《Microsoft SQL Server 2008技术内幕:T-SQL查询》,可以充分地理解T-SQL语言和良好的编程实践,学会如何编写更加有效而强大的查询语句。 目录 -------------------------------------------------------------------------------- 序言 I 致谢III 前言 V 第1章 逻辑查询处理1 1.1 逻辑查询处理的各个阶段2 1.1.1 逻辑查询处理阶段简介2 1.2 客户/订单场景下的查询示例4 1.3 逻辑查询处理阶段详解5 1.3.1 步骤1:FROM阶段5 1.3.2 步骤2:WHERE阶段9 1.3.3 步骤3:GROUP BY阶段10 1.3.4 步骤4:HAVING阶段11 1.3.5 步骤5:SELECT阶段12 1.3.6 步骤6:排序用的ORDER BY阶段13 1.4 逻辑查询处理的深入内容16 1.4.1 运算符16 1.4.2 OVER子句23 1.4.3 集合运算符25 1.5 总结26 第2章 集合论和谓词逻辑27 2.1 自然语言述到数学示的转换27 2.1.1 严格定义(well-Definedness)28 2.1.2 相等、恒等和同一性30 2.1.3 数学命名约定30 2.1.4 数字31 2.1.5 上下文32 2.1.6 函数、参数和变量33 2.1.7 指令和算法34 2.2 集合论34 2.2.1 集合的标记方法35 2.2.2 集合的严格定义36 2.2.3 论域36 2.2.4 真实性38 2.2.5 罗素悖论(Russell s Paradox)40 2.2.6 有序对、元组和笛卡尔积41 2.2.7 空集42 2.2.8 集合的特征函数43 2.2.9 集合的基数(Cardinality)43 2.2.10 顺序44 2.2.11 集合运算符47 2.2.12 集合论的推广50 2.3 谓词逻辑50 2.3.1 编程语言中的逻辑功能50 2.3.2 命题和谓词51 2.3.3 排中律53 2.3.4 与、或、非运算53 2.3.5 逻辑等价55 2.3.6 逻辑蕴含55 2.3.7 量化(Quantification)56 2.3.8 替代和推广58 2.4 关系59 2.4.1 自反性、对称性和传递性59 2.5 一个实际的应用60 2.6 总结63 第3章 关系模型65 3.1 关系模型简介65 3.1.1 关系、元组和类型65 3.1.2 关系模型:快速摘要70 3.2 关系代数和关系计算70 3.2.1 基本运算符71 3.2.2 关系代数71 3.2.3 Codd提出的8个原始关系运算符72 3.2.4 关系演算79 T-SQL支持80 3.3 数据完整性81 3.3.1 声明式约束82 3.3.2 实施完整性的其他方法84 3.4 数据库正规化和其他设计主题86 3.4.1 解决函数依赖的范式87 3.4.2 更高级的范式92 3.4.3 反规范化(Denormalization)95 3.4.4 一般化和特殊化96 3.5 总结98 第4章 查询优化99 4.1 本章用到的样本数据99 4.2 优化方法论102 4.2.1 分析实例级别的等待104 4.2.2 关联等待和队列111 4.2.3 确定行动方案112 4.2.4 细化到数据库/文件级别113 4.2.5 细化到进程级别115 4.2.6
1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行的信息查询,select。 1.2.2 数据操作语言(DML) 用于操作关系型数据库对象内部的数据,insert、update、delete。 1.2.3 数据定义语言(DDL) 用来建立及定义数据、字段以及索引等数据库结构,create、alter、drop 。 1.2.4 数据控制语言(DCL) 用于控制对数据库里数据的访问,通常用于创建与用户访问相关的对象以及控制用户的权限,grant、revoke(撤销)。 1.2.5 事务控制命令(TPL) 用于管理数据库事务,commit、rollback、savepoint(在一组事务里创建标记点以用于回退)。 1.3 的构成 1.3.1 字段 字段是里的一列,用于保持每条记录的特定信息 1.3.2 记录 记录,也被成为一行数据,是里的每一行 1.4 完整性的约束条件 1.4.1 实体完整性 关系模型的实体完整性在create table中用primary key约束实现,primary key约束用于定义主键,它保证主键的唯一性和非空性。 1.4.2 参照完整性 关系模型的参照完整性可以通过在create table中用foreign key (<外键>) references <被参照名> (<与外键对应的主键名>)进行约束定义。 1.4.3 用户定义完整心 在create table语句中可以根据应用要求,定义属性以及元组上的约束。 常见的用户定义的完整性约束有: not null或null约束。 unique约束:唯一性约束。 default约束:默认值约束。 check约束:检查约束,check约束通过约束条件达式设置列值应该满足的条件。 1.5 范式 1.5.1 第一范式 1.5.1.1 规范 无重复的列,确保每列保持原子性,即数据库中的所有字段值都是不可分解的原子值。 1.5.1.2 举例 姓名 年龄 联系电话 地址 省 市 详细地址 1.5.2 第二范式 1.5.2.1 规范 属性完全依赖于主键,确保中每列都与主键相关。 1.5.2.2 举例 订单 订单Id 商品Id 总金额 商品名称 001 1 10 苹果 001 2 10 橘子 联合主键订单Id、商品Id => 商品 商品Id 商品名称 单价 订单 订单Id 总金额 1.5.3 第三范式 1.5.3.1 规范 属性不依赖于其它非主属性,确保数据中的每一列数据都和主键直接相关,而不能间接相关,即要求一个数据库中不包含已在其它中已包含的非主关键字信息。 1.5.3.2 举例 党员 党员Id 党员姓名 组织Code 符合3NF 党员 党员Id 党员姓名 组织名称 不符合3NF 组织 组织Code 组织名称 1.6 外连接 1.6.1 准备 create table student_A( uuid varchar2(32), name varchar2(100)); create table student_B( uuid varchar2(32), name varchar2(100)); insert into student_A values('1','小黄'); insert into student_A values('2','小黑'); insert into student_A values('3','小红'); insert into student_B values('1','大黄'); insert into student_B values('2','大黑'); insert into student_B values('4','大红'); insert into student_B values('4','大紫'); 1.6.2 左连接(left join) 1.6.2.1 说明 查询指定的左的所有行,而不仅仅是联接列所匹配的行;如果左的某行在右中没有匹配行,则在相关联的结果集行中右的所有选择列列均为空值。 1.6.2.2 语法 select A.*,B.* from student_A A left join student_B B on A.Uuid = B.Uuid; 1.6.2.3 结果 1.6.2.4 (+)示 select A.*,B.* from student_A A,student_B B where A.Uuid = B.Uuid(+) 1.6.3 右连接(right join) 1.6.3.1 说明 查询指定的右的所有行,而不仅仅是联接列所匹配的行;如果右的某行在左中没有匹配行,则在相关联的结果集行中左的所有选择列列均为空值。 1.6.3.2 语法 select A.*,B.* from student_A A right join student_B B on A.Uuid = B.Uuid; 1.6.3.3 结果 1.6.3.4 (+)示 select A.*,B.* from student_A A,student_B B where A.Uuid(+) = B.Uuid 1.6.4 全外连接(full outer join) 1.6.4.1 说明 完整外部联接返回左和右中的所有行;当某行在另一个中没有匹配行时,则另一个的选择列列包含空值;如果之间有匹配行,则整个结果集行包含基的数据值。 1.6.4.2 语法 select A.*, B.* from student_A A full outer join student_B B on A.Uuid = B.Uuid; 1.6.4.3 结果 1.6.4.4 全外连接不支持(+)写法 1.6.5 (+) + 示补充,即哪个有加号,这个就是匹配。 1.7 运算符 1.7.1 比较 =、>,<,>=,<=,!=,<>, 1.7.2 确定范围 between and 、not between and 1.7.3 确定集合 in、not in 1.7.4 字符匹配 like(“%”匹配任何长度,“_”匹配一个字符) 1.7.5 转义字符 1.7.5.1 常规转义字符 “\”转义字符,“\%”则示单纯的字符“%” 1.7.5.2 escape escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号。 select * from Student_a where name like '%$%%' escape '$'; 1.7.6 空值 is null、is not null 1.7.7 集合查询 union(并)、intersect(交)、minus(差) 1.7.8 多重条件 and、or、not 1.7.9 对查询结果分组 <group by 列名> 1.7.10 分组筛选条件 [having <条件达式>] 1.7.11 字符串拼接 select 'A' || 'B' from dual; // || 拼接 1.8 函数 1.8.1 聚集函数 count、sum、avg、max、min 1.8.2 case when 1.8.2.1 语法 select t.uuid, t.score, case when t.score > 90 then '优秀' when t.score > 60 then '及格' else '不及格' end from exam_user_exam t 1.8.3 decode 1.8.3.1 语法 select decode(x,1,'x is 1', 2 , 'x is 2','others') from dual 1.8.3.2 说明 当x等于1时,则返回‘x is 1’,当x等于2时,则返回‘x is 2’,否则,返回‘others’。 1.8.4 nulls first(nulls last)排序 1.8.4.1 语法 select * from dy_info t order by t.degree nulls first 1.8.4.2 说明 控制null显示行位置 1.8.5 Nvl 1.8.5.1 语法 select nvl(t.sap,'空') from dy_info t; 1.8.5.2 说明 如果sap号为空,则返回‘空’,否则返回sap号。 1.8.6 递归查询 1.8.6.1 语法 select t.* from g_organ t start with t.organcode = '080' connect by prior t.parentcode = t.organcode; //递归查询父节点 select t.* from g_organ t start with t.organcode = '080' connect by t.parentcode = prior t.organcode; //递归查询子节点 1.8.7 union 和 union all 1.8.7.1 语法 select * from dual union all select * from dual 1.8.7.2 说明 union 会对查询数据进行去重并排序,union all只是简单的将两个结果合并。 1.8.8 wm_concat 1.8.8.1 语法 select wm_concat(t.role_name) from g_role t where t.role_name like '%书记%' 1.8.8.2 说明 拼接字符串,结果为:‘党工委副书记,总支副书记,党支部书记,党委书记,党委副书记,党总支书记,党工委书记,党总支副书记,党支部副书记’ 1.8.9 相似度 1.8.9.1 语法 select utl_match.edit_distance_similarity('aaaaa','bbaaaa') from dual; 1.8.10 去格式 1.8.10.1 oracle正则达式:去除<></>格式 select REGEXP_REPLACE(title,'<[^>]*>','') title from exam_question 1.8.11 rank() over (partition by …) 1.8.11.1 语法 select organcode,score,ranknum from ( select t.organcode, t.score, rank() over (partition by t.organcode order by t.score desc) ranknum from exam_user_exam t) where ranknum < 4 1.8.11.2 说明 获取每个组织,考试成绩前三名。 1.9 存储过程 1.9.1 定义 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.9.2 准备 create table t_user ( username varchar2(20), password varchar2(20) ); create table t_user_temp ( username varchar2(20), password varchar2(20) ); insert into t_user(username,password) values('小王','1111'); insert into t_user(username,password) values('小李','1111'); 1.9.3 创建存储过程 create or replace procedure adduser as begin insert into t_user_temp(username,password) select username,password from t_user t where t.username = '小李'; end adduser; 1.9.4 执行 begin adduser; end; 1.9.5 验证 select * from t_user; select * from t_user_temp 2 SQL深入 2.1 常用 2.1.1 空间 2.1.1.1 创建空间 create tablespace TS_DJY datafile 'd:/software/oracle/tablespace/ts_djy.dat' size 1024M autoextend on next 100M maxsize 2048M; 2.1.1.2 指定用户空间 alter user cssdj default tablespace TS_DJY; 2.1.1.3 指定空间 create table t_student( uuid varchar2(32) )tablespace TS_DJY; 2.1.2 自增sequence 2.1.2.1 创建 create sequence seq_student_uuid minvalue 1 maxvalue 999999999999999 start with 1 increment by 1 nocache; 2.1.2.2 使用 select seq_student_uuid.nextval from dual; //获取下一个 select seq_student_uuid.currval from dual; //获取当前 2.1.3 批量插入 2.1.3.1 查询结果批量插入 insert into tablea(cola,colb) select cola,colb from tableb; 2.1.3.2 创建相同的结构并插入数据(备份数据) create tab_new as select * from tab_old; 2.1.3.3 创建相同的结构不插入数据 create tab_new as select * from tab_old where rownum=0; 2.1.4 伪列伪 2.1.4.1 伪列 伪列不是的真实列,但是你可以象使用真实列一样使用伪列,常用伪列:rowid行的绝对物理编号,每一行是唯一的。rownum序号,返回查询结果的每行序号。系统时间sysdate,返回系统当前时间。 2.1.4.2 伪 select * from dual; 2.1.5 系统 2.1.5.1 user_tables 当前用户信息 2.1.5.2 user_tab_columns 当前用户所有列信息,搜索列所在的: select * from user_tab_columns t where t.column_name like '%ORGANCODE%'; 2.1.5.3 user_tablespaces 当前用户空间 2.1.5.4 dba_users 数据库所有用户 2.1.5.5 dba_tables 数据库所有 2.1.5.6 dba_tablespaces 数据库所有空间 2.1.6 锁解锁 2.1.6.1 查看锁信息 select l.OBJECT_ID,s.SID,s.SERIAL#,s.USERNAME, s.MACHINE from V$locked_Object l,V$session s where l.SESSION_ID = s.SID; 2.1.6.2 解锁 alter system kill session 'sid,serial#'; 2.1.7 备份与恢复 2.1.7.1 导出 导出用户: exp cssdj/cssdj@zr owner=(cssdj,cssdj_zsy) file=d:/cssdj.dmp log=d:/cssdj.log 导出用户: exp cssdj/cssdj@zr tables=(g_dict,g_dict_item) file=d:/cssdj.dmp log=d:/cssdl.log 2.1.7.2 导入 imp cssdj/cssdj@zr fromuser=cssdj_zsy touser=cssdj file=d:/cssdj.cmp log=d:/cssdj.log 2.1.7.3 数据泵 2.1.8 Dblink 2.1.8.1 创建 create database link orcllink connect to cssdj identified by cssdj using '(DESCRIPTION = (ADDRESS_LIST= (ADDRESS=(PROTOCOL = TCP)(HOST = 219.239.110.65)(PORT = 1521))) (CONNECT_DATA=(SID = orcl)))'; 2.1.8.2 删除 drop database link orcllink; 2.1.8.3 使用 select * from dy_info@orcllink; 2.2 Oracle与Mysql差异 2.2.1 Group by 2.2.1.1 Oracle select后面出现的列,如果没有使用集合函数,必须出现在group by 中。 select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select sno,sname,sum(grade) from student group by sno; //非法写法 select sno,min(sname),sum(grade) from student group by sno; //建议用这种写法,效率高些 2.2.1.2 Mysql select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select sno,sname,sum(grade) from student group by sno; //合法写法 2.2.2 分页 2.2.2.1 Oracle 使用rownum来明分页位置,而且rownum只能小于某值,不能大于某值,故而rownum和where联用才能完成数据范围的控制 2.2.2.2 Mysql mysql的分页可以用limit startNum,pageNum 2.3 了解 2.3.1 事务 2.3.1.1 Rollback start transaction; --开始事务 insert into g_dict values('test','测试','1',''); --执行数据操作语言(DML) select * from g_dict where code = 'test'; --可以查看是否执行正确 rollback; --错误执行rollback操作 commit; --正确执行commit操作 2.3.1.2 Savepoint start transaction; --开始事务 insert into g_dict values('t1','测试','1',''); --执行数据操作语言(DML) savepoint pointA; insert into g_dict values('t2','测试','1',''); --执行数据操作语言(DML) select * from g_dict where code = 'test33'; --可以查看是否执行正确 rollback to savepoint pointA; 2.3.2 利用执行计划评估SQL语句的性能 2.3.2.1 工具 在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。 2.3.2.2 查看总COST,获得资源耗费的总体印象 一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。 2.3.2.3 了解执行计划的执行步骤 按照从左至右,从上至下的方法,了解执行计划的执行步骤; 执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析的访问方式,连接顺序以及连接方式是否合理。 2.3.2.4 分析的访问方式 的访问方式主要是两种:全扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),如果上存在选择性很好的索引,却走了全扫描,而且是大的全扫描,就说明的访问方式可能存在问题;若大上没有合适的索引而走了全扫描,就需要分析能否建立索引,或者是否能选择更合适的连接方式和连接顺序以提高效率。 2.3.2.5 分析的连接方式和连接顺序 的连接顺序:就是以哪张作为驱动来连接其他的先后访问顺序。 的连接方式:简单来讲,就是两个获得满足条件的数据时的连接过程。主要有三种连接方式,嵌套循环(NESTED LOOPS)、哈希连接(HASH JOIN)和排序-合并连接(SORT MERGE JOIN)。我们常见得是嵌套循环和哈希连接。 嵌套循环:最适用也是最简单的连接方式。类似于用两层循环处理两个游标,外层游标称作驱动,Oracle检索驱动的数据,一条一条的代入内层游标,查找满足WHERE条件的所有数据,因此内层游标中可用索引的选择性越好,嵌套循环连接的性能就越高。 哈希连接:先将驱动的数据按照条件字段以散列的方式放入内存,然后在内存中匹配满足条件的行。哈希连接需要有合适的内存,而且必须在CBO优化模式下,连接两的WHERE条件有等号的情况下才可以使用。哈希连接在的数据量较大,中没有合适的索引可用时比嵌套循环的效率要高。 2.3.3 优化器 Oracle优化器分为基于规则的优化器(RBO)和基于代价的优化器(CBO)。 2.3.3.1 规则的优化器(RBO) RBO的优化方式,依赖于一套严格的语法规则,只要按照规则写出的语句,不管数据和索引的内容是否发生变化,不会影响PL/SQL语句的"执行计划"。 2.3.3.2 基于代价的优化器(CBO) CBO计算各种可能"执行计划"的"代价",即cost,从中选用cost最低的方案,作为实际运行方案。各"执行计划"的cost的计算根据,依赖于数据中数据的统计分布,ORACLE数据库本身对该统计分布是不清楚的,须要分析和相关的索引,才能搜集到CBO所需的数据。 2.3.4 分析analysis 2.3.4.1 说明 analyze table,一般可以指定分析、所有字段、所有索引字段、所有索引,若不指定则全部都分析。 2.3.4.2 分析 analyze table dy_info compute statistics; 2.3.4.3 删除分析数据 analyze table dy_info delete statistics; 2.3.5 oracle添加强制索引 如果使用的是CBO的话,可能SQL不执行索引,则可以添加强制索引执行索引。 2.3.5.1 语法 /*+index(tablename indexname)*/ 2.3.5.2 举例 select /*+index(t INDEX_SAP)*/* from dy_info t where t.sap = 'T6000890'
达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句查询 简单查询 带条件查询 集函数 情况达式 连接查询 子查询 标量子查询 子查询 派生子查询 定量比较 带 谓词的子查询 多列子查询 查询结果的合并 和 子句的使用 子句的使用 子句 选取前儿条数据 选取其屮几条数据 全文检索 层次查询 层次查询子句 层次查询相关伪列 层次查询相关操作符 层次查询相关函数 查看执行计划 第章数据的插入、删除和修改 数据插入语句 数据修改语句 数据删除语句 伪列的使用 和 自增列的使用 自增列定义 属性 第章视图 视图的作用 视图的定义 视图的删除 视图的查询 视图数据的更新 第章嵌入式 前缀和终结符 宿主变量 输入和输出变量 指示符变量 服务器登录与退出 登录服务器 退出服务器 游标的定义与操纵 定义游标语句 打开游标语句 拨动游标语句 关闭游标语句 关于可更新游标 游标定位删除语句 游标定位修改语句 单元组查询语句 动态 立即执行语句 准备语句 执行语句 异常处理 第章函数 数值函数 字符串函数 日期时间函数 空值判断函数 类型转换函数 杂类函数 系统函数 存储加密函数 标记处理函数 备份恢复函数 附加分离数据库 第章一致性和并发性 事务相关语句 事务的开始 事务的结束 保存点相关语句 设置事务隔离级及读写特性 手动上锁语句 第章存储模块 存储模块的定义 存储模块的删除 存储模块的控制语句 语句块 赋值语句 条件语句 循环语句 语句 调用语句 语句 语句 语句 语句 打印语句 存储模块的异常处理 异常变量的说明 异常的抛出 异常处理器 异常处理用法举例 存储模块的语句 游标 动态 游标变量 返回查询结果集 语句应用举例 客户端存储模块 子过程、子函数 子过程 子函数 记录类型 记录类型定义 记录赋值 第章触发器 触发器的定义 触发器类型 触发器激发顺序 新、旧行值的引用 触发器谓词 变异 设计触发器的原则 触发器的删除 禁止和允许触发器 触发器应用举例 使用触发器实现审计功能 使用触发器维护数据完整性 使用触发器保障数据安全性 使用触发器派生字段值 第章安全管理 创建角色语句 删除角色语句 授权语句数据库权限 授权语句对象权限 授权语句角色权限 回收权限语句数据库权限 回收权限语句对象权限 回收权限语句角色权限 策略与标记管理 创建策略 修改策略 删除策略 安全标记 用户标记设置语句 标记设置语句 审计设置语句 审计取消语句 审计信息查阅语句 审计分析 创建审计分析规则 删除审计分析规则 加密引擎 创建加密引擎 修改加密引擎 删除加密引擎 第章外部链接 创建外部链接 删除外部链接 使用外部连接进行远程对象操作 第章备份还原 备份数据库 还原数据库 第章包 创建包 创建包规范 创建包主体 删除包 删除包规范 删除包主体 应用实例 第章同义词 创建同义词 删除同义词 附录关键字和保留字 附录 语法描述说明 附录命令参考 附录系统存储过程和函数 附录技术支持 第1章结构化查询语言简介 第章结构化查询语言 简介 结构化查询语言 是在年提出的一种关系数据库语言。 由于语言接近英语的语句结构,方便简洁、使用灵活、功能强人,倍受用户及计算机工业 界的欢迎,被众多计算机公司和数据库厂商所采用,经各公司的不断修改、扩充和完善,语 言最终发展成为关系数据库的标准语言。 的第一个标准是年月由美国国家标准化组织公布的 数据库语言 简称 年国际标准化组织也通过了这一标准。以后通过对 的不断修改和完善,于年第二次公布了标准 年又公布了标准 即 。最新的标准是 (也称 年作为 《信息技术——数据库语言》发布。我国也相继 公布了数据库语言的国家标准。 成为国际标准以后,其影响远远超出了薮据库领域。例如在 软件工程、人工智 能、分布式等领域,人们不仅把作为检索数据的语言规范,而且也把作为检索图形、 图象、声音、文字等信息类型的语言规范。目前,世界上大型的著名数据库管理系统均支持 语言,如 等。在未来相当长的时间里,仍将是数据库领 域以至信息领域中数据处理的主流语言之 由于不同的产品,大都按自己产品的特点对语言进行了扩充,很难完全符合 标准。目前在 市场上已将的符合夲作为衡量产品质量的重要指标,并研制成专门的 测试软件,如 目前, 入门级和过渡级的符合率均达到,并且部分支持 更新的 标准。同时还兼容 和 的部分语言特性。本章主要 介绍系统所支持的语言 语 语言的特点 语言符合结构化査询语言标准,是标准的扩充。它集数据定乂、数据査 询、薮据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。它功能强大,使用简 单方便、容易为用户掌握 语言具有如下特点: 功能一体化 的功能一体化现在以下两个方面 支持多媒体数据类型,用户在建时可直接使用。系统在处理常规数据与 多媒体数据时达到了四个一体化:一体化定义、一体化存储、一体化检索、一体化处理,最大限 度地提高了数据库管理系统处理多媒体的能力和速度; 语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作于 体,每一项操作都只需一种操作符示,格式规范,风格一致,简单方便,很容易为用户所掌 握 两种用户接口使用统一语法结构的语言 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能独立运行于联机交 互方式。作为嵌入式语言, 浯句能够嵌入到和语言程序中,将高级语言也称主 语言灵活的达能力、强大的计算功能与 语言的数据处理功能相结合,完成各种复杂 的事务处理。而在这两种不同的使用方式中, 语言的语法结构是一致的,从而为用户使 第1章结构化查询语言简介 用提供了极大的方使性和灵活性。 高度非过程化 语言是·种非过程化语言。用户只需指出“做什么”,而不需指出“怎么做”,对数 据存取路径的选择以及 语句功能的实现均由系统自动完成,与用户编制的应用程序与 具体的机器及关系 的实现细节无关,从而方便了用户,提高了应用程序的开发效率,也 增强了数据独立性和应用系统的叮移植性。 面向集合的操作方式 语言采用了集合操作方式。不仅查询结果可以是元组的集合,而且一次插入、删除、 修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,达简洁,接近英语的语法结构,容易为用户所掌握。 保留字与标识符 标识符的语法规则兼容标准 ,标识符分为正规标识符和定界标识符两大类。 正规标识符以字母、、、或汉字开头,后面可以跟随字母、数字、、、或者汉字,正 规标识符的最大长度是个英文字符或个汉字。正规标识符不能是保留字 正规标识符的例子:, 定界标识符的标识符体用双引号括起来时,标识符体可以包含任意字符,特别地,其中使用 连续两个双引号转义为一个双引号 定界标识符的例子: 保留字的清单参见附录 语言的功能及语句 语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询 操纵和控制四个方面,通过各种不同的语句米实现。按照所实现的功能, 语句分 为以下几种 数据库、登录、用户、模式、基、视图、索引、序列、全文索引、存储过程和触发器 的定义和删除语句,登录、基、视图、仝文索引的修改语句,对象的更名语句; 査询(含全文检索)、插入、删除、修改语句; 数据库安全语句。包括创建角色语句、删除角色语句,授权语句、回收权限语句,修改 登录口令语句,审计设置语句、取消审计设置语句等。 在嵌入方式中,为了协调 语言与主语言不同的数据处理方式 语言引入 了游标的概念。因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发控制机制 语言提供 了事务的回滚( )与提交( )语句。同时允许选择实施事务级读一致 性,它保证同一事务内的可重复读,为此提供用户多种手动上锁语句,和设置事务隔离级别 第1章结构化查询语言简介 语句 所支持的数据类型 数据类型是可示值的集。值的逻辑示是字值。值的物理示依赖于实现。系统具 有 的绝大部分数据类型,以及部分 和 的数据类型。 常规数据类型 字符数据类型 类型 语法:长度 功能: 数据类型指定定长字符串。在基中,定义 类型的列时,可以指 定一个不超过的正整数作为字符长度,例如 如果未指定长度,缺省为。 确保存储在该列的所有值都具有这一长度。 数据类型的最大长度由数据库页面大 小决定,字符类型最大长度和页面大小的对应关系请见下支持按字节存放字符 串 数据库页面大 最大长度 类型 语法: 长度 功能:与 相同。 类型 语法: 长度 功能 数据类型指定变长字符串,用法类似 数据类型,可以指定一 个不超过的正整数作为字符长度,例如: 。如果未指定长度,缺省为 在系统中, 数据类型的实际最大长度由数据库页面大小决定,具体最 大长度算法如 的区别在于前者长度不足时,系统自动填充空 格,而后者只占用实际的字节空间。 数据库页面大 实际最大长度 注:这个限制长度只针对建的情况,在定义变量的时候,可以不受这个限制长度的限 制 数值数据类型
### 回答1: OA的流程标题SQL是指在OA系统中通过编写SQL查询语句来获取流程标题的相关信息。 在OA系统中,流程标题通常是流程的名称或者概述,用于简要描述该流程的内容或目的。对于使用数据库作为后台存储的OA系统,流程标题通常会保存在相关的数据中。 为了获取流程标题的相关信息,可以使用SQL语句进行查询。例如,可以通过编写如下的SQL语句来获取指定流程的标题信息: ```sql SELECT title FROM process_table WHERE process_id = 'xxx'; ``` 上述SQL语句中,根据流程的唯一标识(通常是process_id)来查询流程(process_table)中的标题(title)字段的值。这样就可以获取到指定流程的标题信息。 需要注意的是,每个OA系统的数据库结构和命名可能会有所不同,因此具体的SQL语句可能会有所调整。另外,根据实际需要,还可以根据其他条件来进行查询,如流程的状态、创建时间等等。 通过编写SQL查询语句,可以灵活地获取OA系统中流程标题的相关信息,便于相关业务的处理和统计分析。 ### 回答2: OA(Office Automation)是一种办公自动化系统,可以实现企业内部各项业务流程的自动化管理。流程标题SQL是指在OA系统中,用于定义业务流程的标题所使用的SQL语句。 在OA系统中,每个业务流程都有一个标题,用于简短明了地描述该流程的内容或目的。这个标题通常是根据一定的规则生成的,其中就包括使用SQL语句来获取相关数据或执行一定的逻辑操作。 SQL(Structured Query Language)是一种用于管理关系型数据库的计算机语言。使用SQL语句可以方便地对数据库中的数据进行查询、插入、更新、删除等操作。在OA系统中,通过编写特定的SQL语句,可以获取数据库中特定数据并生成流程标题。 以请假流程为例,假设需要生成的标题是“请假申请-张三-2021年10月1日至2021年10月5日”,其中张三是请假人,时间范围是请假的起止日期。在这种情况下,可以使用相应的SQL语句来获取请假人和请假日期信息,然后将这些信息拼接为标题。 具体的SQL语句可能包括查询员工姓名和请假日期的数据,通过指定条件来获取指定员工的请假信息。然后,将获取到的员工姓名和请假日期进行字符串拼接,生成最终的请假标题。 通过编写合适的SQL语句,可以根据具体的业务需求将相关数据获取并生成流程标题。这样,在OA系统中使用流程标题SQL可以动态地生成适应不同场景的标题,提高流程管理的效率和灵活性。 ### 回答3: OA 是办公自动化系统的简称,是一种提高办公效率的软件工具。流程标题是OA系统中用于标识和描述流程的一个重要元素。 在OA系统中,流程标题SQL是指通过结构化查询语言(SQL)来定义和生成流程标题。SQL是一种用于管理关系数据库的语言,包含了丰富的语法和功能,可以灵活地操作和查询数据。 流程标题SQL的主要作用是根据具体的业务需求来生成符合规范的流程标题。通过SQL语句的编写,可以获取相关的数据,并将其组合成适合的格式和内容作为流程标题显示。 例如,如果我需要生成一个采购申请流程标题,包括申请人姓名、申请日期和申请单编号,我可以使用流程标题SQL来实现。具体的SQL语句可能包含以下内容: ``` SELECT CONCAT('采购申请 - ', applicant_name, ' - ', application_date, ' - ', application_number) AS flow_title FROM purchase_application WHERE application_id = 'xxx' ``` 在上述的SQL语句中,通过查询采购申请(purchase_application),我们可以获取到申请人姓名(applicant_name)、申请日期(application_date)和申请单编号(application_number)等相关数据。使用CONCAT函数将这些数据以特定的格式组合起来,并通过别名(flow_title)将其作为流程标题返回。 通过流程标题SQL的定义,我们可以实现灵活、个性化的流程标题生成,提高了OA系统对不同业务场景的适应性和可扩展性,进而提高了办公效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joyce 周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值