七、关联查询和联合查询

 
上图展示了所有的关联可视化的结果。
 
关联的作用:从两张或者多张表中取出有关联的数据
 
关联查询一共有如下几种:
  • 内连接:INNER JOIN, CROSS JOIN
  • 外连接:左连接(LEFT JOIN)  右连接(RIGHT JOIN)  全连接(FULL OUTER JOIN)
  • 自连接:当table1,table2本质上是同一张表,只是用取别名的方式虚拟成两张表代表不同的意义
 
 
说明
  • 连接n个表,至少需要n-1个连接条件
  • 当两个关联查询的表如果有字段名字相同,并且查询中涉及该关联字段,那么需要使用表名前缀加以区分
  • 如果表名比较长时,可以给表取别名,简化SQL语句
 
 
三个关联条件
  • WHERE:适用于所有的关联查询
        
 
  • ON:只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但是分开写可读性更好
        
 
  • USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等。
        
 
--------------------------------------------------------------------------------
 
内连接 INNER JOIN
 
分类
  • 显式
        SELECT  字段名  FROM 表1  INNER JOIN 表2 ON [关联条件] WHERE [其他筛选条件];  
 
  • 隐式
        SELECT  字段名  FROM 表1,表2 where [筛选条件]
        #  这种隐式的连接,由于缺少了on做表的联系,所以需要把on 的条件写进where中
  • 交叉连接
        SELECT 字段名 FROM 表1 CROSS JOIN 表2 ON [关联条件]  WHERE [其他筛选条件];
        这种交叉连接等价于上面的隐式连接,都会返回两个表的笛卡尔积
    
代码实例
 
 
--------------------------------------------------------------------------------
 
外连接之左连接 LEFT JOIN
 
第一种情况:
    返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表的列值为NULL
    
 
第二种情况:
        返回左表中行在右表中没有匹配行的记录
 
    
-----------------------------------------------------------------------------------------------------------------
 
外连接之右连接 RIGHT JOIN
        右连接和左连接相似,这里不再赘述
   
    ------------------------------------------------------------------------------------------------------------------------------------------
 
外连接之全连接 FULL OUTER JOIN
 
注意:
    由于mysql不支持FULL JOIN,但是可以用 left join union right join代替,也就是左连接 联合查询 右连接
    
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-10-22 21:25  别把最疼爱的人弄丢了  阅读(393)  评论(0编辑  收藏  举报