《数据库技术》1.2.1.2.5 选择运算(Selection)

标签:
it |
分类: 数据库 |
1.2.1.2.5
选择运算(Selection)
Figure 1.2.1.2.3 在单个关系上作选择运算的例子
这个例子演示了从一个法规数据库中筛选出需要的法律条文来,税法是一个关系,我们要看的是涉及到增值税的视同销售的情形。则我们的对单个的关系进行的选择运算用关系代数的形式表达如下:
δ$3=”增值税”∧$6>”2000”∧$4 like(“%视同销售%”)(税法)
注意这个表达式使用的是字段在元组中的顺序号,而不是字段名称,因为对于关系代数关系是以元组的形式出现的,元组本身不包括元数据,元组各个字段的先后顺序是重要的。在实用的数据库中,SQL语句使用字段名进行选择运算,如
δ$3=”增值税”∧$6>”2000”∧$4 like(“%视同销售%”)(税法) 可以用SQL语句
Select * from 税法 Where 类别=’增值税’
And 年>’2000’ And 内容 Like ‘%视同销售%’
表示,关系代数和SQL只是在表现方式上不同,但都使用了关系模型。另外在这个例子中,我们不仅使用了算术比较运算符,我们还使用了字符串比较的运算符Like,Like用于对两个字符串进行匹配(Like的详细资料以及其他的字符处理函数或其它的数据类型的处理函数请参阅具体的数据库系统的手册)。
目前虽然说ANSI/SQL正在成为一个标准,但目前绝大多数的数据库厂商之间为了竞争,为了发展自己的独有技术,即使是在最基本的SQL上,也对SQL-92标准作了大量的扩充和修改,有的是作了精炼。“Entry
Level
SQL92”,该标准版本由以下要素组成:表、列、数据类型、键索引、schema操作、行和表约束、视图、基本关系操作以及编程语言绑定等。如MS
SqlServer2000开发了Case
When子句,并且引入了多维数据分析的概念,把一个分组求和的SQL语句返回的结果看作是一个多维数据立方体,可以对RDBMS进行Rollup操作等等,但Oracle
8却对Compute by子句都不支持,只能让用户使用Group
by子句进行分组求和的运算。数据库厂商对SQL本身就执行了不同的策略,更不用去说存储过程的编写语法、数据类型、字符串处理函数、日期类型处理、大文本、多媒体、数据库安全、约束、规则等等了。所以,即使对关系模型和SQL语句十分熟悉也很难保证对任何一种数据库系统的运用自如。例如,对于MS
SQLServer和Sybase数据库,对日期型数据的处理比较类似于字符串的处理,如:
(‘Kate’,’1963/02/12 18:32:46’) --Kate,出生时间精确到秒
当我们要查询出1949年10月1日零点零分之后出生的,可以
但在Oracle系统中,如果数据表中的字段是日期型(Date)的,则凡是对该字段进行插入、修改、查询等操作,必须要用到To_Date()函数先进行强制数据类型转换,把字符串类型转换为日期型。如:
Select * from profile Where
我们注意到还要对输入的日期型的数据进行转换,YYYY表示年份,MM表示月份,DD表示具体几号。
各个数据库厂商之间对SQL支持的差异性我们在后面的章节中讨论。