济南企业网站设计公司,wordpress响应式图片功能,建网站所需材料,学校网站建设制作方案#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克#x1f379; ✨博客主页#xff1a;小小恶斯法克的博客 #x1f388;该系列文章专栏#xff1a;力扣刷题讲解-MySQL #x1f379;文章作者技术和水平很有限#xff0c;如果文中出… 欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克 ✨博客主页小小恶斯法克的博客 该系列文章专栏力扣刷题讲解-MySQL 文章作者技术和水平很有限如果文中出现错误希望大家能指正 感谢大家的关注 ❤️
目录
组合两个表 总结关于on 超过经理收入的员工 组合两个表 表: 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 的地址信息。 思路 1.观察到问题中有一个关键如果 personId 的地址不在 Address 表中则报告为 null 。 2.很显然通过这句话无论 person 是否有地址信息都要返回信息那么返回null其实就是因为没有对应的城市和州 3.既然都要返回人的PersonId FirstName, LastName要左表的全部信息所以使用左查询 4.让person作左表Address 作右表 5.我们分析出这一步还不算完成我们还要知道左外连接on的具体知识请看下面 6..很明显在person表中personId是它的主键Address表中addressId对应了personId 7..那么我们的on后面的条件肯定是从personld这个字段来建立关系关系就是p.PersonId a.PersonId由此可以返回出address表中的数据 8.select * from Person as p left join Address as a on 条件 9.把*优化一下 10.代码如下 select FirstName, LastName, City, State
from Person as p
left join Address as a
on p.PersonId a.PersonId
执行 注意如果没有某个人的地址信息使用 where 子句过滤记录将失败因为它不会显示姓名信息。 总结关于on 在 MySQL 中多表查询中的左外连接LEFT JOIN是一种用于连接两个表的查询操作它会返回左表中的所有记录以及符合连接条件的右表记录。在左外连接中ON 后面连接的条件具体是指定两个表之间的连接条件它决定了在连接时哪些行应该被匹配。 具体来说ON 后面的条件通常是用来指定连接两个表的列之间的关联关系。这些条件可以是等值比较例如table1.column1 table2.column2也可以是其他类型的比较操作例如大于、小于、包含等。这些条件决定了在连接时哪些行应该被匹配起来。 ON 的作用是在进行表连接时指定连接条件它告诉数据库引擎在进行左外连接时应该如何匹配两个表的行。通过指定连接条件可以确保在连接时只有符合条件的行会被匹配起来从而实现多表查询的目的。 举个例子假设我们有两个表 A 和 B我们想要以 A 表的所有记录为基础同时将符合某些条件的 B 表记录连接起来。在这种情况下我们可以使用左外连接来实现这一目的。ON 后面的条件将决定 A 表和 B 表之间的连接条件只有满足条件的记录才会被连接起来。 超过经理收入的员工 表Employee ----------------------
| Column Name | Type |
----------------------
| id | int |
| name | varchar |
| salary | int |
| managerId | int |
----------------------
id 是该表的主键具有唯一值的列。
该表的每一行都表示雇员的ID、姓名、工资和经理的ID。编写解决方案找出收入比经理高的员工。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1: 输入:
Employee 表:
------------------------------
| id | name | salary | managerId |
------------------------------
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | Null |
| 4 | Max | 90000 | Null |
------------------------------
输出:
----------
| Employee |
----------
| Joe |
----------
解释: Joe 是唯一挣得比经理多的雇员。 思路 方法一 1.在这里面只有一张表表中有一个很大的缺陷就是并没有去记录员工的直属领导是谁只有一个字段managerId 2.这个managerId指的就是领导的id所以managerId指代的就是当前表的主键员工id 3.那么我们可以先找出员工对应的领导如遇到这种类型的题只有一个表那必然是用到自连接的 4.提到自连接就自然联想到了一句话自连接查询中必须要为表起别名很简单的逻辑自连接其实就是把这题想成两个表一个员工表一个领导表只是说两个表长的一样而已所以名字肯定是要不同那么我们假设员工表是a领导表是b 5.那么我们的员工对应的领导的连接条件是什么呢 6.员工的managerId 领导的id 7.来实现一下这个过程自连接的语法 8.select * from Employee a join Employee b on b.id a.managerId 9.但我们的目的并不是找员工对应的领导我们还有一个条件要员工工资大于领导工资也就是a.salary b.salary 10.我们又想起连接两个条件的关键字是什么and 11.此时select * from Employee a join Employee b on b.id a.managerId and a.salary b.salary 12.此时优化一下 * select a.name as Employee
from
Employee as ajoin
Employee as bon
a.managerId b.id and a.salaryb.salary ; 执行 方法二 1.嵌套查询,直接抓着工资硬刚 2.Employee表还是取一个别名a 作为员工表 3.select name as Employee from Employee as a where salary 经理的薪资 4.也就是select name as Employee from Employee as a where salary (select salary from Employee where Id a.Managerid ) 5.大于号后面的条件就理解为查取员工对应的领导的薪资 6.整体理解为员工的薪资 大于 员工对应的领导的薪资则查询出来了 select name as Employee from Employee as a where salary (select salary from Employee where Id a.Managerid ) 写到这里每日两题的力扣就结束了但是对于第二题来说我个人认为肯定是自连接的方式让大家更为接受