程序设计数据库基础_第1页
程序设计数据库基础_第2页
程序设计数据库基础_第3页
程序设计数据库基础_第4页
程序设计数据库基础_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2

结构化查询语言SQL历史SQL:

Structured

Query

Languang1974年,由Boyce和Chamber提出1975-1979年,在System

R上实现,由IBM的San

Jose研究室研制,称为SequelSQL标准化有关组织ANSI(American

Natural

Standard

Institute)ISO(International

Organization

for

Standardization)有关标准SQL-86“数据库语言SQL”SQL-89“具有完整性增强的数据库语言SQL”,增加了对完整性约束的支 持SQL-92“数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新 的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。SQL-2003正在讨论中的新的标准,将增加对面向对象模型的支持2.1基本用法SELECT语句如下:SELECT

[ALL

|

DISTINCT]

[TOP

nExpr

[PERCENT]][Alias.]

Select_Item

[ASColumn_Name][,

[Alias.]

Select_Item

[AS

Column_Name]

...]FROM

[FORCE][DatabaseName!]Table

[[AS]

Local_Alias][[INNER

|

LEFT

[OUTER]

|

RIGHT

[OUTER]

|

FULL

[OUTER]

JOINDatabaseName!]Table

[[AS]

Local_Alias][ON

JoinCondition

…][[INTO

Destination]|

[TO

FILE

FileName

[ADDITIVE]

|TOPRINTER

[PROMPT]|

TO

SCREEN]][PREFERENCE

PreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHERE

JoinCondition

[AND

JoinCondition

...][AND

|

OR

FilterCondition

[AND

|

OR

FilterCondition

...]]][GROUP

BY

GroupColumn

[,

GroupColumn

...]][HAVING

FilterCondition][UNION

[ALL]

SELECTCommand][ORDER

BY

Order_Item

[ASC

|

DESC]

[,

Order_Item

[ASC

|

DESC]...]]&&以浏览的方式显示1无条件查询SELECT

[ALL|DISTINCT][别名.]<选项>[AS<显示名称>]…;FROM<表或视图文件>[别名]……例句:SELECT *

FROM

stustu所有记录参数说明:AS<显示名称>:输出窗口显示重新给出的字段名称。DISTINCT:不输出索引项重复的记录。选项:可以是字段、表达式、函数AVG(<字段>)COUNT(<字段>)

MAX(<字段>)

MIN(<字段>)

SUM(<字段>)。别名:多个数据表以别名来区分不同表中的所属字段。例:SELECT

a.xm,b.cj,c.dm FROM

stu

a,stucj

b,stukm

c或者SELECT

a.xm

AS"姓名",b.cj

AS"成绩",c.dm

AS"课程";FROM

stu

a,stucj b,

stukm

c2

条件查询在简单查询后加WHERE<条件

1>[AND|OR<条件2>]构成条件查询。例:列出所有女同学的姓名和专业。SELECT

xm,zy FROM

stu

WHERExb="女"3复杂查询包括上面所涉及的多表查询和下面将介绍的嵌套查询, 即将一条查询结果作为另一条查询的条件,构成复杂查 询。例:查询赵一所在专业的全体同学。首先查赵一所在专 业,然后查属于这个专业的全体学生。SELECT

xm,zy

FROM

stu

WHERE

zy=;(SELECT

zy

FROM

stu

WHERE

xm="赵一")&&子查 询的结果作为条件在子查询中查到赵一所在专业是“机械”,则主句的条 件是zy=“机械”。<条件>中的关键字ALL

用法:<字段><比较符>ALL(子查询)例:

SELECT

xm

FROM

stu WHERE

nl

>ALL

;(SELECT

nl

FROM

stu

WHERE

“97”$xh)说明:年龄大于子查询所有值时条件为.T.ANY

用法:<字段><比较符>ANY(子查询)例:

SELECT

xm

FROM

stu WHERE

xh

>=ANY; (SELECT

xh

FROM

stu

WHERE

"00"$left(xh,2))说明:学号大于等于子查询中任意一值时条件为.T.,即输出2000届以后的学生。BETWEEN

用法:<字段>BETWEEN<初值>AND<终值>例:

SELECT

xm

FROM

stu

WHERE

nl BETWEEN

20AND

23说明:年龄在20到23之间(含20和23)时条件为.T.EXISTS

用法:EXISTS<(子查询)>条件始终为真。IN

用法:<字段>IN(子查询或集合)例:

SELECT

xm

FROM

stu

WHERE

xh IN

(SELECTxh

FROM

stucj

WHERE

cj>80)说明:学号是子查询或集合中的某一项时条件为.T.,即输出80分以上学生姓名。类似于使用通配LIKE用法:<字段>LIKE<字符表达式>符“*”、“?”。例:

SELECT

*

FROM

stu WHERE

xm

LIKE

“李%”说明:所有姓李学生条件为.T.SOME用法:<字段><比较符>SOME(子查询)例:SELECT

xm

FROM

stu

WHERE

xh>SOME;(SELECT

xh

FROM

stu

WHERE

"99"$xh)说明:xh大于子查询中的某一项时条件为.T.(与ANY同意义)例6.1输出选修“计算机应用基础”和“微机原理”学生名单、成绩。SELECT

a.xm,

c.qm,

b.cj FROM

stu

a,

stukm

c,

stucj

b;WHERE

a.xh=b.xh

AND

b.dm=c.dm

AND

b.dm

=SOME

; (SELECT

dm

FROM

stukm

WHERE

stukm.qm

IN(“计算机应用基础”,”微机原理”))例6.2

输出01级学“计算机应用基础”的学生人数和平均成绩。SELECT

COUNT(*)AS"人数",c.qm

AS"课程",AVG(b.cj)AS"平均分"; FROM

stu

a,stukm

c,stucj

b WHERE

a.xh=b.xh

andb.dm=c.dm

;AND

c.dm="1001"

AND

LEFT(

a.xh,2)="01"2.2处理查询结果1输出排序如果希望输出按一定规律排列可用ORDER

BY子语句:ORDER

BY<排序项目>[ASC|DESC][,<排序项目>[ASC|DESC]……]其中<排序项目>可以是字段或数字,数字是指查询表的列序号。例6.3

输出学生姓名、班级、分数、课程,要求按专业排列,同专业则按分数排列。SELECT

a.xm,a.zy,c.qm,b.cj

FROM

stu

a,stukmc,stucj

b;WHERE

a.xh=b.xh

AND

b.dm=c.dm

;ORDER

BY

a.zy,b.cj

DESC &&(或者ORDER

BY2|4)2

输出定向将查询结果输送到指定的数据库表或文本文件。格式1

[INTO<目标>]目标:ARRAY<数组名>、CURSOR<临时数据表>、DBF<数据表>••••••••例:SELECT

a.xm

,b.cj FROM

stu

a,

stucj

b

;WHERE

a.xh=b.xh ORDER

BYb.cj

INTOARRAY

tem

(或DBFtem)格式2

TO

FILE

<TXT文件>[ADDITIVE]

添加到txt文件后面TOPRINTERTOSCREEN &&非查询窗口如:SELECT

xm

FROMstu

TOFILExm.txt前面讲的查询结果均以浏览方式显示在查询窗口。下面几个子句可以控制显示情况[NOCONSOLE]结果不在屏幕输出

[PLAIN]

屏幕输出无标题

[NOWAIT]多屏连续滚动不等待按键2.3

分组统计与筛选分组统计GROUP

BY

<分组选项>

<分组选项>可以是字段或序列号。例6.4

分专业统计学生人数。SELECT

zy,

COUNT(zy)

FROM

stuGROUP

BY

zy•••••••2

筛选HAVING<条件>与WHERE功能看上去类似但不相同,HAVING是作为查询输出的筛选条件,而WHERE是查询的条件。例6.5

查学生分数大于80分的各科成绩,按dm分类输出。命令1:SELECT

xh,

dm,

cjFROMstucj

HAVINGcj>80ORDERBYdm命令2:SELECT

xh,

dm,

cj

FROM

stucj

WHERE

cj>80

ORDERBYdm从查询窗口的输出看,虽然两条语句有同样的结果,但在命令1建立的查询中包含了stucj所有的记录,查询窗口显示的只是成绩高于

80分的记录;而在命令2建立的查询中只有成绩高于80分的记录,在查询窗口显示的是所有的查询内容。例6.6

统计各专业女学生人数。命令1:SELECT

zy,

xb,

COUNT(zy)

FROMstu

GROUPBYzyWHERE

xb="女"命令2:SELECT

zy,

xb,

COUNT(zy)

FROMstu

GROUPBYzyHAVING

xb=”女”说明:命令1按专业分组,按条件“xb=女”来统计人数。而命令2则是在分组后由HAVING子句确定输出内容,它不影响分组的结果,因为分组时包括了所有学生,所以查询窗口输出内容是第一条记录为女生的那些专业的学生总数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论