数据库(三)

简介: 数据库(三)

8.重点掌握用关系代数表示的几种关系操作:笛卡尔积、选择、投影和连接运算。比如给出SQL语句,能够使用关系代数表示出来。

一些需要提前知道的符号:

 设关系模式为R(A1,A2,……,An), 可以看做一个二维表

 t∈R表示t是R的一个元组,即二维表的一行;

 t[Ai]表示元组t中响应属性Ai的一个分量,即一个单元格;

 若A={Ai1,Ai2,……,Aik},其中Ai1,Ai2,……,Aik是A1,A2,……,An中的一部分,则称为属性列或属性组,即一列;

 t[A]=(t[Ai1],t[Ai2],……,t[Aik])表示元组t在属性类A上诸分量的集合;


 象集:给定一个关系R(X,Y),X和Y为属性组。当t[X]=x时,x在R中的象集为:

 Yx={t[Y]|t∈R,t[X]=x},他表示R中属性组X上值为x的诸元组在Y上分量的集合。

 比较运算符:>大于,≥大于等于,<小于,≤小于等于,=等于,<>不等于;

 逻辑运算符:¬非,Λ与,Ⅴ或。

 

 

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。

传统的集合运算:

 设关系R和关系S有相同的目n,且相应属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。

 并∪:关系R与关系S的并,记作:R∪S={t|t∈RⅤt∈S},结果为n目关系,由属于R或S的元组组成;

 差-:关系R与关系S的差,记作:R-S={t|t∈RΛt∉S},结果为n目关系,由属于R但不属于S的所有元组组成;

 交∩:关系R与关系S的交,记作:R∩S={t|t∈RΛt∈S},结果为n目关系,由既属于R又属于S的元组组成;

 笛卡尔积:关系R与关系S的笛卡尔积是一个n+m列的元组的集合,记作:


专门的关系运算:

 选择:又称为限制,在关系R中选择满足条件的诸元组。记作:σF®={t|t∈RΛF(t)=’真’},F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。

 投影:关系R上的投影是从R中选择出若干属性列组成新的关系,记作:ΠA®={t[A]|t∈R},其中A为R中的属性列,投影操作是从列的角度进行的操作。


 其中,A和B分别为R和S上列数相等且可比的属性组,θ是比较运算符。连接运算从R和S的笛卡尔积中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组。

   等值连接:θ为“=”的连接运算。从关系R和关系S中选取A、B属性值相等的那些元组。

   自然连接:一种特殊的等值连接,它要求两个关系中进行比较的分量必须是同名的属性组。并在结果中吧重复的属性列去掉。

 被舍弃的元组称为悬浮元组。如果吧悬浮元组也保存到结果关系中,而在其他属性上填空值,那么这种连接就叫做外连接;如果值保留左边关系R中的悬浮元组就叫左外连接;如果只保留右边关系S中的悬浮元组就叫做右外连接。

 除运算÷:设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。R÷S={TR[X]|tR∈RΛΠY(S)⊆Yx}

 

 

9.能够利用SQL语言创建表、视图,能够使用SQL语句进行基本的增、删、改、查操作。

SQL概述:

 目前,没有一个数据库系统能够支持SQL标准的所有概念和特性。许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。

SQL的特点:

 SQL集数据查询、数据操纵、数据定义和数据控制功能于一体。

 综合统一;

 高度非过程化;

 面向集合的操作方式;

 以同一种语法结构提供多种使用方式(交互式和嵌入式);

 语言简介,易学易用。

SQL功能:

 数据定义:CREATE,DROP,ALTER

 数据查询:SELECT

 数据操纵:INSERT,UPDATE,DELETE

 数据控制:GRANT,REVOKE

创建数据库:CREATE DATABASE <数据库名>

删除数据库:DROP DATABASE <数据库名>

用户用SQL语言对基本表和视图进行操作:

 基本表:

   本身独立存在的表,一个关系对应一个表;

   一个或多个基本表对应一个存储文件;

   一个表可以带若干索引,索引也存放在存储文件中。

 存储文件:

   存储文件的逻辑结构组成了关系数据库的内模式;

   存储文件的物理结构是任意的,对用户是隐蔽的。

 视图:

   从一个或几个基本表或视图导出的表;

   是虚表,只存放视图的定义而不存放对应数据。


