前言
明天的希望,让我们忘了今天的痛苦。
本题难度不大,在看题的过程意识到之前学习过的MySQL中的关于表格连接的知识掌握相对薄弱,借着这道题将表格连接的内容进行复习并在此留下记录。
一、题目内容
表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
SQL架构:
Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255)) Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255)) Truncate table Person insert into Person (PersonId, LastName, FirstName) values ('1', 'Wang', 'Allen') Truncate table Address insert into Address (AddressId, PersonId, City, State) values ('1', '2', 'New York City', 'New York')
代码模板:
# Write your MySQL query statement below
二、解题过程
1. 解题思路
数据库查询问题相对简单,本题要求无论Person表是否有地址信息,都要将两个表中的FirstName, LastName, City, State四个字段查出出来。观察题目中的两个表可以发现,Person表中的字段PersonId是Address表中的外键,因此在连接时可以通过PersonId将两张表连接起来。在看到题目的第一想法是使用left join
,因为Person表中的用户不一定具有具体的地址信息,所以想要在查询结果中保存Person表中的数据就需要使用left join
的方式将左表的数据保存下来。
2. 解题代码
# Write your MySQL query statement below select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId
三、提交结果
四、MySQL连接的使用
如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。就涉及到了连接的问题,在MySQL中常用的连接有inner join
(内连接或等值连接),left join
(左连接),right join
(右连接),full join
(全连接)
inner join
:获取两个表中字段匹配关系的记录left join
:获取左表所有记录,即使右表没有对应匹配的记录
right join
:获取右表所有记录,即使左表没有对应匹配的记录full join
:如果某表中某一行在另一表中,没有匹配行,则相应列的内容为NULL
图示:
INNER JOIN … ON …
总结:inner join 连接查询到的内容为两张表的交集
LEFT JOIN … ON …
总结:left join 查询出左表的所有数据,右表中的数据如果有对应的数据就显示出来,没有对应的数据就用NULL来代替
RIGHT JOIN … ON …
总结:right join 查询出右表的所有数据,左表中的数据如果有对应的数据就显示出来,没有对应的数据就用NULL来代替
FULL JOIN … ON …
总结:full join为左表和和右表的集合,如果某一张表中某一行在另一表中没有匹配行,则相应列的内容用NULL来代替
总结
在实际的应用中数据库中经常会使用多张表的查询,很少会使用单张表的查询,因此对于多表查询的掌握更为重要,在多表查询中表格的连接查询首当其冲,接着这一道题再次对数据表连接方式做一个回顾与总结