浅谈SQL查询功能的三个理论基础

时间:2022-08-08 01:04:49

浅谈SQL查询功能的三个理论基础

摘要:文章以Visual FoxPro 6.0数据库管理系统为软件平台,通过查询实例阐述结构化查询语言(Structured Query Language,简称SQL)如何反映关系数据库三级模式结构,如何体现关系代数和关系演算思想。

关键词:关系数据库三级模式结构;关系代数;关系演算;SQL

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)15-30606-03

Simply Talking about the Three Theoretics Foundation of the SQL Query Function

FU Si-ping

(Quanzhou Economic & Trade Polytechnic,Quanzhou 362000,China)

Abstract:The text uses the Data Base Management System-Visual FoxPro 6.0 as a flat-top building, expands on the Structured Query Language how to explain the three layer structure of relation DB through the select example and how to reflect the thought ofrelation algebra and relation mathematical calculation.

Key words:the three layer structure of relation DB ;relation algebra;relationmathematical calculation;SQL

1 引言

现代生活中,数据库管理系统(DBMS)被广泛应用于各个领域,人们利用它来存储数据,并方便地从中查询所需的数据。DBMS利用SQL来实现其查询功能,为了更好地体现查询机制,文章先介绍与查询功能密切相关的三个理论基础――关系数据库三级模式结构、关系代数、关系演算,然后用实例来阐述查询功能如何反映这三个理论基础。

2 关系数据库三级模式结构

关系模型遵循数据库的三级体系结构,即关系模式、关系子模式和存储模式。SQL语言支持关系数据库三级模式结构,但是术语与传统关系模型术语不同。在SQL中,关系模式称为“基本表”,关系子模式称为“视图”,存储模式称为“存储文件”。三者关系如下图所示。

图1关系数据库三级模式结构

存储文件是指数据表存储在硬盘上的结构,与外部存储器上的一个物理文件对应。

基本表是用户看到和使用的数据的描述,是用户与数据库的接口,它由存储文件通过映射关系得到。一个基本表可以跨越一个或多个存储文件,一个存储文件也可以存放一个或多个数据表。基本表是本身独立存在的表,视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。

SQL用户可以是应用程序,也可以是终端用户。用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。

3 关系代数

关系数据库的查询语言分为两大类:关系代数语言和关系演算语言。

关系代数语言的查询操作是以集合操作为基础的运算。最基本的五种操作为并、差、笛卡儿积、投影和选择。

并:设有R和S具有相同结构的关系模式,R和S的并是由属于R或属于S的元组组成的集合,记为R U S。

差:关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组组成的集合,记为R-S。

笛卡儿积:设关系R和S的元组数分别为r和s。定义R和S的笛卡儿积是一个(r+s)元的元组集合,每个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组,记为R X S。

投影:该操作对关系进行垂直分割,得到关系的某一列(字段),记为Πi1,i2,…ik(R)。

选择:该操作对关系进行水平分割,得到关系的某一行(元组),记为σF(R)。

4 关系演算

关系演算语言的查询操作是以数理逻辑为中心的谓词演算为基础的运算。

谓词(predicate)指明一个条件,通过对它的求解可得出下列之一的值:“真”、“假”、“未知”。常见的谓词有比较谓词:>,≥,

4.1 元组关系演算

在元组关系演算中,元组关系演算表达式(简称为元组表达式)用表达式{t│Q(t)}来表示,其中t是元组变量,它表示一个定长的元组,Q(t)是公式,公式是由原子公式组成的。原子公式有下列三种形式:

R(s),其中R是关系名,s是元组变量。它表示这样的一个命题:“s是关系R的一个元组”。

s[i]θu[j],其中s和u都是元组变量,θ是算术比较运算符。该原子公式表示这样的命题:“元组s的第i个分量与元组u的第j个分量之间满足θ关系”。例如,s[1]

s[i]θa或aθs[i],这里a是一个常量。前一个原子公式表示这样的命题:“元组s的第i个分量与常量a之间满足θ关系”。

在一个公式中,如果一个元组变量的前面没有存在量词Э或全称量词等符号,那么称之为自由元组变量,否则称之为约束元组变量。元组表达式的一般形式{t│Q(t)}中,t是Q中唯一的自由元组变量。

关系代数的五种基本操作均可用元组表达式来表示。其表示如下:

1)并:R∪S={t│R(t)∨S(t)}

2)差:R-S={t│R(t)∧S(t)}

