首页
>
博客世界
>数据库连接查询简介

数据库连接查询简介

连接运算分为内连接和外连接。假设A表具有的数据为(M,N),B表具有的数据为(I,J),则无附加条件的笛卡尔积后的数据量为(M*I,N+J)。如下例。

img001

图 1-1 表A

img002

图 1-2 表B

img003

图 1-3 笛卡尔积结果

可以看到笛卡尔积的结果为(3*3,2+3),即9行5列结果。由此可以看出这种操作应是我们在日常操作中应当予以极力避免,因为一旦两个关系(表)的数量比较大时,此操作会产生大量数据。

庆幸的是我们一般不会直接使用笛卡尔积操作,而是比较多的使用内连接和外连接进行查询。下面介绍内连接操作:

img004

图 2-1 内连接

这里我们可以看到两个关系(表)以"stu_id"进行了等值连接操作。当然还有另外两种查询形式的结果与此等价。它们分别是自然连接和条件匹配查询。

img005

图 2-2 自然连接

img006

图 2-3 条件匹配

从图2-1,2-2,2-3的查询结果中可以看出,内连接和条件匹配的结果完全一致,而自然连接默认会将等值连接的列只保留一个,即去重。但这里需要注意的是,实际应用中我们会采用内连接或自然连接进行查询,很少使用条件匹配查询,因为其运行效率较低。

下面再对外连接进行介绍。外连接可分为左连接、右连接、全连接三种。

img007

图 3-1 左连接

img008

图 3-2 右连接

对比图3-1,3-2可以发现,左连接的结果即以左表中数据量为准,全量展示左表中的数据,若左表的数据未在右表中出现,则默认以NULL显示,反之右连接亦然。这在比对数据一致性时比较常用。

由于MySql不支持全连接操作,此处我们仅仅写出其可以在其它数据库如Oracle中可以运行的全连接查询语句形式“SELECT * FROM tmp_stu FULL JOIN tmp_grade ON tmp_stu.stu_id = tmp_grade.stu_id;”。当然我们可以通过左连接、右连接构造出等效的全连接。如下:

img009

图 3-3 全连接

除了上述常见的连接操作之外,这里我们再讲一种特殊的连接操作:自连接

img010

图 4-1 自连接

自连接是一种十分有用的操作,如图4-1,查询出所有组员的组长姓名,如果不使用自连接进行查询,则需要构造复杂的嵌套子查询进行操作。

这一讲我们对数据库中常见的连接操作进行了总结。连接操作是数据库中最为重要的查询形式,通常也是效率较高的查询。

评论

  • 访客
    2015-11-25 10:33

    谢谢博主的分享~~

    说说
  • 访客
    2015-11-25 17:23

    虽然是基础,但仍值得一看!

    说说
  • 访客
    2015-11-27 13:24

    喜欢,哈哈哈!!

    说说

雁过留痕