连接运算分为内连接和外连接。假设A表具有的数据为(M,N),B表具有的数据为(I,J),则无附加条件的笛卡尔积后的数据量为(M*I,N+J)。如下例。
可以看到笛卡尔积的结果为(3*3,2+3),即9行5列结果。由此可以看出这种操作应是我们在日常操作中应当予以极力避免,因为一旦两个关系(表)的数量比较大时,此操作会产生大量数据。
庆幸的是我们一般不会直接使用笛卡尔积操作,而是比较多的使用内连接和外连接进行查询。下面介绍内连接操作:
这里我们可以看到两个关系(表)以"stu_id"进行了等值连接操作。当然还有另外两种查询形式的结果与此等价。它们分别是自然连接和条件匹配查询。
从图2-1,2-2,2-3的查询结果中可以看出,内连接和条件匹配的结果完全一致,而自然连接默认会将等值连接的列只保留一个,即去重。但这里需要注意的是,实际应用中我们会采用内连接或自然连接进行查询,很少使用条件匹配查询,因为其运行效率较低。
下面再对外连接进行介绍。外连接可分为左连接、右连接、全连接三种。
对比图3-1,3-2可以发现,左连接的结果即以左表中数据量为准,全量展示左表中的数据,若左表的数据未在右表中出现,则默认以NULL显示,反之右连接亦然。这在比对数据一致性时比较常用。
由于MySql不支持全连接操作,此处我们仅仅写出其可以在其它数据库如Oracle中可以运行的全连接查询语句形式“SELECT * FROM tmp_stu FULL JOIN tmp_grade ON tmp_stu.stu_id = tmp_grade.stu_id;”。当然我们可以通过左连接、右连接构造出等效的全连接。如下:
除了上述常见的连接操作之外,这里我们再讲一种特殊的连接操作:自连接
自连接是一种十分有用的操作,如图4-1,查询出所有组员的组长姓名,如果不使用自连接进行查询,则需要构造复杂的嵌套子查询进行操作。
这一讲我们对数据库中常见的连接操作进行了总结。连接操作是数据库中最为重要的查询形式,通常也是效率较高的查询。
评论
2015年11月25日
admin
1206
1206