版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、sql 关联查询和连接查询2010-10-26 14:20:02| 分类:服务器 | 标签:联接字号大中小 订阅本文来自 CSDN 博客: 1 取得表中第 6 到第 10 条记录的值1.1 第一种方法,使用minus 语句假设 ddl 语句如下:CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)那么第一种方法就是取出前5 条,再取出前 10 条,然后采用集合运算的方法把前 10 条减去前 5 条就 OK 了, SQL 语句如下以下是引用片段:SELECT * FROM T WHERE ROWNUM <= 10MINUSSELECT
2、* FROM T WHERE ROWNUM <= 5;1.2 另外一种方法,采用子查询子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前10 条数据,顺路也取得前10 条数据的rownum,然后再一次查询的时候取得刚才查询的rownum 大于 5 的那些数据。SQL 语句如下以下是引用片段:SELECT ID, VALUE FROM(SELECT ID, VALUE, ROWNUM R FROM T WHERE R <= 10)WHERER>5;通过上面的语句,就得到了6 到第 10 条数据了。2 利用外连接替代 not in
3、语句in 语句还有 not in 语句的效率是非常的差的,因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对,如果 in 或者 not in 两侧的数据量在上万条的时候,进行比对的次数就是上亿次,很可能一个简单的 sql 语句就要执行半个小时以上。这种效率客户是肯定不能够接受的。那我们可以考虑两种方法进行替代,第一种就是采用 exist 语句和 not exist 语句,这种大家应该比较熟悉了。另外一种就是巧用外关联语句,这种方法可能大家不是很熟悉,我来稍微说一下。假设数据表的建表 DDL 语句为 CREATE TABLE T1(ID VARCHAR2(4) PRIMARYKEY,
4、VALUE INT)而 in 或者 not in 的表的建表 DDL 语句为CREATE TABLE T2(VALUE INT)Oracle 中外关联采用的是 (+)符号表示外关联,也就是说标识了 (+)符号的部分在找不到对应的值的时候为 NULL 。下面是替代 in 语句的时候的 SQL 语句以下是引用片段:SELECT T1.ID, T1.VALUEFROM T1, T2WHERE T1.VALUE = T2.VALUE(+)AND T2.VALUE IS NOT NULL;而类似的。替代not in 语句的时候的以下是引用片段:SQL 语句则为SELECT T1.ID, T1.VALUE
5、FROM T1, T2WHERE T1.VALUE = T2.VALUE(+)AND T2.VALUE IS NULL;大家可以试验一下,在数据量多的时候,采用外关联比用in 或者not in 的执行效率要高很多很多。数据库的左连接,右连接问题前一阶段经历了几次程序员的面试,发现数据库这个部分占了很大的比重。而左连接,右连接又是很多人问的重点,当初我就是不太明白怎么一回事,所以吃了几次的亏。今天把专门作了一次关于左连接和右连接的文章,巩固一下知识:要点: left join,rightjoin,inner join首先有如下两个表:Student:ID (int ) Name(nvarchar
6、)1 a2 b3 c4 d5 e6 f Quiz:ID(int) score(int)1 602 704 806 908 1009 30内连接:( inner join )包括连接表的匹配行select Student.Name,Quiz.score from Quiz inner join Student on Student.ID=Quiz.ID Name scorea 60b 70d 80f 90左连接:( left join )包括连接表匹配行以及左连接表的所有行select Student.Name,Quiz.score from Student left join Quiz on
7、Student.ID=Quiz.ID Name scorea 60b 70c nulld 80e nullf 90右连接: (right join) 结果包括连接表的匹配行以及右连接表的所有行select Student.Name,Quiz.score from Student right join Quiz on Student.ID=Quiz.ID Name scorea 60b 70d 80f 90 null 100null 30当然,也可以看出左连接也可以写成右连接的形式:select Student.Name,Quiz.score from Student right join Qu
8、iz on Student.ID=Quiz.ID等价于select Student.Name,Quiz.score from Quiz left join Student on Student.ID=Quiz.ID 使用外联接仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。Microsoft?SQL Se
9、rver? 2000 对在 FROM 子句中指定的外联接使用以下SQL-92 关键字:·LEFT OUTER JOIN 或 LEFT JOIN·RIGHT OUTER JOIN 或 RIGHT JOIN·FULL OUTER JOIN 或 FULL JOINSQL Server 支持 SQL-92 外联接语法,以及在 WHERE 子句中使用 *= 和 =* 运算符指定外联接的旧式语法。由于 SQL-92 语法不容易产生歧义,而旧式 Transact-SQL 外联接有时会产生歧义,因此建议使用SQL-92 语法。使用左向外联接假设在 city 列上联接 author
10、s 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet和 Cheryl Carson)。若要在结果中包括所有的作者,而不管出版商是否住在同一个城市,请使用 SQL-92 左向外联接。下面是 Transact-SQL 左向外联接的查询和结果: USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors a LEFT OUTER JOIN publishers pON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC,
11、 a.au_fname ASC 下面是结果集:au_fname au_lname pub_name- - -Reginald Blotchet-Halls NULLMichel DeFrance NULLInnes del Castillo NULLAnn Dull NULLMarjorie Green NULLMorningstar Greene NULLBurt Gringlesby NULLSheryl Hunter NULLLivia Karsen NULLCharlene Locksley NULLStearns MacFeather NULLHeather McBadden NUL
12、LMichael O'Leary NULLSylvia Panteley NULLAlbert Ringer NULLAnne Ringer NULLMeander Smith NULLDean Straight NULLDirk Stringer NULLJohnson White NULLAkiko Yokomoto NULLAbraham Bennet AlgodataInfosystemsCheryl Carson AlgodataInfosystems(23 row(s) affected)不管是否与 publishers 表中的 city 列匹配, LEFT OUTER J
13、OIN 均会在结果中包含authors 表的所有行。注意:结果中所列的大多数作者都没有相匹配的数据 ,因此,这些行的 pub_name列包含空值。 使用右向外联接假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet和 Cheryl Carson)。 SQL-92 右向外联接运算符 RIGHT OUTER JOIN 指明:不管第一个表中是否有匹配的数据,结果将包含第二个表中的所有行。若要在结果中包括所有的出版商,而不管城市中是否还有出版商居住,请使用 SQL-92 右向外联接。下面是 Transa
14、ct-SQL 右向外联接的查询和结果: USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors AS a RIGHT OUTER JOIN publishers AS p ON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC 下面是结果集:au_fname au_lname pub_name- - -Abraham Bennet AlgodataInfosystemsCheryl Carson AlgodataInfosystemsN
15、ULL NULL Binnet&HardleyNULL NULL Five Lakes PublishingNULL NULL GGG&GNULL NULL Lucerne PublishingNULL NULL New Moon BooksNULL NULL Ramona PublishersNULL NULL Scootney Books(9 row(s) affected)使用谓词(如将联接与常量比较)可以进一步限制外联接。下例包含相同的右向外联接,但消除销售量低于 50 本的书籍的书名:USE pubsSELECT s.stor_id, s.qty, t.titleFR
16、OM sales s RIGHT OUTER JOIN titles tON s.title_id = t.title_idAND s.qty> 50ORDER BY s.stor_id ASC下面是结果集:stor_idqty title- - -(null) (null) But Is It User Friendly?(null) (null) Computer Phobic AND Non-Phobic Individuals: Behavior Variations(null) (null) Cooking with Computers: Surreptitious Balan
17、ce Sheets(null) (null) Emotional Security: A New Algorithm(null) (null) Fifty Years in Buckingham Palace Kitchens 7066 75 Is Anger the Enemy?(null) (null) Life Without Fear(null) (null) Net Etiquette(null) (null) Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean(null) (null) Prolonged
18、Data Deprivation: Four Case Studies(null) (null) Secrets of Silicon Valley(null) (null) Silicon Valley Gastronomic Treats(null) (null) Straight Talk About Computers(null) (null) Sushi, Anyone?(null) (null) The Busy Executive's Database Guide(null) (null) The Gourmet Microwave(null) (null) The Ps
19、ychology of Computer Cooking(null) (null) You Can Combat Computer Stress!(18 row(s) affected)有关谓词的更多信息,请参见WHERE 。使用完整外部联接若要通过在联接结果中包括不匹配的行保留不匹配信息,请使用完整外部联接。 Microsoft?SQL Server? 2000 提供完整外部联接运算符 FULL OUTER JOIN ,不管另一个表是否有匹配的值,此运算符都包括两个表中的所有行。假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(
20、本例中为 Abraham Bennet和 Cheryl Carson)。 SQL-92 FULL OUTER JOIN 运算符指明:不管表中是否有匹配的数据,结果将包括两个表中的所有行。若要在结果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商是否住在同一个城市,请使用完整外部联接。下面是 Transact-SQL 完整外部联接的查询和结果:USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors a FULL OUTER JOIN publishers pON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC 下面是结果集:au_fname au_lname pub_name- - -Reginald Blotchet-Halls NULLMic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宿迁市护士招聘笔试题及答案
- 2026年乡村医生定期考核真题试卷及答案(十三)
- 医学26年:十二指肠溃疡诊疗 查房课件
- 急性脑出血的护理实践指南
- 26年随访服务全程管理
- 噪声控制工作总结
- 吊顶维修施工工艺流程
- 防静电环氧地坪施工工艺流程
- 2026年汽车驾驶员高级工(三级)职业技能鉴定模拟试题
- 造瘘手术围手术期护理常规
- 2023RDPAC行业行为准则
- 2025年云南省高考化学试题(学生版+解析版)
- 农药污染土壤的修复技术
- 2026届新疆乌鲁木齐市天山区中考数学对点突破模拟试卷含解析
- 装修工程施工安全管理措施
- 线材生产车间管理制度
- 2025秋沪科版(2024)数学八年级上册教学课件(安徽专用)14.1 全等三角形
- 公司技术部工作管理制度
- 审计岗位笔试试题及答案
- 2023年内蒙古高校毕业生“三支一扶”社区民生工作招募考试《综合能力测试》真题及答案
- 高危产妇专案管理制度
评论
0/150
提交评论