6.连接查询

一、含义
当查询中涉及到了多个表的字段,需要使用多表连接
select 字段1,字段2
from 表1,表2,...;

笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
如何解决:添加有效的连接条件

二、分类

按年代分类:
   sql92:
	等值
	非等值
	自连接
	也支持一部分外连接(用于oracle、sqlserver,mysql不支持)
    sql99【推荐使用】
	内连接
		等值
		非等值
		自连接
	外连接
		左外
		右外
		全外(mysql不支持)
	交叉连接

三、SQL92语法
1、等值连接

语法:
	select 查询列表
	from 表1 别名,表2 别名
	where 表1.key=表2.key
	【and 筛选条件】
	【group by 分组字段】
	【having 分组后的筛选】
	【order by 排序字段】

特点:
	① 一般为表起别名
	②多表的顺序可以调换
	③n表连接至少需要n-1个连接条件
	④等值连接的结果是多表的交集部分

2、非等值连接

语法:
	select 查询列表
	from 表1 别名,表2 别名
	where 非等值的连接条件
	【and 筛选条件】
	【group by 分组字段】
	【having 分组后的筛选】
	【order by 排序字段】

3、自连接

语法:
	select 查询列表
	from 表 别名1,表 别名2
	where 等值的连接条件
	【and 筛选条件】
	【group by 分组字段】
	【having 分组后的筛选】
	【order by 排序字段】

四、SQL99语法
1、内连接

语法:
        select 查询列表
        from 表1 别名
        【inner】 join 表2 别名 on 连接条件
        where 筛选条件
        group by 分组列表
        having 分组后的筛选
        order by 排序列表
        limit 子句;
特点:
        ①表的顺序可以调换
        ②内连接的结果=多表的交集
        ③n表连接至少需要n-1个连接条件
分类:
        等值连接
        非等值连接
        自连接

2、外连接

语法:
        select 查询列表
        from 表1 别名
        left|right|full【outer】 join 表2 别名 on 连接条件
        where 筛选条件
        group by 分组列表
        having 分组后的筛选
        order by 排序列表
        limit 子句;
特点:
        ①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
        ②left join 左边的就是主表,right join 右边的就是主表
          full join 两边都是主表
        ③一般用于查询除了交集部分的剩余的不匹配的行

3、交叉连接

语法:
        select 查询列表
        from 表1 别名
        cross join 表2 别名;
特点:
        类似于笛卡尔乘积
posted @ 2023-12-09 12:51  CodeMagicianT  阅读(27)  评论(0编辑  收藏  举报