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

一、含义

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

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

 

  特点:

    类似于笛卡尔乘积

 

posted @ 2018-06-22 14:37  昱晟  阅读(142)  评论(0编辑  收藏  举报