第 5 部分使用 SQLWord下载.docx

上传人:b****6 文档编号:18367654 上传时间:2022-12-15 格式:DOCX 页数:26 大小:30.71KB
下载 相关 举报
第 5 部分使用 SQLWord下载.docx_第1页
第1页 / 共26页
第 5 部分使用 SQLWord下载.docx_第2页
第2页 / 共26页
第 5 部分使用 SQLWord下载.docx_第3页
第3页 / 共26页
第 5 部分使用 SQLWord下载.docx_第4页
第4页 / 共26页
第 5 部分使用 SQLWord下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

第 5 部分使用 SQLWord下载.docx

《第 5 部分使用 SQLWord下载.docx》由会员分享,可在线阅读,更多相关《第 5 部分使用 SQLWord下载.docx(26页珍藏版)》请在冰豆网上搜索。

第 5 部分使用 SQLWord下载.docx

stores_demo数据库包含一组描述虚拟业务的表。

您可以轻松的创建和填充stores_demo数据库,只需要使用log选项运行dbaccessdemo脚本:

dbaccessdemo-log。

在运行dbaccessdemo脚本时,您需要设置Informix环境变量。

dbaccessdemo脚本位于您Informix安装的bin目录中。

数据操作语言(DataManipulationLanguage,DML)—检索数据

使用SELECT语句从表中检索数据

SELECT语句用于从表或视图中检索数据。

这种操作也被称为查询。

您需要具备Connect权限才能访问关系数据库,并且需要具备Select权限才能使用SELECT检索表或视图中的数据。

采用最简单的形式,SELECT语句可用于检索表或视图中的所有数据。

以下语句是使用SELECT语句检索customer表中的所有数据的一个示例:

SELECT*FROMcustomer;

SELECT语句也可以像上述语句那样简单地使用,但也可支持多个SQL语句和关键字的复杂使用。

IDS支持许多不同的SQL语句。

本教程将介绍其中最常用的一些SQL语句。

您可以使用FIRST关键字来限制查询结果的行数。

以下代码示例展示了如何检索customer表中的前10行:

SELECTFIRST10*FROMcustomer;

要从表中检索具体的列,可以在SELECT关键字后指定使用逗号分隔的列名。

以下示例展示了如何从customer表中检索fname和lname列:

SELECTfname,lnameFROMcustomer;

在SELECT语句中使用DISTINCT关键字可以清除查询结果中的重复行。

以下示例展示了如何清除orders表中的重复customer数据:

SELECTDISTINCTcustomer_numFROMorders;

您可以在SELECT语句语句中使用AS子句为SELECT列表中的表达式或列分配一个有意义的名称。

以下示例展示了如何使用AS子句计算orders表中的订购日期与配送日期之间的处理时间:

SELECTship_date-order_dateASprocess_timeFROMorders;

您可以在SELECT语句中使用许多内置SQL函数。

表1列出了SELECT语句常用的一些内置函数:

表1.常用SQL函数

函数

描述

聚合函数函数

COUNT

查询结果中的行数

SUM

数值列求和

AVG

数值列的平均值

MAX

某列的最大值

MIN

某列的最小值

时间函数

DAY

表示日的整型值

MONTH

表示月的整型值

YEAR

表示年的整型值

WEEKDAY

表示一周中的某一天的整型值(0表示周日)

DATE

返回日期值

CURRENT

返回当前日期时间值

TODAY

返回系统日期

其他函数

TRUNC

返回某表达式截断后的值

HEX

返回十六进制值

ROUND

返回四舍五入值

LENGTH

返回字符串列的长度

以下SELECT语句示例使用COUNT(*)函数返回customer表中的行数:

SELECTCOUNT(*)FROMcustomer;

过滤数据

使用WHERE子句和谓语过滤查询返回的数据

通过指定一个或多个选择标准或搜索条件,您可以使用WHERE子句选择表或视图中的具体行。

