数据库联表查询

联表查询分分为3类:

  1. 内连接
  2. 外连接
  3. 交叉连接

在查询多个表时,我们经常会用到“连接查询”;
连接是关系数据库的主要特点,也是它区别于其它类型数据库的一个标志;
连接一般是用作关联两张或两张以上的数据表时用的;

  • 概念: 根据两个表或多个表的列之间的关系,从这些表中查询数据

  • 目的: 实现多个表查询操作

  • 连接标准语法:

    FROM  join_table join_type join_table[ON (join_condition)];
    
    • 其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。join_type 指出连接类型。join_condition 指连接条件。

内连接

使用比较运算符(包括=><<>>=<=!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接和不等连接两种。

  • 仅将两个表中满足连接条件的行组合起来作为结果集。
  • 关键字: inner join

等值连接

  • 概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

    select * from T_student s,T_class c where s.classId = c.classId
        等于
    select * from T_student s inner join T_class c on s.classId = c.classId
    

不等连接

  • 概念:在连接条件中使用除等于号之外运算符(><<>>=<=!>!<)。

    select * from T_student s inner join T_class c on s.classId <> c.classId
    

自然连接

  • 它将表中具有相同名称的列自动进行记录匹配,自然连接不必指定任何同等连接条件。
  • 自然连接自动判断相同名称的列,而后形成匹配。
    缺点:虽然可以指定查询结果包括哪些列,但是不能人为地指定哪些列被匹配。另外,自然连接的一个特点是连接后的结果表中匹配的列只有一个。如上,在自然连接后的表中只有一列C。

外连接

外连接分为:

  • 左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN
  • 右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN
  • 全连接(FULL JOIN)或全外连接(FULL OUTER JOIN
    我们就简单的叫:左连接、右连接和全连接。

左连接

  • 概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值null

    select * from T_student s left join T_class c on s.classId = c.classId
    

    总结:左连接显示左表全部行,和右表与左表相同行。

右连接

  • 概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值null

    select * from T_student s right join T_class c on s.classId = c.classId
    

    总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。

全连接

  • 概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值null

    select * from T_student s full join T_class c on s.classId = c.classId
    

    总结:返回左表和右表中的所有行。
    !注意:mysql 暂时不支持全外连接。

交叉连接(笛卡尔积)

  • 概念:当多表关联时,如果没有写关联条件,返回的结果集是这几张表条目数的乘积,就叫做笛卡尔积

  • 多数情况下,笛卡尔积是无意义的,非常耗费资源,要尽量避免。

     select * from T_student, T_class
    

    总结:相当与笛卡尔积,左表和右表组合。

自连接

最后说一下自连接:
自连接是为了解决同类数据类型,但是又存在上下级关系的树状结构数据时使用。

  • 使用场景:当前表的一条记录可以对应当前表的多条记录。
    !自连接需要设置别名,否则无法查出正确结果集。
posted @ 2018-12-09 14:41  resahC  阅读(687)  评论(0编辑  收藏  举报