mysql的内外连接_MYSQL 内外连接 - join

58e8d81c4a0d115f2a9f9f245fa77d87.png

join语句的基本使用SQL(MySQL) JOIN 用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。JOIN 通常与 ON 关键字搭配使用,基本语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionat...

假设student表有如下记录: +--------+----------+---------+-----------+| stu_id | stu_name | stu_tel | stu_score |+--------+----------+---------+-----------+| 1 | a | 151 | 60 || 2 | b | 152 | 61 || 3 | c | 153 | 62 |+--------+----------+---

假设student表有如下记录:

+--------+----------+---------+-----------+

| stu_id | stu_name | stu_tel | stu_score |

+--------+----------+---------+-----------+

| 1 | a | 151 | 60 |

| 2 | b | 152 | 61 |

| 3 | c | 153 | 62 |

+--------+----------+---------+-----------+

teacher表有如下记录:

+--------+----------+---------+---------+--------+

| tea_id | tea_name | tea_tel | tea_pay | stu_id |

+--------+----------+---------+---------+--------+

| 1 | A | 130 | 3000 | 1 |

| 2 | B | 131 | 4000 | 2 |

| 3 | C | 132 | 4000 | 0 |

+--------+----------+---------+---------+--------+

连接可分为以下几类:

内连接。

内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行,也可以使用显示内连接:inner join ,没有包含一个连接条件时,;结果就是一个笛卡尔积。

mysql> select * from student inner join teacher;(类似于select * from student,teacher;)

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 | 1 |

| 2 | b | 152 | 61 | 1 | A | 130 | 3000 | 1 |

| 3 | c | 153 | 62 | 1 | A | 130 | 3000 | 1 |

| 1 | a | 151 | 60 | 2 | B | 131 | 4000 | 2 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 | 2 |

| 3 | c | 153 | 62 | 2 | B | 131 | 4000 | 2 |

| 1 | a | 151 | 60 | 3 | C | 132 | 4000 | 0 |

| 2 | b | 152 | 61 | 3 | C | 132 | 4000 | 0 |

| 3 | c | 153 | 62 | 3 | C | 132 | 4000 | 0 |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

外连接。外连接可以是左向外连接、右向外连接。

在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:

左向外连接:left join 或者left outer join

左向外连接的结果集包括left join子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

mysql> select * from student left join teacher on student.stu_id=teacher.stu_id;

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 | 1 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 | 2 |

| 3 | c | 153 | 62 | NULL | NULL | NULL | NULL | NULL |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

右向外连接:right join 或 right outer join 。

右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

mysql> select * from student right join teacher on student.stu_id=teacher.stu_id;

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 | 1 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 | 2 |

| NULL | NULL | NULL | NULL | 3 | C | 132 | 4000 | 0 |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

自然连接

在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。mysql> select * from student natural join teacher;

+--------+----------+---------+-----------+--------+----------+---------+---------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |

+--------+----------+---------+-----------+--------+----------+---------+---------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 |

+--------+----------+---------+-----------+--------+----------+---------+---------+

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。如果没有包含一个连接条件,交叉连接的结果就是一个笛卡尔积。 mysql> select * from student cross join teacher;

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 | 1 |

| 2 | b | 152 | 61 | 1 | A | 130 | 3000 | 1 |

| 3 | c | 153 | 62 | 1 | A | 130 | 3000 | 1 |

| 1 | a | 151 | 60 | 2 | B | 131 | 4000 | 2 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 | 2 |

| 3 | c | 153 | 62 | 2 | B | 131 | 4000 | 2 |

| 1 | a | 151 | 60 | 3 | C | 132 | 4000 | 0 |

| 2 | b | 152 | 61 | 3 | C | 132 | 4000 | 0 |

| 3 | c | 153 | 62 | 3 | C | 132 | 4000 | 0 |

+--------+----------+---------+-----------+--------+----------+---------+---------+--------+

如果要连接的列的名字相同,并且连接条件就是两者相等,那么也可以使用using,只需把on语句用using替换即可;

mysql> select * from student inner join teacher using(stu_id);

+--------+----------+---------+-----------+--------+----------+---------+---------+

| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |

+--------+----------+---------+-----------+--------+----------+---------+---------+

| 1 | a | 151 | 60 | 1 | A | 130 | 3000 |

| 2 | b | 152 | 61 | 2 | B | 131 | 4000 |

+--------+----------+---------+-----------+--------+----------+---------+---------+

join语句的基本使用SQL(MySQL) JOIN 用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。JOIN 通常与 ON 关键字搭配使用,基本语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionat...

bitsCN.com

mysql的join优化 1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN table2 SELE

inner join(等值连接):只返回两个表中联结字段相等的行。left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录。right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录。

...前一贯的写作风格,以简单易懂的示例帮助大家了解各种join的区别。 为什么需要join  为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来。在处理数据库表的时候,我们经常会...

这篇文章主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下 join的类型1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。2. 外联结:分为...

这篇文章主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下 join的类型1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。2. 外联结:分为...

Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接、外联接和交叉联接等1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接、外联接和交叉联...

关于Mysql 中 inner join , left join , right join的区别 ,他们分别应用在什么情景呢? 现在我们 有2个表 一个是 person 表 一个是 Orders表 结构如下: person表 Id_P LastName FirstName Address City

本文主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下,希望能帮助到大家。 join的类型1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。2. 外联结:分为外...

一.Join语法概述join 用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionatable1:左表;table2:右表。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值