cc645f0d76c2466ebdea67d22d50fe09.png

关系数据库管理系统提供了一个层次化的数据库对象命名机制,数据库→模式(架构)→表、视图和索引等;schema是一个命名空间,创建在某个database下,一个database下可以包含多个schema。Schema的优点:多个用户使用同一个数据库而不会相互影响;对数据库中的对象进行逻辑分组,更便于管理;各种应用分别使用各自的模式,以避免命名冲突。


模式定义与删除:

 CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];

 DROP SCHEMA <模式名><CASCADE|RESTRICT>;


基本表的定义、删除与修改

 CREATE TABLE <表名> ( <表名> <数据类型> [列级完整性约束条件],

            <列名> <数据类型> [列级完整性约束条件],

             ……,

             [<表级完整性约束条件>]

 );


 ALTER TABLE <表名>

 [ADD [COLUMN] <新列名> <数据类型> [完整性约束]]   --添加新列

 [ADD <表级完整性约束>]                --添加约束

 [DROP [COLUMN] <列名> [CASCADE|RESTRICT]]    --删除列

 [DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]] --删除约束

 [ALTER COLUMN <列名> <新数据类型>];         --修改列数据类型


 DROP TABLE <表名> [RESTRICT|CASCADE];

 

索引建立与删除:

 建立索引是加快查询速度的有效手段。

 CREATE [unique] [clustered] index <索引名> on <表名>(<列名>[<次序>][,<列名>[次序]]…);

 用<表名>指定要建索引的基本表名字;

 索引可以建立在该表的一列或多列上,各列名之间用逗号分割;

 用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值(默认):ASC;

 unique表明此索引的每一个索引值只对应唯一的数据记录,相当于添加了unique约束;

 clustered表示要建立的索引是聚簇索引。

   聚簇索引的索引项顺序与表中记录的物理顺序一致;

   在一个基本表上最多只能建立一个聚簇索引,通常默认都是主键,设置了主键,系统默认就加上了聚簇索引。

   适用范围:

     很少对基表进行增删操作;

     很少对其中的变长列进行修改操作。

 索引代价:

   索引在数据中会占用一定的存储空间来存储索引信息;

   在对数据进行插入、修改和删除操作时,为了使索引与数据保持一直,还需要对索引进行相应维护。对索引维护需要花费时间。


 ALTER INDEX <旧索引名> RENAME TO <新索引名>;


 DROP INDEX <表名>.<索引名>;


常用完整性约束:

 主码约束:primary key

   列级完整性约束:<列名> <数据类型> primary key

   表级完整性约束:primary key(<列名>[,…n])

 参照完整性约束:foreign key

   foreign key (<列名>) references <被参照表名> (<被参照列名>)

 唯一性约束:unique

   列级完整性约束:<列名> <数据类型> unique

   表级完整性约束:unique(<列名>)

 非空值约束:not null

   <列名> <数据类型> not null一般不能单独作为表级完整性约束条件

 取值范围约束:check

   CHECK(约束表达式)

821d8b176cac4d74b469295bd7816f08.png

查询数据:

 SELECT [ALL|DISTNCT] <目标列表达式> [,<目标列表达式>] …

 FORM <表名或视图名> [,<表名或视图名>…]|(<SELECT 语句>) [AS] <别名>

 [WHERE <条件表达式>]

 [GROUP BY <列名1> [HAVING <条件表达式>]]

 [ORDER BY <列名2> [ASC|DESC]];

 根据WHERE子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。

 ORDER BY对查询结果按照一个或多个属性列的升序ASC或降序DESC排序,默认升序。空值的显示次序由具体系统实现。

5b5be25620074ca2a8ef3bdc346b4271.png