3)投影:Πi1,i2,…ik(R)={t(k)│(Эu)(R(u)∧t[1]=u[i1]∧t[2]=u[i2]∧…t[k]=u[ik])}

4) 选择:σF(R)={tOR(t)∧F’}

5) 笛卡儿积:R×S={t― ($u) ($v) (R(u) ∧ S(v) ∧t[1]=u[1] ∧ t[2]=u[2] ∧ t[3]=u[3] ∧ t[4]=v[1] ∧ t[5]=v[2] ∧ t[6]=v[3] )}

4.2 域关系演算

用表达式{x1,x2,…xk|φ(x1,x2,…xk)}来表示,其中x1,x2,…xk是域变量,是由关系、域变量、常量及运算符组成的式子。

{x1,x2,…xk|φ(x1,x2,…xk)}表示所有使φ(x1,x2,…xk)为“真”的那些x1,x2,…xk组成的元组的集合。每一个关系代数表达式有一个等价的域演算表达式,反之亦然。

域关系演算和元组关系演算是类似的,不同之处是用域变量代替元组变量的每一个分量。与元组变量不同的是,域变量的变化范围是某个值域而不是一个关系。可以像元组演算一样定义域演算的原子公式。域演算的原子公式有以下两种形式:

・R(x1…xk),R是k元关系,每个xi是常量或域变量。

・xθy,其中x,y是常量或域变量,但至少有一个是域变量,θ是算术比较运算符。

域关系演算的公式中也可使用∨、∧、等逻辑运算符,还可用(Эx)和(x)形成新的公式,但变量x是域变量,不是元组变量。

5 Visual FoxPro的SQL数据查询功能

SQL用来与数据库管理系统通信,集数据定义、数据操纵、数据管理的功能于一体,是一个通用的、功能极强的关系数据库语言,已被众多的数据库管理系统所采用,既可以用于远程的基于服务器的数据,如ORACLE、SQL Server,又可以用于本地数据库,如Visual FoxPro、PowerBulider和ACCESS以及符合ODBC的数据库。SQL功能包括数据查询、数据操纵、数据定义和数据控制4个方面。

本文利用Visual FoxPro的SQL查询功能来阐述观点,分为三步。

第一步:建立需要的数据表。

利用Visual FoxPro6.0定义一个教学数据库,包括五个基本表S1(计算机1班学生表)、S2(计算机2班学生表)、SC2(计算机2班选课情况表)、CO(课程) 、TY2(计算机2班团员表)。表结构如下:

S1(SN,SNAME,AGE,SEX)

S2(SN,SNAME,AGE,SEX)

SC2(SN,CN,GRADE)

CO(CN,CNAME,TEACHER)

TY2(SN,SNAME,AGE,SEX)

其中SN代表学生学号,SNAME代表学生姓名,AGE代表学生年龄,SEX代表学生性别,CN代表课程号,GRADE代表成绩,CNAME代表课程名,TEACHER代表任课教师。

图2教学数据库

表1计算机1班学生表

表2计算机2班学生表

表3计算机2班选课情况表

表4课程表

表5计算机2班团员表

第二步:反映三级模式结构。

所看到的S1、S2、SC2、CO、TY2五个数据库表属于三级模式结构中的第二层,具体五个表如何存放在存储设备上(即第一层),对我们而言是透明的。那么,第一层和第二层之间如何转换呢?是通过映射关系得到的。

数据查询是在相互关联的表中查询所需要的数据,本质是对第二层执行SELECT命令。第一层对SELECT命令来讲,也是透明的。通过查询看到的结果属于三级模式结构中的第三层,是建立在第二层之上的一种满足用户需求的“映射假相”。

第三步:体现关系代数和关系演算的思想。

Visual FoxPro中在对关系数据库中的数据表进行查询时,找到用户感兴趣的数据,就需要对关系进行一定的关系运算。关系运算的基本运算有两大类:一类是传统的集合运算(并、差等),另一类是专门的关系运算(选择、投影、联接),沿用了关系代数和关系演算的概念。

在第二步了解了三级模式结构的互相参照关系之后,来了解SELECT命令结构,结构如下:

SELECT子句:说明需要查询的数据项目―必需;

FROM子句:数据项目的来源(表或视图)―必需;

WHERE子句:查询的条件或多表联接条件,运算符:比较、LIKE、IN、BETWEEN… AND…、OR、NOT、AND;

下面通过查询实例,说明关系代数、关系演算的五种基本操作和关系演算的谓词运算如何体现在SQL的查询功能中,及其它们的对照写法。

