DQL语句(六) -- 连接查询

本文详细介绍了SQL中的连接查询,包括笛卡尔乘积的概念及其解决办法,等值连接、非等值连接、自连接的不同用法,以及SQL99标准下的内连接、外连接和交叉连接的语法与特点。

一、含义

当查询中涉及到了多个表的字段,需要使用多表连接

select 字段1,字段2

from 表1,表2

 

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

如何解决:添加有效的连接条件

 

二、分类

  按年代分类:

    sql92

      等值连接

      非等值连接

      自连接

 

      也支持一部分外连接(用于 orcale、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 别名1.key = 别名2.key

  【and 筛选条件】

  【group by 分组字段】

  【having 分组后的筛选】

  【order by 排序字段】

 

四、SQL99 语法

1、内连接

  语法:

    select 查询列表

    from 表1 别名

    【inner】 join 表2 别名 on 连接条件

    where 筛选条件

    group by 分组列表

    having 分组后的筛选

    order by 排序列表

    limit 子句;

  inner 可以省略,写不写都代表是内连接

  特点:

    ①表的顺序可以调换

    ②内连接的结果 = 多表的交集

    ③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 别名;

 

  特点:

    类似于笛卡尔乘积

 

转载于:https://www.cnblogs.com/xifengbuqi/p/9213323.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值