SQL 175. 组合两个表

文章讲述了如何使用SQL的LEFTJOIN操作来合并Person和Address两张表,当在Address表中找不到PersonId对应的地址时,返回null。问题涉及到数据库设计,主键和外键的关系,以及查询性能优化,因为PersonId在JOIN时没有索引可能影响效率。
摘要由CSDN通过智能技术生成

SQL 175. 组合两个表

SQL 题目地址 : https://leetcode.cn/problems/combine-two-tables/

准备数据

CREATE TABLE `Person` (
  `PersonId` int(11) NOT NULL,
  `FirstName` varchar(16) NOT NULL,
  `LastName` varchar(16) NOT NULL,
  PRIMARY KEY (`PersonId`)
) ENGINE=InnoDB;

CREATE TABLE `Address` (
  `AddressId` int(11) NOT NULL,
  `PersonId` int(16) NOT NULL,
  `City` varchar(16) NOT NULL,
  `State` varchar(16) NOT NULL,
  PRIMARY KEY (`AddressId`)
) ENGINE=InnoDB;

需求

查询 Person 表的 FirstName, LastName, City, State

  • 当 personId 的地址不在 Address 表中,就返回 null

解决

当 personId 的地址不在 Address 表中,就返回 null: , 说明:

  • 以 Person 为主表
  • Address 信息可以为空

典型的 left join 解决思路

  • 通过 PersonId 进行关联
  • Address 的 PersonId 没有索引 ,Join 性能会较低
select t1.FirstName,
  t1.LastName,
  t2.City,
  t2.State
from Person t1 left join Address t2
on t1.PersonId = t2.PersonId
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值