SQL多表查询应用探讨

时间:2022-09-16 12:50:24

SQL多表查询应用探讨

摘要: 数据库检索速度的快慢一直是数据库开发和应用人员关注的焦点,影响它的一个重要因素就是sql查询语句效率的高低,而在SQL查询语句中多表查询的使用频率非常高,最能体现查询的复杂性,也是SQL查询语句的重点与难点。

关键词: SQL;多表查询;联接查询;子查询

中图分类号:TP39文献标识码:A文章编号:1006-4311(2012)16-0169-01

0引言

查询是数据库中最基本、最常用的操作,包括简单查询、联接查询、嵌套查询。简单查询普遍应用,此处暂不多讲;多表联接查询是查询中应用较广、较为复杂的操作,其运算规则是将所联接的多个表中所有的元组进行笛卡儿积,即表中元组个数相乘,再从中找出符合条件的,这样就大大地增加了运算的负担,往往要耗费大量的CPU时间和内存,为了提高查询速度、提高数据库应用系统的执行效率,我们在编写查询语句时应尽量避免联接查询,如果必须要使用联接查询时也要尽量使用较少的联接表。

1SQL查询的原则

先给定三个关系模式:(以下实例均以此为例)

学生表(学号,姓名…)Student(sno,sname…)

课程表(课程号,课程名称,教师姓名)Course(cno,cname,tname)

成绩表(学号,课程号,成绩)Score(sno,cno,score)

1.1 尽量使用单表查询

例1、查询李丽老师所教的课程号、课程名称。

分析:在此查询中涉及到的课程号、课程名称、教师姓名三个字段虽然可以在Course和Score表中找到,但在Course表中就可以全部找到,按照尽量使用单表操作原则, SQL语句应为:

SELECT cno,cname FROM Course WHERE tname=''李丽''

1.2 必须多表查询时要做到以下几个原则:

1.2.省略o = o)AND(cname = ''SQL数据库应用'')

1.2.2 联接表时在“联少不联多”的基础上要能实现联接在做多表联接查询时,使联接的表的个数尽量少,但是不能一味地追求表的个数,如果表的使用不能达到我们要查询的数据,或者不能实现联接,那也是不成功的。

例3:查询选修了“SQL数据库应用”课程的学生的学号、姓名。

分析:此查询中涉及到学号、姓名和课程名称三个字段,分别在Student和Course表中,但是Student和Course表没有公共属性,不能实现联接,所以必须借助Score表,此查询就变成了Student、Course和Score三表的联接。SQL语句应为:

SELECT sno,sname FROM Student,Course,Score WHERE (Student.sno= Score.省略o = o) and (cname=‘SQL数据库应用’)

1.2.3 先筛选后联接当查询多个数据表时,要先过滤后联接。

例4:查询所有成绩大于70分的学生的信息

分析:此查询要做Student,Score两表联接,并筛选出符合条件的记录。SQL语句可为:

SELECT * FROM Student,Score WHERE Student.sno= Score.sno and score>70

此查询语句首先将两个数据表按照学号进行联接,然后再将符合条件的记录筛选。若SQL语句改为:

SELECT * FROM Student,Score WHERE score>70 and Student.sno=Score. sno

则首先筛选出符合条件的记录,减少了进行联接的记录个数,然后再执行联接查询,大大提高了查询效率。

1.3 选择合适、高效的查询语句

1.3.1 WHERE条件联接查询在WHERE子句中使用多个联接条件的查询称为条件联接查询,这种方法容易想到,但查询速度要慢些,上述实例均用此方法。

1.3.2 JOIN…ON…联接查询常用的是内部联接,联接的结果是从两个或两个以上的表的组合中挑选出符合联接条件的数据,如果数据无法满足联接条件则将其丢弃,与用在WHERE子句中指定联接条件相比,使用INNER JOIN的查询速度要快些,推荐使用后者(其它联接方法此处暂不讲)。

联接查询内部联接(Inner Join)外部联接(Outer Join)交叉联接(Cross Join)左外部联接(Left Outer Join)右外部联接(Right Outer Join)完全外联接(Full Outer Join)

例5:上述例3改为INNER JOIN内联接查询。

SQL语句应为:

SELECT S.sno,S.sname FROM Student as S INNER JOIN Score AS Sc

ON S.sno= Sc.省略o=C.省略ame=‘SQL数据库应用’)

1.3.3 嵌套查询在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询称为嵌套查询,又称子查询,SQL SERVER执行时,先执行子查询部分,求出子查询部分的值,然后再执行父查询,执行效率高,因此推荐采用子查询。

2结束语

在数据库的开发和维护过程中,多表查询的优化设计可以大大地提高系统性能,对于数据量大的数据库系统尤为重要。因此编写SQL查询语句时要认真思考、反复切磋,抓住问题的关键,编写出既正确又简练的语句,尽可能提高查询执行的效率,达到事半功倍的效果!

参考文献:

[1]顾兵主编.SQL Server数据库技术与应用.北京:清华大学出版社,2010.2.

[2]何文华主编.SQL Server数据库案例教程.北京:电子工业出版社.2008.10.

[3]曾长军主编.SQL Server数据库原理与应用教程.北京.人民邮电出版.2009.10.

上一篇:牡丹江医学院精品课程网站的设计与开发 下一篇:论财务管理和内部控制对企业发展的作用