新月份,新目标。您的帮助使项目向前推进。 🖥️ 支持 sqltest →
SQL 代码已复制到剪贴板

Countries 数据库(PostGIS):空间表和 SQL 练习

Countries 是用于学习空间 SQL 的 PostGIS 数据库:包含世界各国及首都,以及纽约市的人口普查街区、街区、街道和地铁站图层。 在 SQLtest.online 上,你可以直接在浏览器中查询它:做自动判题的练习,或在练习场中运行自己的查询,无需安装任何软件。

  • 7 张空间表
  • 246 个国家
  • 491 个地铁站
  • 11 道 SQL 练习

什么是 Countries

PostGIS 是 PostgreSQL 的扩展,增加了几何类型和数百个空间函数:距离、面积、相交、坐标转换等。这个数据库让你可以在熟悉的数据上试用它们。

纽约市的表来自著名的 PostGIS 教程 "Introduction to PostGIS",世界数据表包含各国边界和首都。它们共同涵盖了两种坐标系中的点、线和多边形。

数据库包含什么

这些表分为两组。

世界

带边界多边形的 countries 和带点坐标的 capitals,均为 SRID 4326(经度和纬度)。

纽约市

nyc_census_blocks、nyc_neighborhoods、nyc_streets、nyc_subway_stations 和 nyc_homicides,SRID 为 26918(UTM 18N 区,单位为米)。

最需要记住的一点:世界数据表存储的是度,纽约数据表存储的是米。纽约图层中的距离和面积直接以米为单位;对于世界数据表,需要先转换为 geography 或对几何进行投影变换。

各表的数据量:

表行数内容
countries246国家及其边界
capitals192首都
nyc_census_blocks38,794带人口数据的普查街区
nyc_neighborhoods129街区
nyc_streets19,091街道
nyc_subway_stations491地铁站
nyc_homicides3,982凶杀案

表结构

点击表名可查看它的列、示例行和键。

表列表

countries - 包含几何形状的国家列表。
  • id唯一记录标识符(主键)
  • name国家名称
  • border国家几何形状(MultiPolygon,SRID 4326)
id name border
1 法国 MultiPolygon(...) [SRID=4326]
  • 主键,btree (id)
capitals - 包含位置的首都列表。
  • id唯一记录标识符(主键)
  • name首都名称
  • country_id国家引用(外键)
  • location首都位置(Point,SRID 4326)
id name country_id location
1 巴黎 1 Point(...) [SRID=4326]
  • 主键,btree (id)
  • 外键 (country_id) 引用 countries(id)
nyc_census_blocks - 纽约市的人口普查区及其人口数据。
  • gid唯一记录标识符(主键)
  • blkid人口普查区ID
  • popn_total总人口
  • popn_white白人人口
  • popn_black黑人总人口
  • popn_nativ本土人口
  • popn_asian亚裔人口
  • popn_other其他人口
  • boroname区名
  • geom人口普查区几何形状(MultiPolygon,SRID 4326)
gid blkid popn_total popn_white popn_black popn_nativ popn_asian popn_other boroname geom
1 360050001001000 1000 500 200 50 150 100 曼哈顿 MultiPolygon(...) [SRID=4326]
  • 主键,btree (gid)
nyc_homicides - 纽约市的凶杀事件。
  • gid唯一记录标识符(主键)
  • incident_d事件日期
  • boroname区名
  • num_victim受害者人数
  • primary_mo主要动机
  • id事件ID
  • weapon使用的武器
  • light_dark光线或黑暗条件
  • year事件年份
  • geom事件位置(Point,SRID 4326)
gid incident_d boroname num_victim primary_mo id weapon light_dark year geom
1 2003-01-01 曼哈顿 1 未知 1 火器 D 2003 Point(...) [SRID=4326]
  • 主键,btree (gid)
