关于SQL四种连接以及自连接和多表连接

union关键字:可以将多个结果集合并成一个结果集,使用方法:(结果集a的sql语句) union (结果集b的sql语句)
 
内联接:把a,b两表都有的数据放入一个表内,同一节列a表有这条记录而b表没有,则连接的表中没有这条数据的记录。
外连接:
左连接:a,b两表相连接为c,a为左表,b为右表。c中显示左表a中的所有的列,而对应的b表在c表中没有匹配值的数据则显示为null.
右连接:则b表中所有的列在c表中都有显示,对应的a表在c表中没有匹配值的列的数据显示为null.
 
 
 
 
内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。     
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
  • 等值连接和自然连接
       等值连接中不要求相等属性值的属性名相          同,而自然连接要求相等属性值的属性名          必须相同,即两关系只有在同名属性才能          进行自然连接。
外连接:外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。
外联接可以是左向外联接、右向外联接或完整外部联接。     
  • left join 左边为左表
  • right join 右边为右表
左外连接 : 左联接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
右外连接 : 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
完全外连接 (左右外连接相结合): 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接 : 返回笛卡尔积
 
两个表:
A(id,name)
数据:(1,张三)(2,李四)(3,王五)
B(id,name)
数据:(1,学生)(2,老师)(4,校长)
左连接结果:
select A.*,B.* from A left join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
3 王五 NULL NULL
右链接结果:
select A.*,B.* from A right join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
NULL NULL 4 校长
example:下面这种情况就会用到外连接
比如有两个表一个是用户表,一个是交易记录表,如果我要查询每个用户的交易记录就要用到左外外连接,因为不是每个用户都有交易记录。
用到左外连接后,有交易记录的信息就会显示,没有的就显示NULL,就像上面我举得例子一样。
如果不用外连接的话,比如【王五】没有交易记录的话,那么用户表里的【王五】的信息就不会显示,就失去了查询所有用户交易记录的意义了。
自联接
简单多表查询
 
 
posted @ 2019-09-27 16:30  gaoyang'Blog  阅读(490)  评论(0编辑  收藏  举报