按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
INPUT
SQL》 CREATE VIEW PANY_INFO (NAME; STATE) AS
2 SELECT * FROM PANY;
SQL》 SELECT * FROM PANY_INFO;
OUTPUT
NAME STATE
Phone pany GA
Power pany FL
Record Club CA
Software pany CA
Cable TV pany TX
Joe's Car Palace FL
197
…………………………………………………………Page 198……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
NAME STATE
S。C。 Student Loan SC
Florida Water pany FL
U…O…Us Insurance pany GA
Debtor's Credit Card NJ
注 用户可以通过创建视图来查询特定的数据 如果你的表有 50 列且有成千上万个记
录但是你只需要其中两列的话 你可以创建视图来选择这两列 然后从视图中查询 你会
发现查询在数据返回时间上与原来有相当大的不同
列的重命名
视图继承了已有列的名字 此外视图还可以有自己的名字 SQL 的 CREATE VIEW 允
许你对所选择的列进行重命名 它与前边的例子非常相似 如果你想把 PANY 中的
ADDRESS CITY 和 STATE 字段组合起来并打印到信封上时该如何做呢 请看下边的例
子 它使用了 SQL 的+操作符将地址字段与逗号和空格组合起来
INPUT
SQL》 CREATE VIEW ENVELOPE (PANY; MAILING_ADDRESS) AS
2 SELECT NAME; ADDRESS + 〃 〃 + CITY + 〃; 〃 + STATE
3 FROM PANY;
SQL》 SELECT * FROM ENVELOPE
OUTPUT
PANY MAILING_ADDRESS
Phone pany 111 1st Street Atlanta; GA
Power pany 222 2nd Street Jacksonville; FL
Record Club 333 3rd Avenue Los Angeles; CA
Software pany 444 4th Drive San Francisco; CA
Cable TV pany 555 5th Drive Austin; TX
Joe's Car Palace 1000 Govt。 Blvd Miami; FL
S。C。 Student Loan 25 College Blvd。 Columbia; SC
Florida Water pany 1883 Hwy。 87 Navarre; FL
U…O…Us Insurance pany 295 Beltline Hwy。 Macon; GA
Debtor's Credit Card 115 2nd Avenue Newark; NJ
198
…………………………………………………………Page 199……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
分析
当在视图中使用 SQL 的计算功能时 SQL 会要求你给出一个虚字段的名字 这是可以
理解的 因为像 COUNT(*)或 AVG(PAYMENT)。是不能作为名字的
注 检查你的解释器看它是否支持+操作符
SQL 对视图的处理过程
视图可以以比数据在数据库表中的存储情况更为便捷的方式来返回数据 当需要连续
进行几个复合的查询时 例如在存储过程和应用程序中时 视图也是非常方便的 为了进
一步地说明视图和 SELECT 语句 下边的例子分别使用了 SQL 的查询方法和视图方法以
作对比 假设你需要经常去运行一个查询 例如 你需要例行公事地将 BILLS 表与
BANK_ACCOUNT 表进行归并以得到支付信息
INPUT
SQL》 SELECT BILLS。NAME; BILLS。AMOUNT; BANK_ACCOUNTS。BALANCE
2 BLANCE BANK_ACCOUNTS。BANK BANK FROM BILLS; BANK_ACCOUNTS
3 WHERE BILLS。ACCOUNT_ID = BANK_ACCOUNTS。ACCOUNT_ID;
OUTPUT
BILLS。NAME BILLS。AMOUNT BALANCE BANK
Phone pany 125 500 First Federal
Power pany 75 500 First Federal
Record Club 25 1200 First Investor's
Software pany 250 500 First Federal
Cable TV pany 35 90 Credit Union
Joe's Car Palace 350 2500 Second Mutual
S。C。 Student Loan 200 4500 Fidelity
Florida Water pany 20 500 First Federal
U…O…Us Insurance pany 125 2500 Second Mutual
这一过程用视图来表达则语句如下
INPUT/OUTPUT
SQL》 CREATE VIEW BILLS_DUE (NAME; AMOUNT; ACCT_BALANCE; BANK) AS
2 SELECT BILLS。NAME; BILLS。AMOUNT; BANK_ACCOUNTS。BALANCE
3 BANK_ACCOUNTS。BANK FROM BILLS; BANK_ACCOUNTS
199
…………………………………………………………Page 200……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
4 WHERE BILLS。ACCOUNT_ID = BANK_ACCOUNTS。ACCOUNT_ID
View created。
如果你对 BILLS_DUE 视图执行查询是使用了一些条件 如下语句所示
INPUT/OUTPUT
SQL》 SELECT * FROM BILLS_DUE
2 WHERE ACCT_BALANCE 》 500
NAME AMOUNT ACCT_BALANCE BANK
Record Club 25 1200 FirstInvestor's
Joe's Car Palace 350 2500 SecondMutual
S。C。 Student Loan 200 4500 Fidelity
U…O…Us Insurance pany 125 2500 SecondMutual
分析
在上述语句中 SQL 执行了好几步操作 因为 BILLS_DUE 是一个视图 不是一个真实
的表 SQL 首先查找一个名字叫 BILLS_DUE 的表 但是没有找到 SQL 的过程可能会从
系统表中发现 BILLS_DUE 原来是一个视图 这依据你所使用的数据库而定 于是它对视
图进行了诠释并形成了如下的查询语句
SQL》 SELECT BILLS。NAME; BILLS。AMOUNT; BANK_ACCOUNTS。BALANCE;
2 BANK_ACCOUNTS。BANK FROM BILLS; BANK_ACCOUNTS
3 WHERE BILLS。ACCOUNT_ID = BANK_ACCOUNTS。ACCOUNT_ID
4 AND BANK_ACCOUNTS。BALANCE 》 500;
例 10。1
构造一个视图以显示所有需要发送账单的州 同时要求显示每个州的账单金额总数和
账单的总数
首先 你知道 CREATE VIEW 语句看起来应该是下边的样子
CREATE VIEW EXAMPLE (STATE; TOTAL_BILLS; TOTAL_AMOUNT) AS。。。
现在你必须决定 SELECT 语句的内容 你要清楚根据需要你要选择 STATE 字段并应
该使用 SELECT DISTINCT 语法以显示账单需要发送的州 例如
INPUT
SQL》 SELECT DISTINCT STATE FROM PANY;
OUTPUT
STATE GA FL CA TX SC NJ 为节约宽度这里用制表符取代了段落标记
200
…………………………………………………………Page 201……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
除了选择州字段以外 你还需要知道发往这个州的账单总数 因此 你需要归并 BILLS
表和 PANY 表
INPUT/OUTPUT
SQL》 SELECT DISTINCT PANY。STATE; COUNT(BILLS。*) FROM BILLS; PANY
2 GROUP BY PANY。STATE
3 HAVING BILLS。NAME = PANY。NAME;
STATE COUNT(BILLS。*)
GA 2
FL 3
CA 2
TX