from关键字,和表链接的关键字 ,如inner join 或 left join 或 right join 都定义的是存在条件
SQL语句中表的层级: 右连接(内部从左至右级别递增) > 内连接(同级无差别) > 左连接(同级无差别)
存在条件使用规则:
1、非最高阶表的同级表之间是否存在相互不影响
2、除最高阶表外,其他表的数据存在的前提是,其高阶表数据必须存在
3、最高阶表的数据必须存在
比如where条件
数据存在需要满足的业务条件见表:以其自身和原点画矩形,矩形内的条件都是其需要满足的
数据不存在时会使用Null数据,但应该把Null数据也视为一条特殊的数据,故同样的与Null数据的组合,也只能出现一次
首先,先定义三种表
右外表 : right join 右边的表 如 A right join B ,B表就是右外表
左外表 :left join 左边的表 如 A left join B ,B表就是左外表
内表 : SELECT * from A inner join B , A 表与B表都是内表,即内表是 from 后面的第一个表,和inner join后面的表
其次:定义一下 from 条件
from 条件是这样一种条件 ,结果集需要拥有 from 规定的表里的数据,最高级别的右外表是必须的,又有低级别的右外表,出现在结果集中,则高级别的右外表必然存在
然后说右外表 、 内表 、左外表的特殊之处
右外表权限最大,对于结果集来说,内表和左外表的数据不是必须的,而具体的某张右外表的数据是否必须又需要特殊讨论
同级右外表 : 将同级右外表进行分级 , 最右边的右外表级别最高,最左边的右外表级别最低,对于结果集来说,级别最高的右外表是必需的,而对于其他级别的右外表而言,若当结果集中出现了某一层级的右外表数据,则其上一级的右外表数据必定存在,这是因为 右外表不仅有着不需要内表、左外表数据的特性,还有着 from 条件的特性
内表 权限中等, 对于内表来说,左外表类型的表的数据不是必须的,同级内表以及右外表的数据是必须的
左外表权限最低 , 对于左外表来说,所有类型的表的数据都是必须的,包括同级左内表、内表以及右外表
然后定义四种条件 :
where条件 : where 后的条件
右条件:right join on 后的条件
内条件 : inner join on 后的条件
左条件:left join on 后的条件
以下从结果集的角度阐述各表数据需要遵守的条件
对于最高级别右外表数据,需要遵守的条件仅有 where后的条件
对于非最高级别右外表数据,需要遵守上级右外表的条件,以及where后的条件
对于内表数据,需要遵守where条件、所有右外表条件 、以及 所有 inner join on 后的条件
对于左外表数据,需要遵守where条件、所有右外表条件 、所有 inner join on 后的条件、以及自身left join on 后的条件
现在从两个角度解释右连接、内连接和左连接
假设: 每个表有一条特殊数据,这条数据不存在任何有效内容,即所有数据都为null , 而其也不用遵守任何既定条件,即使是where 条件也无法对其进行约束,该条数据被称为 NULL数据
假设 n 表联查,现在取这n个表的笛卡尔积,,然后对这些数据进行筛选
数据层级 最右右外表 > 次右右外表 > … >最左右外表 > 内表 > 左外表
1、结果集中低层级数据存在,而高层数据不存在的数据,被剔除 ,准确的说是,按照层级链组织数据时,某一层级组织了NULL数据,而较低层级未组织NULL数据,该数据不合法,被剔除
2、对于结果数据中的右外表数据,存在不满足where条件,或不满足高层级右外表条件的数据,被剔除
3、对于结果数据中的内表数据,存在不满足where条件,或不满足右外表条件的数据,或不满足所有内表条件的,被剔除
4、对于结果数据中的左外表数据,存在不满足where条件,或不满足右外表条件的数据,或不满足所有内表条件的,或不满足自身左外条件的,被剔除
各种表需要满足的条件如下
1、在结果中 必须若低级别表的数据存在,则高级别表的数据必须存在
2、若相应表数据存在,则其必须满足相应的级别条件
各级别需要满足的条件如下