AS:取别名


 聚集函数:

   COUNT()

     COUNT([DISTINCT|ALL] <列名>) --统计一列中值的个数

     SUM([DISTINCT|ALL] <列名>) --计算一列值的总和(必须是数值型)

     AVG([DISTINCT|ALL] <列名>) --计算一列值的平均值(必须是数值型)

     MAX([DISTINCT|ALL] <列名>) --求一列值中的最大值

     MIN([DISTINCT|ALL] <列名>) --求一列值中的最小值

       DISTINCT计算时取消重复值,ALL(默认)不取消。

 当聚集函数遇到空值时,除COUNT()外,都跳过空值而只处理非空值。WHERE不能在聚集函数中作为条件表达式,聚集函数只能用于SELECT和GROUP BY中的HAVING子句。


 连接查询:

   [<表名1>.]<列名1><比较运算符> [<表名2>.] <列名2>

   [<表名1>.]<列名1> BETWEEN [<表名2>.] <列名2> AND [<表名2>.] <列名3>

   自身连接:一个表与自己进行连接;

   外连接:只有满足连接条件的元组才能作为结果输出。

     左外连接:列出左边关系中所有的元组;

     右外连接:列出右边关系中所有的元组。

   多表连接:两个以上的表进行连接。

 嵌套查询:

   一个SELECT-FROM-WHERE语句称为一个查询块,一个查询块中嵌套另一个查询块称嵌套查询。上层的查询块称为外层查询或父查询,下层的查询块称为内层查询或子查询。子查询中不能使用ORDER BY子句。

   子查询的查询条件不依赖于父查询,称为不相关子查询。

   子查询的查询条件依赖于父查询,称为相关子查询。

   带有ANY(SOME)或ALL谓词的子查询:

     ANY(有些系统用的是SOME):返回任意一个符合条件的值;

   ALL:返回所有符合条件的值。

   ANY和ALL前面必须使用比较运算符。

   带有EXISTS谓词的子查询:

     EXUSTS代表存在量词∃。带有EXISTS的子查询不返回数据,值产生逻辑真或逻辑假。EXISTS前可以加上NOT。

 集合查询:

   SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作主要包括并UNION、交INTERSECT和差EXCEPT。

基于派生表的查询:

   子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象。通过FROM子句生成派生表时,必须为派生关系指定一个别名。


插入数据:

 插入元组:

   INSERT

   INTO <表名> [(<属性列1> [,<属性列2>]…)]

   VALUES (<常量1> [,<常量2>]…);

   字符串常数要用英文单引号括起来。

 插入子查询结果:

   INSERT

   INTO <表名> [(<属性列1> [,<属性列2>…])]

   子查询;


修改数据:

 UPDATE <表名>

 SET <列名>=<表达式> [,<列名>=<表达式>]…

 [WHERE <条件>];

 修改指定表中满足WHERE子句条件的元组,其中SET子句给出<表达式>的值用于取代响应的属性列值。

 修改某一个元组的值;

 修改多个元组的值;

 带子查询的修改语句。


删除数据:

DELETE

FROM <表名>

[WHERE <条件>];

DEKETE语句删除的是表中的数据,而不是关于表的定义。

删除某一个元组的值;

删除多个元组的值;

带子查询的删除语句。


定义视图:

 CREATE VIEW <视图名> [(<列名>[,<列名>]…)]

 AS <子查询>

[WITH CHECK OPTION]

 子查询可以是任意的SELECT语句。

 组成视图的属性列名要么全部省略要么全部指定,以下情况必须全部指定:

   某个目标列不是单纯的属性名,而是聚集函数或列表达式;

   多表连接时选出了几个同名列作为视图的字段;

   需要在视图中为某个列启用新的更合适的名字。

 从单个表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码的视图成为行列子集视图。

 可以在一个或多个已定义好的视图上,或在基本表与视图上建立视图。

 带有聚集函数和GROUP BY子句的查询来定义视图,这种视图称为分组视图。


删除视图:

 DROP VIEW <视图名> [CASCADE];


查询视图:

 视图定义后,用户可以像对基本表一样对视图进行查询。

 从数据字典中取出视图的定义,把定义中的字查询和用户的查询结合起来,转换成等价的对基本表的查询,然后执行修正了的查询,这个过程称为视图消解。


