按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
5;000;000;000 行
7 下边的联接属于哪一种类型的联接
SELECT E。NAME ; E 。EMPLOYEE_ID; EP 。SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP
WHERE E 。EMPLOYEE_ID = EP 。EMPLOYEE_ID
这是一个等值联接 你可以从中发现所以存在于两个表中的雇员 ID
8 下边的查询语句能否工作
A 。 SELECT NAME; EMPLOYEE_ID; SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP
WHERE EMPLOYEE_ID = EMPLOYEE_ID AND NAME LIKE '%MITH';
不会 列句和表名不正确 要注意使用列和表的别名
select e。name; e。employee_id; ep。salary
from employee_tbl e;
employee_pay_tbl ep
where name like '%MITH';
B。 SELECT E。NAME ; E。EMPLOYEE_ID; EP。SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP
WHERE NAME LIKE '%MITH';
不会 在 WHERE 子句中没有联接命令
select e。name; e。employee_id; ep。salary
from employee_tbl e;
employee_pay_tbl ep
where e。employee_id = ep。employee_id
and e。name like '%MITH';
C。 SELECT E。NAME ; E。EMPLOYEE_ID; EP。SALARY FROM EMPLOYEE_TBL E;EMPLOYEE_PAY_TBL EP
WHERE E 。EMPLOYEE_ID = EP 。EMPLOYEE_ID AND E。NAME LIKE '%MITH';
正确的
542
…………………………………………………………Page 543……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
9 是否在联接语句中 WHERE 子句中的第一个条件应该是联接条件
联接命令应该在条件的前边
10 联接是否限制为一列 是否可以有更多的列
可以
练习答案
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