文档介绍:第五章关系数据库标准语言SQL
主讲教师:杨勇
SQL概述
(1)SQL语言的特点:
①SQL是一种一体化语言
②SQL语言是一种高度非过程化的语言
③SQL语言非常简洁
④SQL语言可直接以命令方式交互使用,也可嵌入到程序设计语言中以程序方式使用
(2)SQL语言的功能
①数据查询
②数据定义
③数据操纵
④数据控制
查询功能
Visual FoxPro的SQL SELECT命令的语法格式:
SELECT [ALL|DISTINCT] [TOP <数值表达式>[PERCENT]] <字段名表> FROM [FORCE] [数据库名] <表名> [[AS] <别名>] [[INNER|LEFT [OUTER]|RIGHT [OUTER]|FULL [OUTER] JOIN 数据库名] <表名> [[AS] <别名>] [ON <条件>] [[INTO <目标文件>]|[TO FILE <文本文件名> [ADDITIVE]|TO PRINT [PROMPT]|TO SCREEN]] [PREFERENCE <名称>] [NOCONSOLE] [PLAIN] [OWAIT]
[WHERE <条件> [AND <条件>…] [AND|OR <条件> [AND|OR <条件>…]]]
[GROUP BY <字段名>[,<字段名>…]] [HAVING <分组条件>] [UNION [ALL] <查询命令>]
[ORDER BY <表达式> [ASC|DESC][,< 表达式> [ASC|DESC]…]]
表:
简单查询
SELECT <字段名表>|* FROM <表名> [WHERE <条件>]
简单联接查询
SELECT <字段名表>|* FROM <表名> [WHERE <条件> AND <条件>]
嵌套查询
SELECT <字段名表>|* FROM <表名> [WHERE <条件> [NOT] IN (SELECT <字段名表>|* FROM <表名> [WHERE <条件>])]
外层查询依赖于内层查询的结果,而内层查询与外层查询无关。
几个特殊运算符
<数值型字段名> BETWEEN…AND…表示“介于…和…之间”;
LIKE是字符串匹配运算符,在其后可使用”%公司”、”_公司”等字符串。
别名与自联接查询
在联接操作中,经常需要使用关系名作前缀,有时这样显得很麻烦。因此,SQL允许在FROM短语中为关系名定义别名,格式为:<关系名> <别名>
SQL不仅可以对多个关系实行联接操作,也可以将同一关系与其自身进行联接,这种联接称为自联接。在可以进行自联接操作的关系上,实际存在着一种特殊的递归联系,即关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的联系)。
内外层互相关嵌套查询
在嵌套查询中,有时内层查询的条件需要外层查询提供值,而外层查询的条件又需要内层查询的结果,这种查询为内外层互相关嵌套查询。格式如下:
SELECT <别名1>.<字段名1>[,<别名1>.<字段名2>…] FROM <表名> <别名1> [WHERE <条件> [NOT] IN (SELECT <表达式> FROM <表名> <别名2> WHERE <别名1><字段名>=<别名2><字段名>)]
注:在此种查询中,是给一个表取了两个不同的别名;也就是说,无论外层还是内层都是在一个关系中进行的查询。通俗的看,就是将一个表看成两份。
使用量词和谓词的查询
前面我们使用过IN的NOT IN运算符,除此之外还有两类和子查询有关的运算符,形式如下:
<表达式><比较运算符>[ANY|ALL|SOME] (子查询)
[NOT] EXISTS (子查询)
ANY、ALL和SOME是量词,其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL要求子查询中的所有行都使结果为真时,结果才为真。
EXISTS是谓词,EXISTS和NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。
SELECT <字段名表>|* FROM <表名> WHERE <表达式><比较运算符>[ANY|ALL|SOME] (子查询)
SELECT <字段名表>|* FROM <表名> WHERE [NOT] EXISTS (子查询)
超联接查询
Visual FoxPro有关门的联接运算语法格式,它支持超联接查询,我们从SQL SELECT语句的完事语法格式中抽出与联接运算有关的语法格式如下:
SELECT…… FROM <表名1> [INNER|