6.连接查询

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

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

二、分类

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

三、SQL92语法
1、等值连接

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

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

2、非等值连接

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

3、自连接

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

四、SQL99语法
1、内连接

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

2、外连接

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

3、交叉连接

语法:
        select 查询列表
        from1 别名
        cross join2 别名;
特点:
        类似于笛卡尔乘积
posted @   CodeMagicianT  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
点击右上角即可分享
微信分享提示