SQL 21日自学通(V3.0)(PDF格式)-第98部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
可以
练习答案
4 在表的自我联接这部分 最后的一个例子返回了两个结果 请重写这个查询使它对
多余的记录只返回一个结果
INPUT/OUTPUT:
SELECT F。PARTNUM; F。DESCRIPTION;
S。PARTNUM;S。DESCRIPTION
FROM PART F; PART S
WHERE F。PARTNUM = S。PARTNUM
AND F。DESCRIPTION S。DESCRIPTION
AND F。DESCRIPTION 》 S。DESCRIPTION
PARTNUM DESCRIPTION PARTNUM DESCRIPTION
76 ROAD BIKE 76 CLIPPLESS SHOE
5 重写下边的查询使它更可读和简炼
INPUT:
select orders。orderedon; orders。name; part。partnum;part。price; part。description
from orders; part
where orders。partnum = part。partnum and orders。orderedon
between '1…SEP…96' and '30…SEP…96' order by part。partnum
答 select o。orderedon ORDER_DATE; o。name NAME; p。partnum PART#;
p。price PRICE; p。description DESCRIPTION
from orders o; part p
where o。partnum = p。partnum
and o。orderedon like '%SEP%'
order by ORDER_DATE;
6 使用 ORDERS 表和 PART 表 返回下边的结果
543
…………………………………………………………Page 544……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
OUTPUT
ORDEREDON NAME PARTNUM QUANTITY
2…SEP…96 TRUE WHEEL 10 1
答 Select o。orderedon ORDEREDON; o。name NAME;
p。partnum PARTNUM; o。quanity QUANITY
from orders o;part p
where o。partnum = p。partnum
and o。orderedon like '%SEP%';
还有许多种写法
第 7 天 子查询 内嵌的 SELECT 语句
问题答案
1 在嵌套查询部分 有一个例子中子查询返回了以下几个数值
LE SHOPPE
BIKE SPEC
LE SHOPPE
BIKE SPEC
JACKS BIKE
其中有一些结果是重复的 为什么在最终的结果中没有出现重复
由于查询调用了子查询 所以在最后的结果中没有出现重复
SELECT ALL C。NAME; C。ADDRESS; C。STATE;C。ZIP
FROM CUSTOMER C
WHERE C。NAME IN
只会返回 NAME 的州为 IN 的记录 这里不要为 IN 在复杂语句里的简写所迷糊
2 下面的话是对还是错
4 汇总函数如 SUM AVG COUNT MAX MIN 都返回多个数值 不对 它们
都返回多个数值
5 子查询最多允许嵌套两层 不对 嵌套层数的限制是根据你的解释器而定的
6 相关子查询是完全的独立查询 不对 相关子查询中你使用外部引用
544
…………………………………………………………Page 545……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
3 下边的子查询中哪一个是使用 ORDERS 表和 PART 表工作的
INPUT/OUTPUT
SQL》 SELECT * FROM PART;
PARTNUM DESCRIPTION PRICE
54 PEDALS 54。25
42 SEATS 24。50
46 TIRES 15。25
23 MOUNTAIN BIKE 350。45
76 ROAD BIKE 530。00
10 TANDEM 1200。00
INPUT/OUTPUT
SQL》 SELECT * FROM ORDERS
ORDEREDON NAME PARTNUM QUANITY REMARKS
15…MAY…96 TRUE WHEEL 23 6 PAID
19…MAY…96 TRUE WHEEL 76 3 PAID
2…SEP…96 TRUE WHEEL 10 1 PAID
30…JUN…96 BIKE SPEC 54 10 PAID
30…MAY…96 BIKE SPEC 10 2 PAID
30…MAY…96 BIKE SPEC 23 8 PAID
17…JAN…96 BIKE SPEC 76 11 PAID
17…JAN…96 LE SHOPPE 76 5 PAID
1…JUN…96 LE SHOPPE 10 3 PAID
1…JUN…96 AAA BIKE 10 1 PAID
1…JUN…96 AAA BIKE 76 4 PAID
1…JUN…96 AAA BIKE 46 14 PAID
11…JUL…96 JACKS BIKE 76 14 PAID
A SQL》 SELECT * FROM ORDERS WHERE PARTNUM =
SELECT PARTNUM FROM PART
WHERE DESCRIPTION = 'TRUE WHEEL';
不对 在子查询的周围没有括号
B SQL》 SELECT PARTNUM FROM ORDERS WHERE PARTNUM =
(SELECT * FROM PART
WHERE DESCRIPTION = 'LE SHOPPE')
不会 SQL 引擎在=操作后边关联表所的所有了
545
…………………………………………………………Page 546……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
C SQL》 SELECT NAME; PARTNUM FROM ORDERS WHERE EXISTS
(SELECT * FROM ORDERS
WHERE NAME = 'TRUE WHEEL')
对的 这个查询是正确的
练习答案
应用 ORDERS 表来写一个查询 返回所以字母顺序排列在 JACKS BIKE 之后的NAMES
和 ODEREDON 数据
INPUT/OUTPUT:
SELECT NAME; ORDEREDON
FROM ORDERS
WHERE NAME 》
(SELECT NAME
FROM ORDERS
WHERE NAME ='JACKS BIKE')
NAME ORDEREDON
TRUE WHEEL 15…MAY…1996
TRUE WHEEL 19…MAY…1996
TRUE WHEEL 2…SEP…1996
TRUE WHEEL 30…JUN…1996
LE SHOPPE 17…JAN…1996
LE SHOPPE 1…JUN…1996
第八天 操作数据
问题答案
9 下边的语句有什么错误
DELETE COLLECTION
如果你想删除 COLLECZTION 表中的所有记录 你必需使用下边的语法
DELETE FROM COLLECTION;
546
…………………………………………………………Page 547……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
要注意这条语句会删除表中的所有的记录 你可以使用下边的语法来有选择地删
除表中的记录
DELETE FROM COLLECTION
WHERE VALUE = 125
这条语句将会删除所有 VALUE 为 125 的记录
10 下边的语句有什么错误
INSERT INTO COLLECTION SELECT * FROM TABLE_2
这条语句的目的是将 TABLE_2 中的所有记录都拷贝到 COLLECTION 表中
这里存在的主要问题是在 INSERT 语句中使用了 INTO 关键字 在把一个表中的
数据拷贝到另一个表中时 你必需使用下边的语法
INSERT COLLECTION
SELECT * FROM TABLE_2;
同时 要记住 TABLE_2 中的数据类型和字段次序与 COLLECTION 表中的一样
11 下边的语句有什么错误
UPDATE COLLECTION (〃HONUS WAGNER CARD〃 25000; 〃FOUND IT〃)
这条语句把 UPDATE 与 INSERT 弄混了 如果想更新 COLLECTIONS 表中的数
值 你应该使用下边的语法
UPDATE COLLECTIONS
SET NAME = 〃HONUS WAGNER CARD〃;
VALUE = 25000;
REMARKS = 〃FOUND IT〃;
12 如果执行下边的语句会有什么结果
SQL》 DELETE * FROM COLLECTION;
由于语法不正确 什么也不会删除 这里不需要*号
13 如果执行下边的语句会有什么结果
SQL》 DELETE FROM COLLECTION;
在 COLLECTION 表中的所有记录都会被删除
14 如果执行下边的语句会有什么结果
SQL》 UPDATE COLLECTION SET WORTH = 555
SET REMARKS = 'UP FROM 525';
547
…………………………………………………………Page 548……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
在 COLLECTION 表中的所有 WORTH 现在都变成了 555 而且所有的 REMARKS 都
变成了 UP FROM 525 这可不是一件好事
15 下边的语句是否会工作
SQL》 INSERT INTO COLLECTION SET VALUES = 900 WHERE ITEM = 'STRING'
不会工作 INSERT 与 SET 不可能在一起工作
16 下边的语句是否会工作
SQL》 UPDATE COLLECTION SET VALUES = 900 WHERE ITEM = 'STRING'
可以工作 语法完全正确
练习答案
3 试着向一个表中插入一个不正确的数据类型 看一下出错信息 然后再插入一个
正确的数据类型
无论你使用何种类型的解释器 你都会收到一个所插入数据的类型与表中对应列的数
据类型不匹配的错误信息
4 试着使用你的数据库系统将某个表导出为其他库格式 然后再把它导入 熟悉一
下你的数据库系统的导入与导出操作 并试着用其它数据库操作导出文件
对于确切的导入和导出数据的语法请参见你的文档 如果你重复导入的话你可以想删
除导入表中的所有数据 在真正进行数据操作之前你应该先熟悉一下导入导出命令 如果
在你的表中存在唯一约束列那么你的导入操作可能会失败 你将会收到大量的关于唯一约
束限制的错误
第九天 创建和操作表
问题答案
9 ALTER DATABASE 语句经常用在修改已有表的结构上 对不对
不对 大多数数据系统中没有 ALTER DATABASE 命令 修改已有表的结构应该用
ALTER TABLE 命令
548
…………………………………………………………Page 549………………