You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用city.Name而非NAME?为何以city.CountryCode关联两张表?

已知CITY和COUNTRY表,查询所有位于'Africa'大洲的城市名称。
CITY.CountryCode与COUNTRY.Code为匹配键列。

解决方案

SELECT city.NAME
FROM city
    INNER JOIN country
    ON city.CountryCode = country.Code
WHERE country.continent = 'Africa';

技术疑问解答

1. 为何查询语句中使用city.Name而非直接写NAME?

City和Country表都包含Name字段,直接写NAME会让数据库无法识别你要调用哪个表的字段,触发列名歧义错误。加上表名前缀(也可以给表设置别名后用别名前缀)能明确指定字段来源,避免混淆。

2. 为何内连接要通过ON city.CountryCode = country.Code执行?

City.CountryCode和Country.Code是两张表的逻辑关联键:City表的CountryCode存储的是对应国家的代码,和Country表的主键Code一一对应。内连接通过这个条件,才能把每个城市和它所属的国家数据关联起来,进而通过国家的Continent字段筛选出非洲的城市。

3. 为何使用ON city.POPULATION = country.POPULATION或ON city.NAME = country.NAME无法生效?

  • 用city.POPULATION = country.POPULATION:城市人口和国家总人口完全相等的情况几乎不存在,这种关联条件找不到匹配数据,会返回空结果。
  • 用city.NAME = country.NAME:城市名称和国家名称完全相同的情况极少(比如城市名是"Paris",对应国家名是"France"),无法建立正确的关联关系,要么返回错误结果,要么没有数据。
    这两个字段都不是用来关联城市与国家的合理键,自然无法实现需求中的关联筛选。

表结构

City表:

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

COUNTRY表:

+----------------+-------------+
| Field          | Type        |
+----------------+-------------+
| Code           | char(3)     |
| Name           | char(52)    |
| Continent      | char(50)    |
| Region         | char(26)    |
| SurfaceArea    | float(10,2) |
| IndepYear      | smallint(6) |
| Population     | int(11)     |
| LifeExpectancy | float(3,1)  |
| GNP            | float(10,2) |
| GNPOld         | float(10,2) |
| LocalName      | char(45)    |
| GovernmentForm | char(45)    |
| HeadOfState    | char(60)    |
| Capital        | int(11)     |
| Code2          | char(2)     |
+----------------+-------------+

内容的提问来源于stack exchange,提问作者Berk Turgut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:47:26