更新视图:

 更新视图是指通过视图来插入(INSERT)、删除(DELETE)和修改(UPDATE)数据。

 视图是不实际存储数据的虚表,所以对视图的更新最终要转换为对基本表的更新。

 并不是所有视图都是可更新的。


视图的作用:

 简化用户的操作;

 使用户能以多种角度看待同一数据;

 对重构数据库提供了一定程度的逻辑独立性;

 能够对机密数据提供安全保护;

 适当利用视图可以更清晰的表达查询。


目录
相关文章
|
Python
【Python】4. 人生重开模拟器(简易版)
【Python】4. 人生重开模拟器(简易版)
417 2
|
JavaScript
关于“wap2app仅支持对已通过ICP备案的域名站点进行打包”问题解决
关于“wap2app仅支持对已通过ICP备案的域名站点进行打包”问题解决
关于“wap2app仅支持对已通过ICP备案的域名站点进行打包”问题解决
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
1448 0
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
接口测试——fiddler对soapui请求返回信息抓取
原文:接口测试——fiddler对soapui请求返回信息抓取 背景:接口测试的时候,需要对接口的请求和返回信息进行查阅或者修改请求信息,可利用fiddler抓包工具对soapui的请求数据进行抓取或修改。
1764 0
|
3月前
|
人工智能 IDE API
阿里云百炼Coding Plan深度解析:Pro套餐、接入配置与省钱订阅指南
阿里云百炼Coding Plan是面向开发者打造的AI编程专属订阅服务,聚焦代码生成、调试、重构、单元测试等全开发场景,采用固定包月+定额调用次数模式,解决按量计费账单不可控、多模型切换需要多套API、工具适配繁琐等行业痛点。2026年平台完成产品迭代,Lite基础版全面停止新购与续费,当前仅保留Pro高级版作为唯一可用套餐。本文从产品定位核心能力、套餐计费规则、多工具接入实操、成本优化技巧、与Token Plan差异、适用人群选型六个维度完整拆解,帮助开发者快速上手、控制编码AI使用成本。
828 2
|
6月前
|
JSON 算法 API
调用拼多多开放平台API获取店铺所有商品列表
本文详解拼多多开放平台商品列表API(pdd.goods.list.get)调用方法,涵盖授权流程、签名生成、关键参数、分页处理及响应解析,助力商家/开发者高效获取全量商品数据,适用于商品管理、数据分析等场景。(239字)
1122 1
|
11月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
496 0
|
监控 安全 前端开发
解析2026年最新商业版交友系统小程序APP源码开发攻略功能实现步骤/搭建要求步骤解析
本文详解婚恋交友APP源码开发全流程:涵盖需求分析(用户定位、核心/增值/安全功能)、技术选型(uniapp前端、PHP+WebSocket/WebRTC后端、MySQL数据库)、开发测试(功能/性能/安全三重验证)及上线迭代(Docker部署、Prometheus监控)。重点解析语音视频聊天实现方案。
259 0
解析2026年最新商业版交友系统小程序APP源码开发攻略功能实现步骤/搭建要求步骤解析
|
人工智能 Java 测试技术
通义灵码2.0·AI程序员加持下的智能编码实践与测评
通义灵码2.0是阿里云推出的新一代智能编程助手,集成DeepSeek模型并新增多项功能,显著提升开发效率。本文通过实际项目体验新功能开发、跨语言编程、单元测试自动生成和图生代码等功能,展示其在代码生成、质量内建和人机协作方面的优势。相比1.0版本,2.0在模型选择、代码质量和用户体验上均有显著提升。尽管存在依赖网络和多语言混合项目中的不足,但整体表现优异,极大优化了开发流程。[了解更多](https://lingma.aliyun.com/)
2089 59
|
8月前
|
JavaScript 前端开发 Apache
如何用vue-echarts实现面积图?
本文介绍如何使用 Vue-Echarts 封装面积图组件,涵盖实现效果、思路及完整代码。通过配置 `areaStyle` 实现填充区域,并支持多条数据曲线与颜色自动循环,提升开发效率。附详细代码与配置说明,适合前端开发者参考学习。
326 0