内连接中等值连接和自连接的区别
作者:互联网
1,内连接与外连接的定义
1,内连接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。
2,LEFT JOIN或LEFT OUTER JOIN【两者等价】
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2,等值连接和自连接
1,等值连接
- 不会去掉重复的列
- 在写where子句时,等值连接要写成表.字段名=表.字段名,并且要查询的字段如有相同的要写明是属于哪个表的字段
2,自然连接
- 是一种特殊的等值连接,他要求两个数据表进行比较的分量必须是相同的属性组,
- 结果集中会去掉重复的列,且在查询语句中,不允许出现 "tableName.fieldName"的字样
3,等值连接和自连接的应用:
1, 表rooms为房间信息表,数据如下
id | rent | tenant_id |
---|---|---|
121 | 1000 | 536 |
122 | 2000 | 537 |
123 | 3000 | null |
2,表tenants为租户表,数据如下
id | tenant_id |
---|---|
536 | 王麻子 |
537 | 张大爷 |
538 | 小六子 |
3,
自连接
select
tenant_id “租户id”,
id “房屋id”,
rent “租金”,
name “租户名字”
from
rooms natural join tenants
where
name = “小明”【表明自连接也可以用where子句】
等值连接
select
tenants.tenant_id “租户id”,
id “房屋id”,
rent “租金”,
name “租户名字”
from
rooms, tenants
where
rooms.tenant_id = tenants.tenant_id and name = “小明”
以上等值连接与下面的内连接查询等价
select
tenants.tenant_id “租户id”,
id “房屋id”,
rent “租金”,
name “租户名字”
from
rooms inner join tenants
on
a.id=b.parent_id
where
name = “小明”
三者的查询结果一致:
租户id | 房屋id | 租金 | 租户名字 |
---|---|---|---|
1 | 121 | 1000 | 小明 |
标签:等值,区别,租户,连接,tenants,id,name 来源: https://blog.csdn.net/yxg520s/article/details/121318722