多表连接查询

2021-03-03  本文已影响0人  DOB_8199

含义

又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积:如果连接条件省略或无效则会出现

解决办法:添加上连接条件


分类

    按年代分类:

    sql92标准:仅仅支持内连接

    sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接


sql99语法

通过join关键字实现连接

        含义:1999年推出的sql语法

        支持:等值连接、非等值连接 (内连接),外连接,交叉连接

        语法:

            select 字段,...

            from 表1

            【inner|left outer|right outer|cross】join 表2 on  连接条件

            【inner|left outer|right outer|cross】join 表3 on  连接条件

            【where 筛选条件】

            【group by 分组字段】

            【having 分组后的筛选条件】

            【order by 排序的字段或表达式】

         好处:语句上,连接条件和筛选条件实现了分离,简洁明了!


sql92标准

1. 等值连接

    ① 多表等值连接的结果为多表的交集部分

    ②n表连接,至少需要n-1个连接条件

    ③ 多表的顺序没有要求

    ④一般需要为表起别名

    ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

技巧

为表起别名

    ①提高语句的简洁度

    ②区分多个重名的字段

注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定

2. 非等值连接

自连接

在表内寻找两次,第一次寻找目标的结果为第二次寻找目标的索引


sql 99标准

分类:

    内连接(★):inner

    外连接

        左外(★):left 【outer】

        右外(★):right 【outer】

        全外:full【outer】

    交叉连接:cross

1. 内连接

语法:

    select 查询列表

    from 表1 别名

    inner join 表2 别名

    on 连接条件;

分类:

等值,非等值,自连接

特点:

①添加排序、分组、筛选

②inner可以省略

③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读

④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集

(1)等值连接

(二)非等值连接

(三)自连接

2. 外连接

应用场景:

用于查询一个表中有,另一个表没有的记录

左外 右外

特点:

1、外连接的查询结果为主表中的所有记录

        如果从表中有和它匹配的,则显示匹配的值

        如果从表中没有和它匹配的,则显示null

        外连接查询结果=内连接结果+主表中有而从表没有的记录

2、左外连接,left join左边的是主表

      右外连接,right join右边的是主表

3、左外和右外交换两个表的顺序,可以实现同样的效果

4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的

扩展

3. 交叉连接

扩展

上一篇 下一篇

猜你喜欢

热点阅读