DB2 SQL 与 XQuery 教程,第 1 部分: SQL 与示例数据库简介
2009-11-28 00:00:00 来源:WEB开发网开始之前
关于本系列
本教程为您讲解高级 SQL 和基本 XQuery 话题的基础知识,并展示如何使用 SQL 查询或 XQuery 语句来表达常被问起的业务问题。开发人员和数据库管理员可以使用本教程来提高他们的数据库查询技能。Academic Initiative 成员可以使用本教程系列作为他们数据库课程的一部分。
本文中的所有例子都基于 Aroma,这是一个示例数据库,其中包含了在美国各地的商店中出售的咖啡和茶用品的销售数据。每个例子由以下三部分组成:
以日常用语表达的一个业务问题
以 SQL 或 XQuery 表达的一个或多个例子查询
显示从数据库返回的一个结果表
本指南是为了让读者学习 SQL 语言和 XQuery 而设计的。与学习任何东西一样,重要的是一边学习一边实践。本指南给出的表定义和数据为此提供了便利。
对于使用本指南作为学校课程一部分的学生而言,他们应该向老师学习连接到 Aroma 数据库的说明,并了解本指南与您本地设置的不同之处。
本系列是针对 DB2 Express-C 9 for UNIX®, Linux® and Windows®(曾用名 Viper)而编写的。
关于本教程
本教程介绍 Aroma 数据库,特别是零售群表、表定义、示例数据和表之间的关系。
创建这些表是为了展示这样一种环境:
有为数不多的几个表
列名使用分析者的词汇
列反映业务的自然维度
这是一个典型的、使用星型模式的数据仓库。另一种类型的数据库是在线事务处理(Online Transaction Processing,OLTP)数据库。OLTP 数据库包含最细粒度级别的事务。
本教程还介绍 SQL 的基础知识,并推荐能用 IBM DB2 9 来回答的一些典型的业务问题。
系统需求
为了能够更好地利用本教程,应该安装 IBM DB2 9。请下载 DB2 Express-C,这是为社区提供的免费版本的 DB2 Express Edition,它具有与 DB2 Express Edtion 相同的核心数据特性,并且能为构建和部署应用程序提供一个坚实的基础。
安装 DB2 Express-C 9
要安装 DB2 9,可遵循以下步骤(如果没有特别说明,则使用默认选项):
进入到包含所下载文件 - db2exc_91_WIN_x86.zip 的文件夹(假设这个文件被下载到 C:\DownloadDirector 文件夹中)。
解压该文件。
在解压得到的文件夹中找到 setup.exe,然后双击它。随之将出现 DB2 Setup Launchpad。
在 DB2 Setup Launchpad 中,单击左侧面板上的 Install a Product。
单击 DB2 Express 下的 Install New。
在安装程序中,单击 Next 查看 License Agreement。要继续安装,应该单击 Accept 接受协议,然后单击 Next。
选择 Typical 安装方式,然后单击 Next。
确认您打算 “Install DB2 Universal Database Express Edition on this computer and save my settings in a response file”(在这台计算机上安装 DB2 Universal Database Express Edition,并将设置保存在一个响应文件中),然后单击 Next。
检查安装目录,然后单击 Next。
在 “Configure DB2 instances” 屏幕中,单击 Next。
在 “User Information” 屏幕中,使用下拉菜单将 Domain 设置为 None -- use local user account,使用 db2admin 作为 User name,并设置一个密码。
(或者,也可以选择 LocalSystem 账户,但是如果使用该选项,会遇到一些限制。请单击 Help 按钮了解更多信息。)
确保复选框 Use the same user name and password for the remaining DB2 services 被选中,然后单击 Next。
单击 Next 忽略 “Prepare the DB2 tools catalog” 屏幕。
为简化安装,取消对 Set up your DB2 server to send notifications 的选择,然后单击 Next。
确认复选框 Enable operating system security checkbox 被选中。保留 DB2 administrators group 的默认值 DB2ADMNS,同时也保留 DB2 users group 的默认值 DB2USERS。单击 Next。
当进入 “Start copying files and create response file” 屏幕时,单击 Finish 开始 DB2 产品的安装。
当安装结束时,会弹出一个包含 “Setup is complete” 消息的窗口。单击 Finish 完成安装过程。
这时将出现一个标题为 “DB2 First Steps” 的窗口。单击 Create profile。您的 Web 浏览器将打开一个名为 DB2 First Steps 的页面。这个教程包含很多关于 DB2 信息的有用链接,不过本教程不会用到这个页面。关闭 Web 浏览器。
安装 Aroma 数据库
确保 DB2 Express-C 9 已经安装。
选择 Start menu ==> all Programs ==> IBM DB2 ==> Command Line Tools ==> Command Window 启动 Command Window。
在 Command Window 中执行 create_aroma.bat。
注意:别忘了先使用 cd 命令进入到这个批文件所在的目录。
这样将创建 create.txt 和 report.txt 这两个文件。编辑 report.txt 文件,并与下面预期的结果相比较:
TABLE RECORDS
--------------------- -----------
aroma.class 9
aroma.deal 9
aroma.line_items 182
aroma.market 17
aroma.orders 27
aroma.period 821
aroma.product 59
aroma.promotion 194
aroma.sales 69941
aroma.store 18
aroma.supplier 9
XML 支持
本系列的第 7 部分将介绍 XML 和基本的 XQuery 查询。为了支持 XML,aromadb 数据库是用下面的语句创建的:
db2 create db aromadb using codeset utf-8 territory us
注意,该语句指定 UTF-8 作为这个数据库的编码集。XML 特性只能用于以编码集 UTF-8 定义的只有一个数据库分区的数据库。将来您在创建自己的数据库时别忘了包括这个参数,否则您的数据库将不支持 XML 特性!
Aroma 数据库中的表
本教程中的大多数例子都使用 Aroma 数据库中的数据,这个数据库用于跟踪 Aroma Coffee and Tea Company 拥有的各家商店每日统计得到的零售数据。Aroma 数据库中包含一些用于理解 Aroma Coffee and Tea Company 的销售情况的表。这样的表一共有六个:包含销售交易或事实的 Sales 表,另外还有 Period、Product、Store、Promotion Class 和 Market 表。这些表统称为零售群表。
另一组表包含用于理解 Aroma Coffee and Tea Company 采购情况的数据。这组表统称为采购群表,这些表可用于理解 Aroma Coffee and Tea Company 向供应商采购产品的情况。本教程中的所有例子都没有使用这组表。本教程只是在附录中列出这些表,以便读者能够对 Aroma Coffee and Tea Company 有一个更全面的了解。
图 1. 零售群表
在这个图中,鸡爪状的连线表示两个表之间一对多的关系。例如,每个不同的值在 Period 表的 Perkey 列中只能出现一次,但是在 Sales 表中可以出现多次。列名以粗体显示的列是主键列。列名以斜体 显示的列是外键列。列名以 粗斜体 显示的列既是主键列又是 外键列。
接下来的小节中将给出每个表的示例数据,以便于理解这些主键和外键关系。
主键 是表定义中的一个惟一键。一个表只能有一个主键,并且作为主键的列不能包含 null 值。(后面会详细讨论 null 值。如果一个值为 null,则意味着这里本来是要存放数据的,但是又没有存放数据 —— 这不同于空格。)主键是可选的,可以在 CREATE TABLE 语句中定义,也可以在 ALTER TABLE 语句中定义。主键是很重要的,因为主键中的值只能出现一次,因而不会出现重复的行。可能存在两个城市有相同名称的情况,但是如果按照主键来选择记录,就可以确保永远选中同一条记录。
外键 是在一个参照约束的定义中指定的。一个表可以有零个或多个外键。如果组成外键的各个值中有一个值为 null,那么整个外键的值就为 null。外键是可选的,可以在 CREATE TABLE 语句中定义,也可以在 ALTER TABLE 语句中定义。
基本 Aroma 表
表和列是按照熟悉的商业术语来命名的,这样便于理解和使用它们。一组设计良好的表可以为应用程序开发人员和终端用户带来以下好处:
业务问题容易表达为 SQL 查询
查询运行得较快,并且能返回一致的回答。
您将注意到,Aroma 数据库并不是记录发生的每一个交易。数据是经过聚合的,用于反映每家商店在某天对某个促销活动下的某种商品的总体销售情况。
聚合数据是典型的数据仓库。其思想是对数据加以汇总,以减少表中的行数。通常数据的汇总是由数据库管理员(DBA)或计算机程序完成的,这个过程常被称作 ETL,即提取(Extract)、转换(Transform)、装载(Load)。
Period、Product 和 Class 维
Period 表
下表显示了 Period 表的前几行。主键列是 Perkey 列:
Perkey | Date | Day | Week | Month | Qtr | Year |
1 | 2004-01-01 | TH | 1 | JAN | Q1_04 | 2004 |
2 | 2004-01-02 | FR | 1 | JAN | Q1_04 | 2004 |
3 | 2004-01-03 | SA | 1 | JAN | Q1_04 | 2004 |
4 | 2004-01-04 | SU | 2 | JAN | Q1_04 | 2004 |
5 | 2004-01-05 | MO | 2 | JAN | Q1_04 | 2004 |
6 | 2004-01-06 | TU | 2 | JAN | Q1_04 | 2004 |
... |
Product 和 Class 表
下表显示了 Product 表的前几行。这个表的主键是 Classkey 和 Prodkey 的组合:
Classkey | Prodkey | Prod_Name | Pkg_Type |
1 | 0 | Veracruzano | No pkg |
1 | 1 | Xalapa Lapa | No pkg |
1 | 10 | Colombiano | No pkg |
1 | 11 | Espresso XO | No pkg |
1 | 12 | La Antigua | No pkg |
1 | 20 | Lotta Latte | No pkg |
... |
注意:主键是表定义中的一个惟一键。通常,主键是表中的一个列。但是对于这个表,主键是两个列的组合,这意味着一种组合在表中只能出现一次。
下表显示了 Class 表的前几行。
Classkey | Class_Type | Class_Desc |
1 | Bulk_beans | Bulk coffee products |
2 | Bulk_tea | Bulk tea products |
3 | Bulk_spice | Bulk spices |
4 | Pkg_coffee | Individually packaged coffee products |
5 | Pkg_tea | Individually packaged tea products |
6 | Pkg_spice | Individually packaged spice products |
Store、Market 和 Promotion 表
Store、Market 和 Promotion 表包含数据分析者在查询数据库时要使用的描述。例如,Store 表包含商店名称和地址;Product 表包含产品和包装信息;而 Period 表则包含月份、季度和年份。每个表都有一个由一列或多列组成的主键;一个表中的每一行都是由它的主键值惟一标识的。
Store 和 Market 表
下表显示了 Store 表的前几行(由于篇幅的原因,这里省略了一些列)。这个表的主键列是 Storekey;Mktkey 是对 Market 表的一个外键引用。
Storekey | Mktkey | Store_Type | Store_Name | Street | City | State | Zip |
1 | 14 | Small | Roasters, Los Gatos | 1234 University Ave | Los Gatos | CA | 95032 |
2 | 14 | Large | San Jose Roasting | 5678 Bascom Ave | San Jose | CA | 95156 |
3 | 14 | Medium | Cupertino Coffee | 987 DeAnza Blvd | Cupertino | CA | 97865 |
4 | 3 | Medium | Moulin Rouge | 898 Main Street | New Orleans | LA | 70125 |
5 | 10 | Small | Moon Pennies | 98675 University | Detroit | MI | 48209 |
6 | 9 | Small | The Coffee Club | 9865 Lakeshore Bl | Chicago | IL | 06060 |
... |
下表显示了 Market 表的前几行。
Mktkey | Hq_city | Hq_state | District | Region |
1 | Atlanta | GA | Atlanta | South |
2 | Miami | FL | Atlanta | South |
3 | New Orleans | LA | New Orleans | South |
4 | Houston | TX | New Orleans | South |
5 | New York | NY | New York | North |
... |
Promotion 表
下表显示了 Promotion 表的前几行。这个表的主键列是 Promokey。
Promokey | Promo_Type | Promo_Desc | Value | Start_Date | End_Date |
0 | 1 | No Promotion | 0.00 | 9999-01-01 | 9999-01-31 |
1 | 100 | Aroma catalog coupon | 1.00 | 2004-01-01 | 2004-01-31 |
2 | 100 | Aroma catalog coupon | 1.00 | 2004-02-01 | 2004-02-29 |
3 | 100 | Aroma catalog coupon | 1.00 | 2004-03-01 | 2004-03-31 |
4 | 100 | Aroma catalog coupon | 1.00 | 2004-04-01 | 2004-04-30 |
5 | 100 | Aroma catalog coupon | 1.00 | 2004-05-01 | 2004-05-31 |
... |
Value 列标识一次给定促销活动的现金价值。用户可以通过将这些值相加来计算促销活动的成本。
Sales 表
下表显示了 Sales 表的前 20 行。
Perkey | Classkey | Prodkey | Storekey | Promokey | Quantity | Dollars | Comments |
2 | 2 | 0 | 1 | 116 | 8 | 34.00 | ... |
2 | 4 | 12 | 1 | 116 | 9 | 60.75 | ... |
2 | 1 | 11 | 1 | 116 | 40 | 270.00 | ... |
2 | 2 | 30 | 1 | 116 | 16 | 34.00 | ... |
2 | 5 | 22 | 1 | 116 | 11 | 30.25 | ... |
2 | 1 | 30 | 1 | 116 | 30 | 187.50 | ... |
2 | 1 | 10 | 1 | 116 | 25 | 143.75 | ... |
2 | 4 | 10 | 2 | 0 | 12 | 87.00 | ... |
2 | 4 | 11 | 2 | 0 | 14 | 115.50 | ... |
2 | 4 | 22 | 2 | 0 | 18 | 58.50 | ... |
2 | 4 | 0 | 2 | 0 | 17 | 136.00 | ... |
2 | 5 | 0 | 2 | 0 | 13 | 74.75 | ... |
2 | 4 | 30 | 2 | 0 | 14 | 101.50 | ... |
2 | 2 | 10 | 2 | 0 | 18 | 63.00 | ... |
2 | 1 | 22 | 3 | 0 | 11 | 99.00 | ... |
2 | 6 | 46 | 3 | 0 | 6 | 36.00 | ... |
2 | 5 | 12 | 3 | 0 | 10 | 40.00 | ... |
2 | 1 | 11 | 3 | 0 | 36 | 279.00 | ... |
2 | 5 | 1 | 3 | 0 | 11 | 132.00 | ... |
2 | 5 | 10 | 3 | 0 | 12 | 48.00 | ... |
... |
这个表的主键是五个列的组合:
perkey、classkey、prodkey、storekey 和 promokey
关于 Sales 表
Sales 表中包含的数据很容易通过它所引用的表中定义的业务属性来访问,它存储了大量关于那些属性的统计信息。Sales 表是这个数据库中最大的表。
这个表中的最后一列是 Comments,该列以 XML 数据类型存储关于客户反馈的信息。本系列的第 7 部分将介绍 XML。
由多个列组成的主键
Sales 表有一个由多个列组成的主键。组成主键的五个列中的每一个列都是对另一个表的主键的外键引用:
perkey、classkey、prodkey、storekey 和 promokey
这个主键将 Sales 数据与 Period、Product、Store 和 Promotion 表链接起来。
Gold 表
Gold 表包含关于 “金卡(Gold Card)” 客户的信息,这些客户可以享受打折、免费赠送礼品和电子邮件提醒促销活动等各种优惠。Gold 表将在本系列的第 6 部分中创建,这个表有以下几列:惟一卡号、商店代号、名字、姓氏、电子邮箱和状态。
什么是 SQL?
结构化查询语言
结构化查询语言(Structured Query Language,SQL)是一种标准化的语言,用于定义和操纵关系数据库中的数据。所有关系数据库管理系统(RDBMS)都能理解 SQL。
下面是关于 SQL 的更多描述:
SQL 是专门作为关系理论的一部分而设计出来的。您需要一种语言来与数据库交谈,来检索数据库中的数据,或者更改数据库中的数据。
SQL 是一种非导航语言。换句话说,通过使用 SQL,您不必要求 DB2 发现一条记录,读取它的指针,然后根据指针找到表中相关的行。您只需告诉 DB2 要做什么,DB2 自动决定如何处理这个命令。就是这么简单!
您可以使用 SQL 修改一个表的一些方面,同时又不必让这个表离线,您还可以添加新的列到已有的表中,或者添加业务规则到表定义中。
常被问起的问题
下面是一些可以用 SQL 来回答的有代表性的业务问题。有了这些回答,就可以在很短的时间内作出关键的业务决策。
容易
去年在圣何塞 Lotta Latte 牌的咖啡的每周销售情况如何?
去年每个月在西部地区所有咖啡产品的月均销售情况如何?
中等难度
Lotta Latte 在圣何塞的销售情况与在洛杉矶和纽约的销售情况比起来如何?
在过去两年的每个月,所有市场中 Lotta Latte 的市场份额是如何变化的?
哪些供应商对大量批发的茶产品要价最高?
去年十二月在加利福尼亚哪一次促销活动最成功?
非常有挑战性的业务问题,这些问题可以用 DB2 9 来回答
去年 Lotta Latte 每个月的累计销售总额是多少?
同样是在去年,Lotta Latte 每个月的销售额占总销售额的比例(用百分比表示)是多少?
在 2004 年,哪十个城市在咖啡的销售额和销售量方面表现最差?
在 2005 年第一季度,Aroma 的哪些商店在销售收入方面进入前 25%?哪些商店又排在中间的 50%,还有哪些商店跌入最后 25%?
数据类型
数据类型定义常量、列、主机变量、函数、表达式和专用寄存器可接受的值。基本上,数据必须定义为数字数据类型或文本数据类型。这样做很重要,其原因主要有两点。首先,对于数字数据类型,可以应用数学函数,例如将字段相加或相减。其次,便于预先设置字段大小,从而可以确保类型的正确和分配适当大小的存储空间。有多少次,当您装入应用程序后,却没有足够的空间来写任何需要的数据?然而,如果将所有字段的长度增加到最大,又会导致数据库中有太多的空白空间。本节描述在这些例子中引用到的数据类型。
数字
所有数字都有一个符号和一个精度(precision)。精度是指除符号外数字的位数。
SMALLINT | SMALLINT (small integer) 是一个双字节长的整数,精度为 5 位。 |
INTEGER | INTEGER (large integer) 是四字节长的整数,精度为 10 位。 |
BIGINT | BIGINT (big integer) 是八字节长的整数,精度为 19 位。 |
REAL | REAL (single-precision floating-point number) 是一个实数的 32 位近似值。 |
DOUBLE | DOUBLE (double-precision floating-point number) 是一个实数的 64 位近似值。DOUBLE 也称为 FLOAT。 |
DECIMAL(p,s) | DECIMAL 是一个十进制数。小数点的位置由精度(p)和标度(s)决定。精度是总位数,它必须小于 32。标度(scale)是小数部分的位数,它总是小于或等于精度值。如果没有指定精度和标度,那么十进制数的默认精度为 5,默认标度为 0。 |
字符串
字符串 是一种字节序列。字符串的长度是序列中字节的个数。如果长度为 0,那么这个值就被称作空串。
定长字符串 | CHAR(x) 是定长字符串。长度属性 x 必须介于 1 到 254 之间,包括 1 和 254。 |
变长字符串 | 变长字符串有三种类型:VARCHAR、LONG VARCHAR 和 CLOB VARCHAR(x) 类型是变长字符串,所以长度为 9 的字符串可以插入到 VARCHAR(15) 中,但是其长度仍然为 9。 关于 CLOB 的详细信息请参考大型对象(LOB)。 |
图形字符串
图形字符串 是一种双字节字符数据序列。
定长图形字符串 | GRAPHIC(x) 是定长字符串。长度属性 x 必须介于 1 和 127 之间,包括 1 和 127。 |
变长图形字符串 | 变长图形字符串有三种类型:VARGRAPHIC、LONG VARGRAPHIC 和 DBCLOB。关于 DBCLOB 的详细信息,请参考大型对象(LOB)。 |
二进制串
二进制串 是一种字节序列。它用于存放非传统数据,例如图片。二进制大型对象(Binary Large OBject,BLOB)就是一种二进制串。请参考大型对象(LOB)获得更多信息。
日期时间值
日期时间值是日期、时间和时间戳的表示(一个 14 位的字符串,以 yyyyxxddhhmmss 的形式表示有效的日期和时间)。日期时间值可以在某些算术和字符串操作中使用,并且与某些字符串兼容;但是,日期时间值既不是字符串,也不是数字。
日期 | date 是由三部分组成的一个值(年、月和日)。 |
时间 | time 是由三部分组成的一个值(小时、分钟和秒),它使用二十四小时制表示时间。 |
时间戳 | timestamp 是一个由七部分组成的值(年、月、日、小时、分钟、秒和微秒),它表示一个日期和时间。 |
空值
null 值是一个特殊的值,它不同于所有非空的值。null 值意味着行中的那一列缺少非空的值。所有数据类型都存在 null 值。
XML
DB2 9 是业界第一个能同时管理关系结构和 pureXML™ 结构的数据的混合型数据服务器。除了已有的关系引擎外,DB2 9 还引入了一个经过优化的用于 XML 数据的数据存储引擎。
XML 是自描述的,数据的意义包括在记录中。Comments 列使用 XML 数据类型来存储客户评语。要了解更多详细信息,请参考本系列的第 7 部分。
运行 SQL 的方法
谈到 DB2,您可以使用特定于平台的工具来输入 SQL。安装的 DB2 产品已附带了这些工具。考虑到本系列的目的,我们使用 Control Center 或 Command Line Processor (CLP)。
Control Center
SQL 语句、DB2 命令和操作系统命令都可以在 Control Center 中运行。从 Start menu ==> all Programs ==> IBM DB2 ==> General Administration Tools ==> Control Center 打开。从界面顶端的菜单中,选择 Tools ==> Command Editor。这时会弹出一个命令编辑器,您可以在其中输入 SQL 语句。
您可以交互式地运行这些语句或命令,也可以将语句存放在一个脚本中。为了执行这些语句,可以单击左上角的 Play 图标(图 2 中用圆圈标出)。
图 2. Control Center
Command Line Processor
语句也可以放在 Command Line Processor (CLP) 中运行。可以从 Start menu ==> all Programs ==> IBM DB2 ==> Command Line Tools ==> Command Line Processor 打开 CLP。
图 3. Command Line Processor
开始
连接到数据库
在使用 SQL 查询或操纵数据之前,需要连接到一个数据库。CONNECT 语句将一个数据库连接与一个用户名相关联。
如果要连接到 aromadb 数据库,可以在 DB2 命令行处理器中输入以下命令:
CONNECT TO aromadb USER userid USING password
如果您使用本指南作为学校课程的一部分,那么可以向老师询问连接到数据库所需的用户 id 和密码。
如果不需要用户 id 和密码,或者您是在自学,而且使用的是自己的电脑,那么只需输入以下命令:
CONNECT TO aromadb
下面的消息告诉您已经建立了一个成功的连接:
Database Connection Information
Database server
= DB2/NT 9.0.0
SQL authorization ID = USERID
Local database alias = AROMADB
建立连接后,便可以开始使用数据库。
DB2 Information Center
除了用于 DB2 9 的一套标准文档外,还有一个可搜索的在线 DB2 信息集合,它可以简化与 DB2 9 相关的任务。DB2 Information Center 让用户可以接受关于任意多个问题的帮助。
DB2 Information Center 可以通过标准的 Web 浏览器来访问,也可以通过 DB2 9 附带的多个图形化用户界面中内置的工具来访问。目前的 Microsoft Explorer(版本 5 和更高版本)和 Netscape Navigator(版本 6.1 和更高版本)都受支持。
DB2 Information Center 的内容是随着每个产品或修复包的版本而更新的。为了获得有效的信息,首先要确认您使用的是什么版本的 DB2。DB2 Information Center 使用得越多就越好。当您熟悉了各种选项之后,就可以更有效地缩小搜索范围,更快速地获得答案。
可以从 Start menu ==> all Programs ==> IBM DB2 ==> Information ==> Information Center 访问 DB2 Information Center。
或者,可以使用以下 url:http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp
例子
在本系列的第 3 部分,当您尝试执行一个包含不匹配数据类型的查询时,会遇到一个错误。您将收到以下错误消息:
[IBM][CLI Driver][DB2/LINUX] SQL0401N The data types of the operands
for the operation ">" are not compatible. SQLSTATE=42818
为了更好地理解这条消息的意思,您可能想研究这个错误的细节,并了解可以采取的正确行动。
进入到 DB2 Information Center。
在左上角的 Search 框中输入错误消息中的错误代码(SQL0401N)。
单击 GO。
结果集显示两条结果。第一条结果是 “100% SQL0401”,表明这条结果相关度为 100%,而另外一条结果的相关度只有 8%。因此请选择第一条结果。
阅读搜索到的结果。
元数据
元数据(metadata)是关于数据库本身结构的数据。这些数据包括诸如数据库中表、索引、列的列表之类的信息。
您常常会听到元数据的其他称谓,例如编目数据或系统表。每当用户创建、删除或更改数据库的某个方面时,DB2 9 会自动收集元数据。
用于常规 SQL 的存储数据的标准不适用于元数据的存储。每个数据库供应商都设置了特有的方法来存储和处理元数据。知道如何检索元数据对于使用数据库有很大的帮助。
然而,很多数据库管理员都觉得元数据带有一点机密的性质。因此,很多用户会不能访问元数据。您需要了解自己对元数据有怎样的访问权限。
系统表
DB2 9 将元数据存储在大约 100 个系统表中。这些系统表都包含在 SYSIBM 模式中。这个模式是在创建数据库的时候自动创建的。系统表还有一个标准的命名惯例。每个表的名称都以 SYS 开头,例如 SYSTABLES、SYSINDEXES 和 SYSUSERAUTH。(由于这个原因,用户定义的表的名称不能以 SYS 开头。)
用户检索系统表中的元数据的方式与检索常规表中的数据大致相同。在这两种情况下,SQL 语句的行为是一样的。使用 SQL 时只需知道表的结构。有了适当的授权,用户就可以通过查询数据库获得保存元数据的所有系统表的列表。
例子查询
SELECT name
FROM sysibm.systables
WHERE name LIKE 'SYS%';
结果
NAME |
SYSATTRIBUTES |
SYSBUFFERPOOLNODES |
SYSBUFFERPOOLS |
... |
SYSTABLES |
... |
SYSXSROBJECTS |
取决于系统管理员和/或数据库管理员授予您的许可,您可能可以执行上述查询,也可能不可以执行上述查询。
如果去掉上述查询中的 WHERE 子句,那么运行查询后将得到数据库中所有表的一份列表。结果集将按照 Creator(模式)排序,然后在每个 Creator 中又按照表名的字母顺序排序。列名 “Creator” 假设每个表的模式与表的创建者有相同的名称。
例子查询
SELECT name, creator
FROM sysibm.systables;
结果
NAME | CREATOR |
CLASS | AROMA |
... | AROMA |
SUPPLIER | AROMA |
... | ... |
SYSATTRIBUTES | SYSIBM |
... | SYSIBM |
SYSXMLSTATS | SYSIBM |
... | ... |
通过约束模式的名称,可以将结果集限制为属于给定模式的那些表。
例子查询
SELECT name, creator
FROM sysibm.systables
WHERE creator='AROMA';
结果
NAME | CREATOR |
CLASS | AROMA |
... | AROMA |
SUPPLIER | AROMA |
类似地,通过访问 sysibm.syscolumns 系统表,可以列出关于特定表中的列的信息。
例子查询
SELECT * FROM sysibm.syscolumns WHERE tbname='CLASS' AND tbcreator='AROMA';
结果
NAME | TBNAME | TBCREATOR | REMARKS | COLTYPE | ... |
CLASS_DESC | CLASS | AROMA | CHAR | ... | |
CLASS_TYPE | CLASS | AROMA | CHAR | ... | |
CLASSKEY | CLASS | AROMA | INTEGER | ... |
可以通过执行这个命令来列出这个表的内容。实际上,还有很多列在这个结果集中没有显示出来。
结束语
本教程介绍了零售群表和推荐的一些典型的业务问题,这些问题都可以用 IBM DB2 9 来回答。创建这些表是为了展示这样一种环境:
有为数不多的几个表
列名使用分析者的词汇
列反映业务的自然维度
本系列的主体是一些详细的例子,这些例子展示如何编写 SQL 查询来回答业务问题。这些例子大多数是基于 Aroma 零售群表的。也有少数几个例外的例子,这几个例子则是使用非常小的表来演示特定的概念。
本教程中描述的最常用的数据类型有:
数字 | SMALLINT、INTEGER、BIGINT、REAL、DOUBLE 和 DECIMAL |
字符串 | 定长字符串(CHAR)和变长字符串(VARCHAR) |
图形字符串 | 定长图形字符串(GRAPHIC)和变长图形字符串(VARGRAPHIC、LONG VARGRAPHIC 和 DBCLOB) |
二进制串 | 二进制大型对象(BLOB) |
日期时间值 | 日期、时间和时间戳 |
null 值 | null |
XML | XML 文档 |
本文示例源代码或素材下载
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
赞助商链接