没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
结构化查询语言
SQL 是结构化查询语言(structrued query language)的缩写,它实际上包括查询、定义、操
纵和控制四个部分,是一种功能齐全的数据库语言。该语言早在 70 年代中期由 Boyce 和
Chamberlin 提出。由于 SQL 具有语言简洁、方便实用、功能齐全等突出优点,很快得到推
广和应用,随着关系数据库的流行,SQL 在计算机界和广大用户中已经得到公认。
1986 年 10 月美国国家标准局(ANsI)的数据库委员会颁布了 sQL 的美国标渡,作为标准关
系数据库语言。1987 年 6 月,国际标准化组织(1So)采纳 5QL 为关系数据库语言的国际标
准。我国也在 90 年制定了 sQL 标准。实际系统中实现的 sQL 语言往往对标准版本有所扩
充。
目前,各种数据库管理系统几乎都支持 sQL,或者提供 5QL 的接口。这就使得无论
是大型机、中型机,或者小型机以至微机上的各种数据库系统都有了共同的存取语言标准
接口,为更广泛的数据共享开创了乐观的前景。例如,oracle、sybase 的微机版.微机关系
数据库管理系统 dBASEN、FoxProfor wind。ws 等也支持 SQL。
sQL 作为查询标准语言的影响已波及到数据库领域之外,在人工智能、软件工程等
领域的产品中也开始采用阳 L 作为数据和图形及其它对象的检索工具。
sQL 有两种使用方法,一种是以与用户交互的方式联机使用,另一种是作为子语言
嵌入到其它程序设计语言中使用。前者称为交互式 sQL,适合非计算机专业人员,即最终
用户即席查询。后者称为宿主型 sQL,适合于程序设计人员用高级语言编写应用程序并
与数据库打交道时.嵌入到主语言中使用。这两种使用方法的基本语法结构一致,这里只
介绍交互式 sQL。由于它是在联机条件下直接使用的,有时也将每一个独立的操作叫做
命令。
阳 L 的查询语句也称作 sELEcT 命令,其基本形式是 SELEcT—FRoM—wHERE
查询块。多个查询块可以逐层嵌套执行。朗 L 的查询是高度非过程化的,用户只带明确提
出“要干什么”,而不需要指出“怎么去干”。系统将自动对查询过程进行优化,用户感到效
率高,其员大优点是查询速度快。
用户要向系统讲清楚“要干什么”,需要把询问用语言规定的查询格式表示出来。sQL
基本查询模块的结构是:
SELECT <表达式 l>,<表达式 2>,…,<表达式 n>
FRoM <关系 1>,<关系 2>,…,<关系 m>
WHERE <条件表达式>;
其中 sELEcT 子句中用逗号分开的表达式为查询目标。最常用也是最简单的是用逗号分
开的同性名,即二维表中的列。系统对查询结果按照所需的届性进行投影运算。
FRoM 子句指出上述查询目标及下面 wHKRE 子句的条件中所涉及的所有关系的
关系名。
wHERE 子句指出查询目标必须满足的条件.系统根据条件进行选择运算,输出条
件为真的元组集合。查询要用分号表示语句结束‘
在条件表达式中除了常用的比较运算符以外,可用的逻辑运算符和谓词有:
AND 逻辑与 oR 逻辑或 NOT 逻辑非
IN 包含 N()T IN 不包含 ExIST5 存在
UNUN 集合的并 INTEESECT 集合的交 MINUS 集合的差
不同系统所提供的功能有所区别,这里只介绍一般支持 sQL 的系统共有的基本功
我们以一个简单的图书管理关系数据模型为基础,通过示例来介绍 sQL 的使用方
设,图书管理关系数摆模型包括以厂三个关系模式,
图书(总编号,分类号,书名,作者,Q 版单位,单价)
读者(情书证号,姓名,性别,单位,职称,地址) .
借阅(惜书证号,总编号,借阅日期.备注)
例 1;找出读者李欣所在的单位。
SELEC 丁姓名,单位
FROM 读者
wHERE 姓名=r9 犷;
例 2:查看所有读者的全部情况。
SE 乙 ECT,
FROM 读者;
SELECT 子句里的星号
由于询问中无条件限制,故省略 wHERE 于句,但要注意用分号表示查询语句结束。
例 3:列出馆中所有藏书的书名及出版单位。
SELECT DISTINCT 书名,出版单位
FRoM 图书;
询问中只对藏书种类的书名和出版单位感兴趣,无论藏书有多少副伞只列出一个即
可。因此,用 DIsTINcT 告诉系统从查询结果中取掉重复元组。由用户决定是否去除重
复元组是有实际意义的。若不选用 DISTINcT,系统默认 ALL 即无论重复与否全部给
出。
例 4:查找人民出版社的所有图书及单价,结果按单价降序排列,即珍贵书籍在前 。
SEIECT 书名,出版单位,单价
FROM 图书
wHERE 出版单位=”人民出版社”
ORDER BY 单价 D[SC;
这里用 ORDE 硬 BY 对查询结果提出排序要求。
ASt(Ascendiing)表示升序。
例 5:查找价格介于 10 和 15 元之间的图书,结“
sELEcT 书名,作者,单价,分类号
F 肋 M 图书
WHERE 单价 BETWEENl0AND 20
ORDER BY 分类号,单价 ASC;
E 按分类号和单价升序排列。
消 BETwEEN 表示在二考之间,低值在 AND 之前肩值在后。其等价的表示方法是
(wHERE 单价>=10 AND 单价<=20)。用 A5c 指出升序,也可以省略,由系统默认。
sQL 允许多重排序。oRDER BY 后面按次序给出主排序关镊字和次排序关键字。输
出结果先按主排序关键字的值排列,在主关键字值相等的情况下,再按次关键字的值排
序。
例 6:查找人民出版社和科学出版社的所有图书及作者。
sELECT 书名,作者,出版单位
FRoM 图书
wHERE 出版单位 IN(”人民出版社”,”科学出版社”);
这里的谓词[N 表示包含在其后面的集合中。也可以用一个或几个 oR 来代替,此问
题的等价查询语句是:
驱 I—EcT 书名,作者,出版单位
FROM 图书
wHERE 出版单位=”人民出版社”oR 出版单位=研学出版社”;
相比之下,用 1N 不仅书写简洁,而且会减少出现逻辑错误的机会。由于问题中的
“和”字,用户可能将 oR 误写为 AND。因为同一本书不可能在两家出版单位出版,结果
什么也查不到。语法正确,但没有表达出询问的原意周十逻辑错误。逻辑错误是用户把
“要干这个”表示成了“要干那个”,往往使查询结果“所答非所问”。
例 7:查找书名以“数据库”打头的所有图书及作者。
SELECT 书名,作者
FROM 图书
WHERE 书名 LIKE“数据库%”;
渭词 I—IKE 后面必须是字符串常量,其中可以使用两个通配特
下划线代表任意一个单个字符。其作用与 Dos 中的?相同。百分号%代表任意多个,包括
零个任意字符。其作用与飘)5 中的,类似。
例如:wH 更 RE 书名 LIKE”%数据库%”; 包含”数据库”的书名。
wHERE 书名 I‘IK 置”%数据库”i 以”数据库防尾的书名。
wHERE 作者 NKz”%强——”; 作者姓名至少四字符(两个汉字)且倒数第:
个汉字是“强”字。
例 8;检索借了总编号为 500088 和 100909 两本书的借书证号
5ELECT x。借书证号
FROM 借问 x,借问 Y
wHERc x.借书证号=Y.借书证号
AND X.总编号=rf500088v
AND Y.总编号=”100909”;
由于同一个关系在一个查询模块中出现两次
wHERK 子句中用别名加以限定。
以上简单查询只涉及到一个关系,如果查询目标涉及到两个或几个关系,往往要;t
联接运算。由于 sQL 是高度非过程化的,用户只要在 FROM 子句中指出关系名称
wHERE 子句写明联接条件即可,联接运算由系统去完成并实现优化*
例 9:查找所有俗阅丁图书的读者姓名及所在单位*
SELECT DISTINCT 姓名,单位
FBOM 读者,借阂
wHER2 读者.借书证号=借闻.借书证号;
必须注意,如果不同关系中有相同的属性名,为了避免混淆应当在前面冠以关系名并
用.分开。用 D15 了 INCT 表示无论一位读者借几本书,在输出结果中只出现一次。
例 10:找出李晶所借的所有图书的书名及借阅日期。
5 厦 LECT 姓名,骄借图书:”,书名,借阅日期
FROM 图书,借阅,读者
W 服 RE 读者.借书证号=借阅.俗书证号
AND 借阅.总编号=图书.总编号
AND 姓名=毕晶”;
查询涉及到三个关系之间的自然联接,用户只需用外关键字指出联接条件,SELEC 丁
子句中允许有字符串常量(表达式的简单情况),W 中斯借图书:r6 用户作为提醒,使查
询结果易于阅读。
例 11:查找价格在 20 元以上已借出的图书,结果按单价降序排列。
SEI‘ECT,
FRoM 图书,借阅
wHERE 图书.总编号=借阅.总编号 AND 单价>=20
ORDER BY 单价 DESC;
这里 SELECT * 代表图书和借问两个关系联接后的所有属性
3.1.3 饯套查询
嵌套查询是指在 sELEcT—FRoM—wHERE 查询块内部再嵌入另一个查询块,称为
子查询,并允许多层嵌套。由于 ORDER 子句是对最终查询结果的表示顺序提出要求,
因
此它不能出现在子查询当中
例 12:找出借阅了“c 语言程序设计”
此询问可以用联接查询来完成;
sELEcT 姓名,单位
FRoM 读者,借阅,图书
wHERE 读者.借书证号=借闽.借书证号
AND 倍阅.总编号=图书.总编号
AND 书名=rrc 语言程序设计”;
对于非专业用户来讲 wHERE 子句中的条件可能过于复杂,往往丢掉一部分联接条
下面的嵌套查询形式则清晰、自然并可体现出结构化程序设计的优点:
sELECT 姓名,单位
FROM 读者
WHERE 借书证号 IN
(SELECT 借书证号
FR()M 借问
WHERE 总编号 IN
SELECT 总编号
FROM 图书
wHERE 书名=pc 语言程序设计”);
在执行嵌套查询时,每一个内层子查询是在上一级外层处理之前完成的,即外层用到
内层的查询结果。从形式上看是自下向上进行处理的。从这个规律出发,按照手工查
询的
思路来组织嵌套查询就轻而易举了。
在嵌套查询中最常用的是谓词 IN。由于查询的外层用到内层的查询结果,用户事先
并不知道内层结果,这里的 IN 就不能用一系列 oR 来代替。另外,并非所有的嵌套查
询
都能用联接查询替代,有时结合使用更显得简洁、方便。例如:
例 13:找出读者的姓名、所在单位,他们与玉鸣一在同一天借了书。
sELEcT 姓名,单位,借阅日期
FROM 读者,借阅
wHERE 借问.借书证号=读者.借书证号 AND 借阅日期 IN
(SELECT 借书日期
FRoM 借阅,读者
wHERE 借闻.借书证号=读者.借书证号 AND 姓名=”王鸣
例 14:找出藏书中比高等教育出版社的所有图书单价更高的书籍。
剩余16页未读,继续阅读
资源评论
- ClaireQi2017-11-24很基础,但用处并不是太大
- adamshuang2016-04-11很好的资料!!!
jianghe0126
- 粉丝: 0
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功