【每日一练】你了解数据库的内连接和外连接吗
emmmm....内连接就是内部连接,外连接不就是外部连接。不知道你是不是也这样想的呢?
哈哈哈~似乎很有道理啊。不过言归正传,这里举一个例子来介绍一下,看起来更容易理解。首先建立三个表:
表a
表b
表c
数据库的内连接
1、等值连接:在连接条件中使用等号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、自然连接:在连接条件中使用等号(=)运算符比较被连接列的列值,但它会删除连接表中的重复数据列。
特别注意一下:
①注意自然连接的时候,必须有相同名称的属性类,查询的结果会去除相同的属性列,如上图的查询结果。
②如果两个这个两个属性列的类型不同,则查询的结果会保存为前面那个表的属性的类型。例如现在把a表的userid改成int类型的,b表的userid是varchar类型的。
则查询结果如下所示:
③我试了一下,当自然连接的两个表没有共同的属性时会产生如下的结果。如下所示:
不等值连接只是改变查询条件,不做重点介绍
数据库的外连接
外连接分:左外连接、右外连接、全外连接
1、左外连接(LEFT JOIN或LEFT OUTER JOIN )
左外连接的结果包括 LEFT OUTER子句中指定的左表的所有行。如果左表的某行在右表中没有匹配行,则在相关联的结果中右表对应行为空值。
2、右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN )
右外连接是左外连接的反向连接。查询结果与左外连接正好相反。
3、全外连接(FULL JOIN 或 FULL OUTER JOIN)
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。但是MySQL目前应该不支持此种方式,我在测试的时候出现下面的情况。如果去掉on条件语句的话,是有查询结果的。
交叉连接
交叉连接又称笛卡尔连接(cartesian join)。如果表a和表b是两个集合的话,交叉连接即返回这两个集合的笛卡尔积。
最后附上一张网上找到的图,感觉对这些语句的解释很到位,同学们可以借鉴一下。
最后说一点,本文使用的数据库为 MySQL 5.6