搜索条件包括一个或多个谓语。

谓语指定与某行相关的或真或假的判断。

在构建搜索条件时考虑以下事项:

∙算术运算仅针对数值数据类型。

∙仅对具有可比性的数据类型执行比较。

∙在引号中包含字符串值。

∙指定数据库中真实存在的字符串值。

我们来看一些如何使用WHERE子句的示例。

首先,这个示例展示了如何从customer表中查找编号大于120的客户的名称:

SELECTfname,lname,customer_numFROMcustomer

WHEREcustomer_num>

120;

以下示例将从ustomer表中查找居住在Denver且客户编号大于120的客户的名称:

SELECTfname,lname,customer_numFROMcustomer

120

ANDcity='

Denver'

;

LIKE关键字支持在引用的字符串中使用通配符。

百分比符号(%)是一个代表零个或多个字符串的通配符。

以下示例展示了如何查找customer表中以字母L开头的所有客户名称:

SELECTfnameFROMcustomer

WHEREfnameLIKE'

L%'

您可以在WHERE子句中使用许多关键字与运算符来定义搜索条件。

表2提供了最常用的关键字和运算符的列表:

表2.WHERE子句中常用的关键字和运算符列表

关键字/运算符

关键字

BETWEEN

值的范围

IN

值的子集

LIKE

变量文本搜索

MATCHES

ISNULL

搜索NULL字符串

ISNOTNULL

搜索非NULL字符串

AND/OR/NOT

用于连接两个或多个条件的逻辑运算符

算术运算符

+

-

*

/

关系运算符

=or==

等于

!

=or<

>

不等于

大于

=

大于或等于

<

小于

小于或等于

您可以使用在WHERE子句中使用前置关键字和运算符来创建执行以下操作的比较条件查询:

∙包括某些值

∙排除某些值

∙查找某范围中的值

∙排除某范围中的值

∙查找值的某个子集

∙识别NULL值

包括某些值

使用等号(=)关系运算符在WHERE子句中包括某些行,如以下示例所示。

SELECTcustomer_num,call_code,call_dtime,res_dtime

FROMcust_calls

WHEREuser_id='

maryj'

此查询将返回cust_calls表中的所有行。

下面给出了一个使用1=1表达式的查询示例:

WHERE1=1;

排除某些值

使用!

关系运算符在WHERE子句中排除某些值。

清单1.使用!

=和<

运算符排除某些值的示例

SELECTcustomer_num,company,city,state

FROModin.customer

WHEREstate!

='

CA'

WHEREstate<

'

查找某范围中的值

清单2显示了在WHERE子句中指定行范围的两种方法:

∙使用BETWEEN和AND关键字

∙使用>

=运算符

清单2.指定值范围的示例

SELECTcatalog_num,stock_num,manu_code,cat_advert

FROMcatalog

WHEREcatalog_numBETWEEN10005AND10008;

WHEREcatalog_num>

=10005ANDcatalog_num<

=10008;

排除某范围中的行

清单3使用关键字NOTBETWEEN排除zipcode列中字符串范围从94000到94999的行:

清单3.排除范围的示例

SELECTfname,lname,city,state

FROMcustomer

WHEREzipcodeNOTBETWEEN'

94000'

AND'

94999'

查找值的子集

与排除行相类似,清单4中的示例假定使用ANSI兼容的数据库。

引号中的所有者限定符用于保留字面字符串的大小写敏感性。

清单4.使用OR和IN关键字查找值的子集示例

SELECTlname,city,state,phone

FROM'

Aleta'

.customer

WHEREstate='

AZ'

ORstate='

NJ'

ORDERBYlname;

