过年做那些网站致富,网站关键词优化排名软件系统,俄文视频网站开发,养老网站建设的意义内连接、外连接、交叉连接、笛卡尔积
内连接(inner join):取得两张表中满足存在连接匹配关系的记录。外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录#xff0c;还包括某张表(或两张表)中不满足 匹配关系的记录。交叉连接(cross join):显示两张表所有记录一…内连接、外连接、交叉连接、笛卡尔积
内连接(inner join):取得两张表中满足存在连接匹配关系的记录。外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录还包括某张表(或两张表)中不满足 匹配关系的记录。交叉连接(cross join):显示两张表所有记录一一对应没有匹配关系进行筛选它是笛卡尔积在 SQL 中的实 现 如 果 A 表 有 m 行 B 表 有 n 行 那 么 A 和 B 交 叉 连 接 的 结 果 就 有 m * n 行。笛卡尔积:是数学中的一个概念例如集合 A{a,b}集合 B{0,1,2}那么 A B {a,o,a,1,a,2, b,0,b,1,b,2,} 。
外连接常用的有左连接、右连接:
left join 在两张表进行连接查询时会返回左表所有的行即使在右表中没有匹配的记录。right join 在两张表进行连接查询时会返回右表所有的行即使在左表中没有匹配的记录。
join的实现
join的实现其实是先从一个表中找出所有行或者根据where子句查出符号条件的行)然后去下一个表中循环寻找匹配的行依次下去直到找到所有匹配的行使用join不会去创建临时表使用in的话会创建临时表销毁临时表
平时多做练习
知其然知其所以然并且要学以至用。 不仅仅知道概念还需要动手写sql,一般都是简单的连接查询具体关于连接查询的sql练习参见以下链接
牛客https://www.nowcoder.com/exam/oj?tabSQL%E7%AF%87topicId82leetcodehttps://leetcode.cn/problemset/database
小试一下
题目组合两个表
表: Person
±------------±-------- | 列名 | 类型 | ±------------±-------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ±------------±-------- personId 是该表的主键具有唯一值的列。 该表包含一些人的 ID 和他们的姓和名的信息。
表: Address
±------------±-------- | 列名 | 类型 | ±------------±-------- | AddressId | int | | PersonId | int | | City | varchar | | State | varchar | ±------------±-------- addressId 是该表的主键具有唯一值的列。 该表的每一行都包含一个 ID PersonId 的人的城市和州的信息。
编写解决方案报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中则报告为 null 。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Person表: ±---------±---------±---------- | personId | lastName | firstName | ±---------±---------±---------- | 1 | Wang | Allen | | 2 | Alice | Bob | ±---------±---------±---------- Address表: ±----------±---------±--------------±----------- | addressId | personId | city | state | ±----------±---------±--------------±----------- | 1 | 2 | New York City | New York | | 2 | 3 | Leetcode | California | ±----------±---------±--------------±----------- 输出: ±----------±---------±--------------±--------- | firstName | lastName | city | state | ±----------±---------±--------------±--------- | Allen | Wang | Null | Null | | Bob | Alice | New York City | New York | ±----------±---------±--------------±--------- 解释: 地址表中没有 personId 1 的地址所以它们的城市和州返回 null。 addressId 1 包含了 personId 2 的地址信息。
思路 因为表 Address 中的 personId 是表 Person 的外关键字所以我们可以连接这两个表来获取一个人的地址信息。 考虑到可能不是每个人都有地址信息我们应该使用 outer join 而不是默认的 inner join。
sql
# Write your MySQL query statement belowselect p.FirstName, p.LastName, a.City, a.State from Person as p left join Address as a on p.PersonId a.PersonId