| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
17. 使用表的别名(Alias) 网管u家u.bitsCN.com
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
网管网www.bitscn.com
网管联盟bitsCN@com
(译者注: Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)
网管有家bitscn.net
18. 用EXISTS替代IN 网管bitscn_com
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
低效: 网管朋友网www_bitscn_net
SELECT * 网管有家www.bitscn.net
FROM EMP (基础表)
网管朋友网www_bitscn_net
WHERE EMPNO > 0
AND DEPTNO IN (SELECT DEPTNO 网管论坛bbs_bitsCN_com
FROM DEPT
网管网www_bitscn_com
WHERE LOC = ‘MELB’)
网管网www_bitscn_com
高效: 中国网管联盟bitsCN.com
SELECT * 网管联盟bitsCN@com
FROM EMP (基础表) 网管u家u.bitsCN.com
WHERE EMPNO > 0
网管网www.bitscn.com
AND EXISTS (SELECT ‘X’
网管u家u.bitscn@com
FROM DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
网管网www.bitscn.com
AND LOC = ‘MELB’) 网管u家bitscn.net
网管bitscn_com
网管朋友网www_bitscn_net
(译者按: 相对来说,用NOT EXISTS替换NOT IN 将更显著地提高效率,下一节中将指出) 网管联盟bitsCN_com
网管bitscn_com
网管有家bitscn.net
19. 用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.
网管有家bitscn.net
例如: 网管u家www.bitscn.net
SELECT …
FROM EMP 网管bitscn_com
WHERE DEPT_NO NOT IN (SELECT DEPT_NO
网管网www.bitscn.com
FROM DEPT
网管u家www.bitscn.net
WHERE DEPT_CAT=’A’); 网管bitscn_com
网管bitscn_com
为了提高效率.改写为:
网管联盟bitsCN@com
网管下载dl.bitscn.com
(方法一: 高效) 网管u家bitscn.net
SELECT …. 网管u家u.bitsCN.com
FROM EMP A,DEPT B
WHERE A.DEPT_NO = B.DEPT(+)
网管网www_bitscn_com
AND B.DEPT_NO IS NULL
AND B.DEPT_CAT(+) = ‘A’ 网管u家bitscn.net
中国网管联盟bitsCN.com
网管u家bitscn.net
(方法二: 最高效) ---可以采用
SELECT ….
FROM EMP E 网管有家bitscn.net
WHERE NOT EXISTS (SELECT ‘X’
网管论坛bbs_bitsCN_com
FROM DEPT D 网管网www.bitscn.com
WHERE D.DEPT_NO = E.DEPT_NO 网管有家bitscn.net
AND DEPT_CAT = ‘A’); 网管u家u.bitsCN.com
|
0
|
评论加载中…