nyc_neighborhoods - 纽约市的社区。
  • gid唯一记录标识符(主键)
  • boroname区名
  • name社区名称
  • geom社区几何形状(MultiPolygon,SRID 4326)
gid boroname name geom
1 曼哈顿 金融区 MultiPolygon(...) [SRID=4326]
  • 主键,btree (gid)
nyc_streets - 纽约市的街道。
  • gid唯一记录标识符(主键)
  • id街道ID
  • name街道名称
  • oneway单行道指示
  • type街道类型
  • geom街道几何形状(LineString,SRID 4326)
gid id name oneway type geom
1 1 百老汇 否 大道 LineString(...) [SRID=4326]
  • 主键,btree (gid)
nyc_subway_stations - 纽约市的地铁站。
  • gid唯一记录标识符(主键)
  • objectid对象ID
  • id车站ID
  • name车站名称
  • alt_name替代名称
  • cross_st交叉街道
  • long_name长名称
  • label标签
  • borough区
  • nghbhd社区
  • routes路线
  • transfers换乘
  • color颜色
  • express快车指示
  • closed关闭指示
  • geom车站位置(Point,SRID 4326)
gid objectid id name alt_name cross_st long_name label borough nghbhd routes transfers color express closed geom
1 1 1 时代广场 时代广场 第七大道 时代广场-42街 时代广场 曼哈顿 中城 1,2,3,7,A,C,E,N,Q,R,S,W 42街 红色 是 否 Point(...) [SRID=4326]
  • 主键,btree (gid)

示例查询

这些查询展示了数据之间是如何关联的。复制任意一条,在练习场中运行即可。

首都位于本国境内:用 ST_X / ST_Y 获取点坐标,并用 ST_Contains 做空间判断。

SELECT c.name AS capital, co.name AS country,
       round(ST_Y(c.location)::numeric, 2) AS lat,
       round(ST_X(c.location)::numeric, 2) AS lon,
       ST_Contains(co.border, c.location) AS inside_border
FROM capitals c
JOIN countries co ON co.id = c.country_id
ORDER BY c.name
LIMIT 3;
capitalcountrylatloninside_border
Abu DhabiUnited Arab Emirates24.3054.70true
AbujaNigeria9.087.40true
AccraGhana5.60-0.19true

地铁站及其 SRID:纽约图层使用投影坐标系 26918。

SELECT s.name AS station, s.borough, s.routes, ST_SRID(s.geom) AS srid
FROM nyc_subway_stations s
ORDER BY s.gid
LIMIT 3;
stationboroughroutessrid
Cortlandt StManhattanR,W26918
Rector StManhattan126918
South FerryManhattan126918

按主题分类的 SQL 练习

这个数据库上共有 11 道 PostGIS 练习:距离、面积、长度、转换为文本和 JSON 以及空间连接。答案会在带 PostGIS 的真实 PostgreSQL 上自动检查。 右侧数字是该主题的练习数量,彩色圆点表示难度范围。

从哪里开始

Countries 数据库的前几道练习:

  1. 提取几何为文本
  2. 提取几何为 JSON
  3. 城市之间的距离
  4. 国家面积
  5. 曼哈顿地铁站
  6. 社区的面积
  7. 社区的面积
  8. 邻里平均面积
  9. 纽约街道的长度
  10. 小意大利车站

全部 Countries 练习 →

常见问题

使用这个数据库需要安装 PostGIS 吗?

不需要。SQLtest.online 的练习和练习场都在我们的服务器上执行查询,有浏览器就够了。在练习场中选择 PostgreSQL 17 + PostGIS WorkShop 即可。

什么是 SRID?

空间参考标识符:它说明坐标使用的是哪种坐标系。4326 表示以度为单位的经纬度(WGS 84);26918 表示以米为单位的 UTM 18N 区,用于纽约。

纽约的表来自哪里?

来自 postgis.net 上发布的 "Introduction to PostGIS" 教程数据集,这是学习 PostGIS 的常见起点。