APP下载

数据库连接查询和优化策略

2019-09-10刘薇

新生代·下半月 2019年6期
关键词:学号姓名学生会

刘薇

【摘要】:随着大数据时代的来临,人们对于计算机技术的依赖程度越来越高,特别是建立在数据库基础上的各种查询技术为人们的工作和生活带来了方便和快捷。在查询技术中,多表连接查询的使用非常频繁,本文就常见的各种多表连接查询的特点进行分析总结、讨论优化策略。

【关键字】:计算机技术 数据库 多表连接查询

1引言

计算机数据库技术是一门实用性非常强的技术,随着我国信息化建设工程的逐渐开展,在多个领域中都有了较为广泛的应用,并逐渐的发挥出在信息化建设中的主导作用。在数据库技术中查询技术是最基本、最常用也是最复杂的技术之一,而多表连接查询也是所有数据库操作中最繁琐所占比重最大的。所以弄清楚多表连接查询的种类,以及在什么情况下使用哪种查询策略是需要研究的重要问题。

2 多表连接查询分类

在实际工作中,所查询的内容往往涉及多张表,连接查询是关系数据库中最主要的查询方式,在SQL Server中连接查询类型分为交叉连接、内连接、外连接和自连接。

2.1交叉连接

交叉连接也称非限制连接,它是将两个表不加任何约束地组合起来。也就是将第一个表的所有行分别与第二个表的每一行形成一条新的记录,交叉连接在实际应用中一般是没有意义的,但在数据库的数学模型上有重要作用。

2.2内连接

内连接也称自然连接,它是组合两个表的常用方法。连接条件通常采用“主键=外键”的形式,也就是说在两个表中匹配的记录才能在结果集中出现。

例如:有学生(学号、姓名、性别、专业),成绩(学号、课程号、分数)两个表,要查询选修了‘A001’课程的学生的姓名和专业。查询语句如下:

select 学生.学号,姓名,专业

from 学生 join 成绩 on 学生.学号=成绩.学号

where 课程号=‘A001’

2.3外连接

(1)在外连接中可以只限制一个表,而另一个表中的所有行都出现在结果集中。外连接分为左外连接、右外连接和全外连接。分别对左表、右表和左右两边的表不加限制。

例如:如果我们想查看所有的学生选修A001课程的成绩情况,就可以使用左外连接。查询语句如下:

select 姓名,专业,课程号,分数

from 学生 left join 成绩 on 学生.学号=成绩.学号

where课程号=‘A001’

以上问题也可以使用右外连接。查询语句如下:

select 姓名,专业,课程号,分数

from成绩 right join 学生on 成绩.学号=学生.学号

where课程号=‘A001’

这种情况下会以学生表为主,返回所有学生的信息,同时选修了A001课程的显示分数,没有选修A001课程的显示null

(2)全外连接结果集中除返回左表和右表内部连接的记录以外,还在查询结果中返回两个表中不符合条件的记录,并在左表或右表的相应列中填上null,bit类型以0值填充。

例如:有学生会(学号,姓名),人员分工(学号,职务)两个表,如果想查看学生会中的所有学生,哪些学生分配了职务,哪些学生还没有职务;学生会共设置了多少职务种类,哪些职务已经有人担任,哪些职务还有空缺,这时候就可以使用全外连接。查询语句如下:

select 学生会.学号,姓名,职务

from 学生会 full join 人员分工 on 学生会.学号=人员分工.学号

这种情况下会返回学生会中所有学生学号、姓名,同时也会返回人员分工表里面的所有职务,没有职务的学生,职务填充null,没有分配出去的职务,姓名填充null。

3 查询优化策略

连接的表越多,条件表达式越繁琐,查询的复杂度就越高,所消耗时间就越长。因此在进行查询时我们应当在能返回正确查询结果的前提下,尽可能的降低查询时间,提高查询效率。

3.1连表宜少不宜多

例如:有學生(学号、姓名、性别、专业),成绩(学号、课程号、分数),课程(课程号,课程名,学时数)三个表。查询选修‘A001’课程的学生学号、姓名和课程号。可以用以下两种方法实现:

方法一

select 学生.学号,姓名,课程.课程号

from 学生 join 成绩 on 学生.学号=成绩.学号

join 课程 on 成绩.课程号=课程.课程号

where 课程号=‘A001’

方法二

select 学生.学号,姓名,成绩.课程号

from 学生 join 成绩 on 学生.学号=成绩.学号

where 课程号=‘A001’

第一组语句连接三个表查询,第二组语句连接两个表查询。前者查询效率低,后者查询效率高。

3.2条件表达式宜简不宜繁

例如:要查询张玲、李萍、王晓宇三个学生的学号、姓名、出生时间、专业。可以用以下两种方法实现:

方法一

select 学号,姓名,出生时间,专业

from 学生

where 姓名=‘张玲’ or 姓名=‘李萍’or 姓名=‘王晓宇’

方法二

select 学号,姓名,出生时间,专业

from 学生

where 姓名in(‘张玲’,‘李萍’,‘王晓宇’)

第一组语句的where子句后有三个条件表达式,第二组语句的where子句后有一个条件表达式。前者查询效率低,后者查询效率高。

4 结束语

在数据库开发和维护过程中多表查询的优化设计对于提高大型数据库系统的性能具有现实意义。以上介绍的几种连接查询的适用场景,以及在优化查询时应当遵循的原则,仅供大家参考交流。

【参考文献】::

【1】邢文端; 简谈SQL SERVER 2000种的连接查询;读与写;2009年

【2】王珊 孟小峰;数据库系统导论;机械工业出版社;2010年

【3】冯玉才 陈红 文继荣;数据库和数据库管理系统;电子工业出版社;1995年

猜你喜欢

学号姓名学生会
学生会,是否真的很丑陋
学生会,是否真的很丑陋?
我们来打牌
尝试亲历的过程,感受探究的快乐
学联选举结果名单
试议高校学生会宗旨的意义及确立
小记者档案
我们班的学号奥妙多
一年级语文上册期末测试
与56号说再见