多表连接查询
多表连接查询实际上是通过各个表之间的公共字段的关联性来查询数据的,他是关系数据库查询的最主要的特征。
常用的连接有:内连接、外连接、交叉连接
内连接:两种常用的连接查询之一。他是使用比较运算符对表间公共字段的数据进行比较操作,并得出表中与连接条件相匹配的数据行,组成新的结果集,在内连接查询中,只有满足条件的记录才能出现在结果集中
外连接:两种常用的连接查询之一,他是使用比较运算符对表间公共字段的数进行比较操作,来得到新的结果集。但是与内连接相比,其结果几种不仅包含符合连接条件的行,而且还包括左表(左连接行),右表(右连接行)或两个连接表(全外连接)中的所有数据行
交叉连接(笛卡尔乘积连接):没有WHERE子句,他返回连接表中所有数据行的笛卡尔积由于交叉连接是连接查询的基础所以我们将首先介绍交叉连接。
交叉连接
交叉连接是将多张表中的数据行一一对应连接在一起,形成结果集的数据行数相当于多张表数据行数“相乘”后的结果。这种情况在数据库连接查询中,被称为交叉连接(也叫笛卡尔乘积连接)。
在数据库中创建连接查询非常简单,只需要指明连接的表以及他们之间的关系
示例
select A.*,B.* FROM T_A AS A. T_B AS B
内连接
内连接种类分三种:等值连接,自然连接,不等连接
等值连接返回的结果是两个表中所有相匹配的数据,舍弃不匹配的数据
语法
select.. from 表1[INNER] join 表二 on <表达式>
示例
select s.studenrName,s.AGE, c.className
from studentInfo as s
inner join classInfo as c on s.classid=c.classid
外连接
内连接的特点是:当至少一个同属于两表的行符合连接条件时,内连接才会返回行。内连接可以消除与零一张表中不匹配的信息。现在那我们将介绍连接查询中的外连接。外连接的特点是:当对多张表进行外表连接查询时,结果集将返回FROM子句中提到的至少一个表的所有行,只要这些行符合WHERE或者HAVING子句中的搜索条件,简单来说,内连接的两个表是同等的匹配地位,而在外连接中两个表有主从之分
左外连接
左外连接的结果包括Left join子句中指定坐标的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果中右表的所有选择列均为空值
语法:
select ...from 表一 LEFT [outer] join 表二 on <表达式>
示例
SELECT T_A,T_B FROM T_A LEFT JOIN T_B ON T_A.A1=T_B.A1;
右外连接
右外连接是左外连接的反向连接,将返回游标的所有行,如果游标的某行在左表中没有匹配行,则将坐标返回空值,
语法:
select ...from 表1 right [outer] join 表二 on <表达式>
示例
select S.studentName,E.Exam,E.SubjectId from Exam as E Right join StudentInfo as S
ON S.id=E.StudentID;
全外连接
全外连接又被称为完整外连接,他除了匹配行之外,还包括Join关键字左右表中不匹配的数据行。其中,坐标或者右表缺少的属性值用NULL 表示
但是 MySQL中不支持全外连接。