SQL 21日自学通(V3.0)(PDF格式)-第43部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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 1
SC 1
NJ 1
现在你已经成功地返回了需要的三分之二的结果 你可以用下边的语句来最终结束这
条语句 加入 SUM 语句以返回每个州的金额总数
INPUT/OUTPUT
SQL》 SELECT DISTINCT PANY。STATE; COUNT(BILLS。NAME); SUM(BILLS。AMOUNT)
2 FROM BILLS; PANY
3 GROUP BY PANY。STATE
4 HAVING BILLS。NAME = PANY。NAME
STATE COUNT(BILLS。*) SUM(BILLS。AMOUNT)
GA 2 250
FL 3 445
CA 2 275
TX 1 35
SC 1 200
NJ 1 35
最后一步 你可以将它与最初的 CREATE VIEW 语句组合在一起
INPUT/OUTPUT
SQL》 CREATE VIEW EXAMPLE (STATE; TOTAL_BILLS; TOTAL_AMOUNT) AS
2 SELECT DISTINCT PANY。STATE; COUNT(BILLS。NAME);SUM(BILLS。AMOUNT)
3 FROM BILLS; PANY
201
…………………………………………………………Page 202……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
4 GROUP BY PANY。STATE
5 HAVING BILLS。NAME = PANY。NAME;
INPUT/OUTPUT
SQL》 SELECT * FROM EXAMPLE;
STATE TOTAL_BILLS TOTAL_AMOUNT
GA 2 250
FL 3 445
CA 2 275
TX 1 35
SC 1 200
NJ 1 35
上边的例子向你展示了如何设计 CREATE VIEW 语句和 SELECT 语句 SELECT 语句
测试代码的作用在于检查数据的返回结果是不是符合你的要求 然后才将其最终组合来创
建一个视图
例 10。2
假设你的债权人因为你推迟付款加收 10%的服务费 而且不幸的是你在这个月的每件
事都需要推迟 因此你想看一下需要推迟付款的债主的账号
归并语句在这里是非常简单的 因为你不需要使用像 SUM 或 COUNT 之类的语句
可是你会第一次发现使用视图的好处 在视图中你可以将增加的 10%的服务费在视图中作
为一个字段 由于这一点 你可以在视图中使用 SELECT 语句来为你计算总计的结果 语
句如下
INPUT
SQL》 CREATE VIEW LATE_PAYMENT (NAME; NEW_TOTAL; ACCOUNT_TYPE) AS
2 SELECT BILLS。NAME; BILLS。AMOUNT * 1。10; BANK_ACCOUNTS。TYPE
3 FROM BILLS; BANK_ACCOUNTS
4 WHERE BILLS。ACCOUNT_ID = BANK_ACCOUNTS。ACCOUNT_ID;
OUTPUT
View created。
INPUT/OUTPUT
SQL》 SELECT * FROM LATE_PAYMENT
202
…………………………………………………………Page 203……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
NAME NEW_TOTAL ACCOUNT_TYPE
Phone pany 137。50 Checking
Power pany 82。50 Checking
Record Club 27。50 MoneyMarket
Software pany 275 Checking
Cable TV pany 38。50 Checking
Joe's Car Palace 385 Checking
S。C。 Student Loan 220 Business
Florida Water pany 22 Checking
U…O…Us Insurance pany 137。50 Business
Debtor's Credit Card 38。50 Savings
在 SELECT 语句使用约束
在视图的 SELECT 语句中使用约束是必然的 在使用 SELECT 语句中可以应用下边这
两个规则
l 你不能使用 UNION 操作
l 你不能使用 ORDER BY 子句 但是在视图中使用 GROUP BY 子句可以有 ORDER
BY 子句相同的功能
在视图中修改数据
正如同你所学习过的 你可以在数据库的一个或多个表中使用视图 你也可以在 SQL
和数据库应用程序中使用虚表 在使用 CREATE VIEW SELECT 创建视图以后 你可以用
在第八天 操作数据 学习过的 INSERT UPDATE 和 DELETE 语句来更新 插入 删除
视图中的数据
我们在稍后讨论在视图中操作数据的限制 下边的例子显示了如何在视图中操作数据
将例 10。2 中的工作继续 更新 BILLS 表中的那不幸的 10%的费用
INPUT/OUTPUT
SQL》 CREATE VIEW LATE_PAYMENT AS
2 SELECT * FROM BILLS;
SQL》 UPDATE LATE_PAYMENT
2 SET AMOUNT = AMOUNT * 1。10;
203
…………………………………………………………Page 204……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 SELECT * FROM LATE_PAYMENT;
NAME NEW_TOTAL ACCOUNT_ID
Phone pany 137。50 1
Power pany 82。50 1
Record Club 27。50 2
Software pany 275 1
Cable TV pany 38。50 3
Joe's Car Palace 385 5
S。C。 Student Loan 220 6
Florida Water pany 22 1
U…O…Us I