MySQL练习 组合两表

  • 考点梳理
  • 题目简介
  • 解题思路
  • 代码


考点梳理

left / right  join on 语法与where的使用区别:

首先,(以left join on为例)left join on 语法在建立临时列表时,
是先建立临时列表再进行on之后的条件判定。如:

表名:Information

ID

Name

Sex

Address

TLE

1

xi

man

beijin

010-111111

2

ha

woman

nanjin

010-22222

3

he

man

xian

010-3333

表名:BookBorrow

ID

BookID

BookName

Time

2

001

《哈姆雷特》

2020.01.20

4

002

《复活》

2020.01.22

6

004

《来日可期》

2020.01.22

7

003

《北极星的仰望》

2020.01.23

(以 left join on 为例)执行当前代码:

select * 
from information a left join BookBorrow b
on a.ID = b.ID

建立临时列表如下(部分展示):

ID

Name

Sex

Address

TLE

ID

BookID

BookName

Time

1

xi

man

Beijin

010-111111

1

null

null

null

2

ha

woman

nanjin

010-22222

2

001

《哈姆雷特》

2020.01.20

..

..

..

..

..

..

..

..

..

虽然此时 xi 这位读者没有借书,但是当查询每位读者的借书情况时,也需要将没有借书
的人的借书情况展示出来,或者查询其个人信息。所以使用left join  on  或者right join 
 on 能实现对该类问题的建立,而当on后的条件不匹配时,右表都为null。

where的作用::
执行如下代码:
select *
from Information as a ,BookBorrow as b
where a.ID = b.ID
输出结果:

ID

Name

Sex

Address

TLE

BookID

BookName

Time

2

ha

woman

nanjin

010-22222

001

《哈姆雷特》

2020.01.20

从查询结果看出,where 不能查询出没有借阅记录的结果,但是当查询一个人是否具有借
阅记录时,就需要多步操作才能得到需要的结果,相比如此的操作,更能节约执行时间。
当我们使用 left   join 来寻找在一些表中不存在的记录,则我们需要做下面的测试:
where 部分的 xxx IS NULL,便可得到。

题目简介

表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

力扣题源链接:[https://leetcode-cn.com/problems/combine-two-tables]

解题思路

(首先,在开始思考这道题时,理解错误,题目中要求无论Address表是否存在,在组合两个
表的时候都需要得出{“小明”,“111”,null或者“xx”,null或者“vv” }的输出结果,所以这里使用
where语法无法实现对不存在address表时,组合两表的操作,因此只能使用left join    on 的语
法进行合并两个表,从而筛选出符合要求的表内容)

代码

select A.FirstName, A.LastName, B.City, B.State
from Person as A left join Address as B 
on A.PersonId = B.PersonID

执行结果如下:

mysql两张表拼成一个 mysql组合两张表_mysql两张表拼成一个