功能一、并

例如:要查看计算机班的所有学生记录,需要合并S1和S2两个学生表的内容。

关系代数写法:S1∪S2

关系演算写法:{t│S1(t)∨S2(t)}

SQL写法:SELECT * FROM S1 UNION SELECT * FROM S2

通过两个SELECT语句,找出两个表的内容。把一个SELECT语句的结果看作一个集合,结果为两个集合,利用UNION实现两个结果合的合并操作。

表6 S1并S2结果表

功能二、差

VFP中,标准 SQL没有直接提供集合的差运算,但可以用其他方法实现。

例如:查询计算机2班学生表中不是团员的记录。可以通过对计算机2班学生表S2和团员表TY2做差集操作(即所有学生扣掉团员学生)。

关系代数写法:S2-TY2

关系演算写法:{t│S2(t)∧TY2(t)}

SQL写法:SELECT * FROM S2 WHERE SN NOT IN (SELECT SN FROM TY2)

先用内层查询查找团员表TY2的学号SN,传给外层查询作为外层条件语句的一个限制值,学生表S2中的SN不在团员表TY2中的记录为最终的结果,实现了差操作。

表7 S2差TY2结果表

功能三、笛卡儿积

例如:对S2和CO两个表做笛卡儿积。

关系代数写法:S2 X CO

关系演算写法:{t― ($u) ($v) (S2 (u) ∧CO (v) ∧t[1]=u[1] ∧ t[2]=u[2] ∧ t[3]=u[3] ∧t[4]= u [4] ∧ t[5]=v[1] ∧ t[6]=v[2] ∧ t[7]=v[3] )}

SQL写法:SELECT SN,SNAME,AGE,SEX,CN,CNAME,TEACHER FROM S2,CO

结果学生表S每条记录和课程表CO的每条记录搭配一次,通过SELECT语句指定两个表的字段在无限制条件的情况下选择到一个新的关系中,实现了笛卡儿积。

表8 S2和CO笛卡儿积结果表

功能四、投影

例如:查找S2表中学生的姓名和年龄。

关系代数写法:Π姓名,年龄(S2)

关系演算写法:{t(2) │(ЭU)S2(U) ∧t[1]=U[2] ∧t(2)=U(3)}

SQL写法:SELECT SNAME,AGE FROM S2

结果显示了学生表S的姓名SANME和年龄AGE两个字段,对关系进行了垂直分解,实现投影操作。

表9 S2投影

功能五、选择

例如:查找S2表中性别为男的学生资料。

关系代数写法:σ性别=“男”(S2)

关系演算写法:{ t|S2(t) ∧t[4]=”男”}

SQL写法:SELECT*FROMS2WHERE SEX=”男”

结果显示出性别SEX为男的记录,得到筛选的结果,对关系进行了水平分解,实现选择操作。

表10 S2选择

功能六、谓词

SQL中,谓词用在嵌套查询语句中,谓词有IN、NOT IN、EXISTS和NOT EXISTS。

例如:通过计算机2班学生表S2和计算机2班团员表TY2,查询计算机2班不是团员的记录。可以用谓词来实现。

谓词检查子查询中是否有结果返回,在团员表TY2中不存在的元组,而在学生表S2中存在的,即为满足条件的结果。

关系演算写法:{ t1t2t3t4OS2(t1t2t3t4) ∧TY2(t1t2t3t4)}

SQL写法:SELECT * FROM S WHERE NOT EXISTS;

(SELECT * FROM TY WHERE S.SN=TY.SN)

表11 谓词操作

6 结束语

SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。但当我们了解SQL怎么做的一些原理,有助于在实现不同层次的查询功能时,思路更清晰,效率更高。

文章阐述了SQL查询功能的三个相关理论知识,以及SQL查询功能如何体现这些理论点。SQL功能强大,还有很多知识需要大家共同探讨。

参考文献:

[1]王利.全国计算机等级考试二级教程―Visual FoxPro程序设计.北京:高等教育出版社,2004.

[2]王春森.系统设计师(高级程序员)教程.北京:清华大学出版社,2002.249-277.

[3]史嘉权.数据库系统基础教程.北京:清华大学出版社,2000.121-145.

[4]萨师煊,王珊.数据库系统概论.北京:高等教育出版社,2000.

[5]耿素云.离散数学(第2版).北京:清华大学出版社.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:企业采购管理系统的设计与实现 下一篇:教你用聊天工具写日记