学生表数据

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 班级表数据

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 部门表数据

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

内连接 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

1. 交叉连接查询(基本不会使用-得到的是两个表的乘积) (这种查询时候会产生笛卡尔积)

多表查询会产生笛卡尔积:

假设集合a={b,c},集合b={0,1,2},则两个集合的笛卡尔积为{(b,0),(b,1),(b,2),(c,0),(c,1),(c,2)}

实际运行环境线下,应避免使用权笛卡尔积

解决方案:在where加入有效的条件-->等值连接(等值连接找的是列的值一样的数据,跟列名称和列类型无关

语法: 

  1.1  select * from A,B;

       1.2 select * from A cross join B;

  1.3 select * from A natural join B;(自然连接,底层先笛卡尔积,然后按照所有同名同值列自动进行等值筛选。)

2. 内连接查询(使用的关键字 inner join )
隐式内连接: select * from A,B where 条件;
显示内连接: select * from A inner join B on 条件;后面接 两张表中中需要关联的字段 (字段名称不需要一样 A.id = B.id )

      select * from A inner join B using 条件;using 后面接 两张表中都存在的字段 (字段名称 一样)

外连接 

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).

左连接LEFT JOIN的含义就是求两个表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录

右连接RIGHT JOIN就是求两个表的交集外加右表剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录

全连接,MySQL目前不支持此种方式。

union   操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。过滤重复,即重复的数据不显示。同时必须保证 两个表的列数要相同,列的类型要一致。

union all 用于将不同表中相同列中查询的数据展示出来;(包括重复数据)。同时必须保证 两个表的列数要相同,列的类型要一致。

内连接 交叉连接例子

 mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

内连接 隐式内连接 等值连接(等值连接找的是列的值一样的数据,跟列名称和列类型无关

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

  内连接 自然连接(自然连接,底层先笛卡尔积,然后按照所有同名同值列自动进行等值筛选。)

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

  内连接 显示内连接

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 

 

 

 

 

左外连接(先把dept表的did=3的列的值改为30,让学生表did=3的部门在部门表里不存在)右连接同理。

 左外连接的含义:两个表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 union 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。过滤重复,即重复的数据不显示。同时必须保证 两个表的列数要相同,列的类型要一致

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 

 mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 union all 用于将不同表中相同列中查询的数据展示出来;(包括重复数据)。同时必须保证 两个表的列数要相同,列的类型要一致。

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 

 mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

  group by分组函数 在mysql中没有强调select指定的字段必须属于group by后的条件。若符合条件的字段有多个,则只显示第一次出现的字段。

mysql 多表查询,内连接、外连接( left join、right join、full join)union与union all

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
  • 2021-12-26
  • 2021-12-26
  • 2021-12-29
  • 2021-05-19
猜你喜欢
  • 2021-06-15
  • 2021-05-16
  • 2021-11-19
  • 2021-05-02
  • 2021-09-17
  • 2021-08-11
相关资源
相似解决方案