数据库内连接、左外连接、右外连接中的on、and、where条件使用

数据库各种连接方式的on、and、where条件使用

文章目录

    • 前言
      • 使用on条件,A为主表
      • 使用on条件,B为主表
      • 使用on、and主表条件
      • 使用on、where主表条件
      • 使用on、and条件,a.type<>1
      • 使用on、where条件,a.type<>1
      • 使用on、and从表条件
      • 使用on、where从表条件
      • 使用on、and从表条件,从表Bcard<>1111
      • 使用on、where条件,从表Bcard<>1111
      • inner内链接,使用on、and条件
      • inner内连接,使用on、where条件


前言

内连接:只保留满足on条件的数据,剔除不匹配的数据
左外连接:无论on中的条件满不满足,都保留左表所有数据
右外连接:无论on中条件满不满足,都保留右表的所有数据
全外连接:无论on中条件满不满足,都保留所有表的所有数据
表A
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第1张图片
表B
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第2张图片

使用on条件,A为主表

select a.*,b.* from a left join b on a.id=b.id;

注:关联多条,从表有重复数据,一般不去重,显示出A表全部数据,005关联两次
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第3张图片

使用on条件,B为主表

select a.*,b.* from b left join a on a.id=b.id;

注:显示出B表全部数据
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第4张图片

使用on、and主表条件

select a.*,b.* from a left join b on a.id=b.id and a.type=1;

注:以左表全匹配进行连接,之后用and筛选,不符合and条件的数据左表保留,右表为null,B表只显示001、002的数据
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第5张图片

使用on、where主表条件

select a.*,b.* from a left join b on a.id=b.id where a.type=1;

注:先走on条件,在过滤出type=1的数据,on关联时用,where结果集过滤时用
结果如下:
在这里插入图片描述

使用on、and条件,a.type<>1

select a.*,b.* from a left join b on a.id=b.id and a.type<>1;

注:a.type<>1,type字段不等于1,空值不参与运算,查询出A表全部,B表005存在两条,关联的A表type不等于1的数据
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第6张图片

使用on、where条件,a.type<>1

select a.*,b.* from a left join b on a.id=b.id where a.type<>1;

注:a.type<>1,type字段不等于1,空值不参与运算,type不为1,A表有003、005、005,因为005从表B有两条,所以005显示两条,共四条数据
结果如下:
在这里插入图片描述

使用on、and从表条件

select a.*,b.* from a left join b on a.id=b.id and b.card=1111;

注:从表B,005不关联,因为005的card不为1111,所以从表B只显示一条card等于1111的数据
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第7张图片

使用on、where从表条件

select a.*,b.* from a left join b on a.id=b.id where b.card=1111;

结果如下:
在这里插入图片描述

使用on、and从表条件,从表Bcard<>1111

select a.*,b.* from a left join b on a.id=b.id and b.card<>1111;

注:从表B005有两条,但因为005有一条card的值为空,不参与计算,所以005只有一条数据在右侧显示
结果如下:
数据库内连接、左外连接、右外连接中的on、and、where条件使用_第8张图片

使用on、where条件,从表Bcard<>1111

select a.*,b.* from a left join b on a.id=b.id where b.card<>1111;

结果如下:
在这里插入图片描述

inner内链接,使用on、and条件

select a.*,b.* from a inner join b on a.id=b.id and a.type=1;

注:inner返回共有的,join和inner join中的where和and的查询结果相同,都是取**链接后的结果**再进行筛选,链接后为7条数据,在筛选type=1的数据
结果如下:
在这里插入图片描述

inner内连接,使用on、where条件

select a.*,b.* from a inner join b on a.id=b.id where a.type=1;

结果如下:
在这里插入图片描述

右外连接和左外连接原理相同

你可能感兴趣的:(数据库,数据库)