表1: Person

  1. +-------------+---------+
  2. | 列名 | 类型 |
  3. +-------------+---------+
  4. | PersonId | int |
  5. | FirstName | varchar |
  6. | LastName | varchar |
  7. +-------------+---------+
  8. PersonId 是上表主键

表2: Address

  1. +-------------+---------+
  2. | 列名 | 类型 |
  3. +-------------+---------+
  4. | AddressId | int |
  5. | PersonId | int |
  6. | City | varchar |
  7. | State | varchar |
  8. +-------------+---------+
  9. AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

解决思路:组合两个表,使用LEFT JOIN 联合两个表,判断相等的条件查询
我的SQL:表1: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键

表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

解决思路:联合两个表,使用JOIN 语句 并且判断条件查询

我的SQL:
SELECT
    p.FirstName FirstName,
    p.LastName LastName,
    a.City City,
    a.State State
FROM
    person p
LEFT JOIN address a ON p.PersonId = a.PersonId

Mysql 连接的使用

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

MySQL LEFT JOIN

MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。

MySQL RIGHT JOIN

MySQL RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。