sql92语法
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有m行,表2 有n行,结果是m*n行 分类: 按年代分类 sql92标准:仅支持内连接 sql99标准【推荐】:支持内连接+外连接(除全外连接)+交叉连接 按功能分类 内连接: 等值连接 非等值连接 自连接 外连接: 左外连接 右外连接 全外连接 交叉连接 #sql92标准 #一、等值连接 #1、 a)多表等值连接的结果为多表的交集部分 b)n表连接,至少需要n-1个连接条件 c)多表的顺序没有要求 d)一般需要为表起别名 e)可以搭配前面介绍的所有子句使用,比如排序、分组、筛选 WHERE #2、为表起别名 1)提高语句的简洁度 2)区分多个重名的字段 注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定 #3、两个表的顺序可以调换 #4、可以加筛选 and #5、可以加分组查询 #6、可以加排序 #7、可以实现三表连接 #二、非等值连接 #三、自连接
sql99语法
语法: select 查询列表 from 表1 别名 【连接类型】 join 表2 别名 on 连接条件 【where 筛选条件】 【group by 分组】 【having 筛选条件】 【order by 排序列表】 分类: 内连接:inner 外连接: 左外:left【outer】 右外:right【outer】 全外:full【outer】 交叉连接: cross #一>内连接 语法: select 查询列表 from 表1 别名 inner join 表2 别名 on 连接条件; 分类: 等值 非等值 自连接 等值连接和自连接的区别: 1)等值连接必须要有等值的条件,两个关系可以没有相同的属性列(值一样就可以) 2)自然连接必须要有相同的属性列(名字和值都要一样)才能进行,且等值连接之后要去除相同的属性列 特点: a)可以添加排序、分组、筛选 b)inner可以省略 c)筛选条件放在 where 后面,连接条件放在 on 后面,提高分离性,便于阅读 d)inner join 连接和sql92语法中的等值连接效果是一样的 #二>外连接 应用场景:用于查询一个表中有,另一个表中没有的记录 特点: 1)外连接的查询结果为主表中的所有记录 如果从表中有和它匹配的,则显示匹配的值 如果从表中没有和它匹配的,则显示null 外连接查询结果 = 内连接结果 + 主表中有而从表中没有的记录 2)左外连接, left join左边的是主表 右外连接, right join右边的是主表 3)左外和右外交换两个表的顺序,可以实现同样的效果 4)全外连接 = 内连接 + 表1中有但表2中没有的 + 表2中有但表1中没有的 #三>交叉连接(笛卡尔乘积) #sql92 sql99 功能: sql99 支持的较多 可读性: sql99 实现连接条件和筛选条件的分离,可读性较高