WHEREstateIN('

'

识别NULL值

使用ISNULL或ISNOTNULL关键字检查NULL值。

NULL值表示数据不存在或不可知。

NULL值不同于零、空白或空的字符串。

清单5.返回拥有nullpaid_date值的所有行示例

SELECTorder_num,customer_num,po_num,ship_date

FROMorders

WHEREpaid_dateISNULL

ORDERBYcustomer_num;

排序

使用ORDERBY子句对查询返回的数据排序

使用ORDERBY子句按一列或多列对查询结果排序。

不需要在Projection列表中指定ORDERBY子句中指定的列名。

以下示例演示了如何使用ORDERBY子句,它将从customer表检索数据并根据客户编号对其进行排序:

SELECTfname,lnameFROMcustomer

默认情况下,ORDERBY子句在排序时将使用升序。

您可以在ORDERBY子句中使用DESC关键字将查询结果更改为降序排列。

结合

使用join从多个表中检索数据

您可以结合两个或多个表的查询结果。

经常出现的一种情况是,所需的数据分布在两个或多个表中。

举例来说,完全结合两个三列表将生成一个包含六列的查询结果。

结合条件将为要结合的各表中的至少一列指定关系。

由于结合条件中的列需要进行比较,因此它们必须具备可比的数据类型。

清单6提供了一个结合两个表(customer和orders)的示例。

列名customer_num表示表之间的关系。

清单6.结合的示例

SELECTpany,b.order_num,b.order_date

FROMcustomera,ordersb

WHEREa.customer_num=b.customer_num;

IDS支持多种类型的结合:

∙CROSSJOIN:

通过结合所有可能的行对生成笛卡尔积

∙INNERJOIN:

仅从表中生成满足结合条件的行

∙LEFTOUTERJOIN:

生成一个表中的某些行,以及另一个表中的所有行

∙RIGHTOUTERJOIN:

类似于LEFT,但两个表的角色将互换

∙FULLOUTERJOIN:

生成两个表的INNERJOIN中的所有行,或者如果与其他表不匹配的各表中的所有行

清单6显示了INNERJOIN的一个示例。

INNERJOIN仅从表中返回满足结合条件的行。

如果某行存在于某个表中,而不存在于另一个表中,那么它不会包含在查询结果中。

可以通过在FROM子句中明确指定INNERJOIN来覆盖相同的查询,如清单7所示:

清单7.INNERJOIN的示例

FROMcustomeraINNERJOINordersb

ONa.customer_num=b.customer_num;

清单8显示了INNERJOIN查询的结果。

清单8.INNERJOIN查询的结果

COMPANYORDER_NUMORDER_DATE

PlayBall100105/20/1998

AllSportsSupplies100205/21/1998

PlayBall100305/22/1998

Watson&

Son100405/22/1998

清单9显示了LEFTOUTERJOIN的一个示例。

您将使用与前一示例相同的数据集,以及几乎完全相同的SQL语句。

唯一的区别在于合并的类型。

在此合并语句中,customer表是出现在关键字左侧以OUTERJOIN开始的主要表。

LEFTOUTERJOIN将返回合并条件为真的所有行,以及主要表中的所有其他行,并将从属表中的相应值显示为NULL。

ORDERS表在这里为从属表。

清单9.LEFTOUTERJOIN的示例

FROMcustomeraLEFTOUTERJOINordersb

清单10显示了左外部合并的结果:

清单10.LEFTOUTERJOIN的查询结果

SportsSpot

Phil'

sSports

PlayBall101106/18/1998

PlayBall101306/22/1998

LosAltosSports

Son101406/25/1998

合并查询

使用set运算符将两个或多个查询合并为一个查询

您可以通过使用UNION子句、NOTEXISTS或NOTIN子句,或者EXISTS、IN子句将两个或多个查询合并为一个查询。

Set运算符将处理查询结果、清除复制并返回最终结果集。

UNION子句通过合并两个或多个查询结果来生成最终查询结果。

使用NOTEXISTS或NOTIN子句引入子查询来显示两组集之间的差异。

这些子句将包含第一个查询返回的所有行(而非第二或任何后续查询返回的行),由此生成查询结果。

使用EXISTS或IN子句引入子查询来显示两组集之间的交集。

这些子句仅包含所有查询返回的行,由此来生成查询结果。

清单11演示了使用UNIONset运算符的查询示例。

在该示例中,您将从customer表中选择state列,并从state表中选择相应的code列。

清单11.使用UNION子句合并两个查询的示例

SELECTstateFROMcustomer

WHEREcustomer_numBETWEEN100AND125

UNION

SELECTcodeFROMstate

WHEREsnameLIKE'

C%'

并没有必要合并两个完全相同的列或表。

合并查询的projection子句中的相应列必须有可比的数据类型,但各列不需要使用相同的列名。

对结果分组

使用GROUPBY子句汇总查询结果

使用GROUPBY子句组织查询结果中的行。

分组的各唯一集都由查询结果中的单一行表示。

GROUPBY子句还用于指定将哪些列分组到一起,以便为COUNT、SUM、MIN、MAX和AVG等列函数提供输入。

清单12显示了customer表中的所有客户和他们所居住的城市名的列表:

清单12.customer表中的数据

FNAMECITY

ChrisBartlesville

KimBlueIsland

JamesBrighton

BobCherryHill

EileenDenver

RaymondLosAltos

MargaretLosAltos

LanaMenloPark

AlfredMenloPark

JeanMountainView

GeorgeMountainView

DickOakland

CharlesPaloAlto

PhilipPaloAlto

FredPhoenix

FrankPhoenix

CathyPrinceton

AnthonyRedwoodCity

RoyRedwoodCity

DonaldRedwoodCity

ArnoldRedwoodCity

FrankRedwoodCity

以下示例展示了如何使用GROUPBY子句计数居住在各城市的客户的数量:

SELECTcity,COUNT(city)TOTAL

GROUPBYcity;

COUNT函数将在查询结果中生成以下行。

您将城市指定为GROUPBY列并将expression列标记为TOTAL。

COUNT函数将返回分组到各新行中的行数。

清单13.使用COUNT函数的GROUPBY表达式的结果

CITYTOTAL

LosAltos2

MountainView2

Brighton1

PaloAlto2

Denver1

Oakland1

Phoenix2

Princeton1

RedwoodCity5

BlueIsland1

MenloPark2

CherryHill1

Bartlesville1

插入数据

使用INSERT语句向表添加数据

INSERT语句用于向表或视图添加新行。

在视图中插入行也会在该视图所基于的表中插入行。

可以采用一些不同的方法在表中插入数据。

我们来看INSERT语句的一些示例。

以下示例使用VALUES子句向customer表插入了一个行:

INSERTINTOcustomerVALUES

(202,'

Cerny'

Paul'

IBM'

2MainSt'

'

'

Lenexa'

KS'

66012,'

);

以下示例将从customer表中查找客户编号大于120的记录,并将相同的记录插入到临时的temp_cust表中:

SELECT*FROMcustomer

INSERTINTOTEMPtemp_cust;

以下示例使用LOADFROM子句从customer.txt分隔文本文件向customer表插入记录。

文本文件可以拥有一个或多个记录。

LOADFROMcustomer.txt

INSERTINTOcustomer;

在连续列中插入值

表可以在列中存储连续的数据类型(SERIAL,SERIAL8,BIGSERIAL)。

数据库服务器将为连续列生成值。

在插入值时,可以为连续列指定零值。

数据库服务器将顺序生成下一个实际值。

连续列不允许NULL值。

您可以插入连续数、明确值或用于重设SERIAL、SERIAL8或BIGSERIAL列中的值的明确值。

∙要插入连续的值,可以为INSERT语句中的连续列指定零值(0)。

在本例中,数据库服务器将分配下一个最大的值。

数据库服务器为您的生成的值是列中大于最大值的某个值。

∙要插入某个明确值,可以为连续列指定一个非零值,并

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1