
Data-Science-For-Beginners 实战作业用 VS Code 与 SQLite 查询机场关系型数据库【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本篇实战指南完整拆解 Data-Science-For-Beginners 仓库中《关系型数据库》一课的课后作业使用 Visual Studio Code 搭配 SQLite 扩展打开仓库自带的airports.db机场数据库通过SELECT、WHERE与INNER JOIN等 SQL 语句查询英国和爱尔兰各城市的机场信息。阅读完成后你将掌握在 VS Code 中搭建 SQLite 查询环境、读懂两张关联表主键/外键的数据库结构并独立写出从单表筛选到双表联查的完整 SQL 查询。作业目标概览本作业源自 2-Working-With-Data/05-relational-databases/assignment.md对应课程正文 2-Working-With-Data/05-relational-databases/README.md 中讲解的核心概念表tables、主键Primary KeyPK、外键Foreign KeyFK以及通过JOIN将分散在多张表中的数据重新聚合。课程的核心理念是关系型数据库将数据拆分到多张表中以避免重复、提升灵活性而查询时再通过关联把它们缝合回来。本作业正是这一理念的落地练习——因为一些城市拥有多个机场如伦敦有 6 个所以数据被拆分到cities与airports两张表你需要用JOIN把机场与其所在城市、国家重新组合起来展示。第一步环境准备VS Code SQLite 扩展作业要求使用Visual Studio Code与SQLite 扩展与数据库交互无需安装独立的数据库服务器前往 Visual Studio Code 官方网站按官方指引完成 VS Code 的安装在 VS Code 扩展市场中搜索并安装SQLite 扩展扩展 ID 为alexcvzz.vscode-sqlite按照 Marketplace 页面上的说明完成安装。安装完成后VS Code 即具备打开 SQLite 数据库文件、执行 SQL 查询、查看查询结果表格的能力非常适合本作业这类轻量级数据库练习。第二步获取并打开机场数据库作业使用的样例数据库airports.db已经随仓库提供其路径为 2-Working-With-Data/05-relational-databases/airports.db。你可以将该文件复制到本地任意目录然后按以下步骤在 VS Code 中打开启动 Visual Studio Code按下Ctrl-Shift-PMac 上为Cmd-Shift-P打开命令面板输入并选择SQLite: Open database在弹出的选项中选择Choose database from file然后定位到上一步保存的airports.db文件打开数据库后屏幕上不会出现明显变化此时再次按下Ctrl-Shift-PMac 为Cmd-Shift-P输入并选择SQLite: New query新建查询窗口。新的查询窗口即可用于编写 SQL 语句。运行查询的快捷键为Ctrl-Shift-QMac 上为Cmd-Shift-Q查询结果会以表格形式展示在窗口中方便对照验证。提示如果你希望不依赖 GUI 直接验证也可以使用 SQLite 官方命令行工具对同一数据库文件执行下方所有 SQL得到完全一致的结果。理解数据库结构Schema 与主外键关系一个数据库的 schema模式就是它的表设计与结构。airports.db中包含两张表Cities英国和爱尔兰的城市清单Airports机场清单。由于部分城市拥有多个机场因此数据被拆成两张表存储通过一对多关系关联。课程正文 2-Working-With-Data/05-relational-databases/README.md 中用降雨量示例解释了同样的设计动机把年份降雨量单独存放并用city_id引用城市可以避免反复重复城市名与国家名也不必在新增年份时修改表结构。作业给出的表结构如下Citiesid (PK, integer)city (text)country (text)Airportsid (PK, integer)name (text)code (text)city_id (FK to id inCities)结合仓库中数据库文件的实际内容可通过 SQLite 命令行或 Python 的sqlite3模块读取其真实建表语句为CREATE TABLE Cities ( id INTEGER PRIMARY KEY AUTOINCREMENT, city text NOT NULL, country text NOT NULL ); CREATE TABLE Airports ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, code TEXT, city_id INTEGER, FOREIGN KEY(city_id) REFERENCES Cities(id) );两个关键概念在此体现主键PKCities.id与Airports.id都是INTEGER PRIMARY KEY AUTOINCREMENT即自增整数主键用来唯一标识每一行且一旦生成不应改变否则会破坏表间关系外键FKAirports.city_id引用Cities.id它本质上是一个指针——某行机场数据通过city_id指向它所属的城市。例如实际数据中Belfast International Airport的city_id为 2指向Cities表中 id 为 2 的Belfast。从实际数据库统计已验证Cities表共有170个城市Airports表共有181个机场其中爱尔兰Ireland的城市有 16 个伦敦London, United Kingdom拥有 6 个机场Glasgow、Leeds、Bristol、Manchester、Belfast 等城市各有 2 个机场。第三部分完成四个核心查询任务作业要求编写 SQL 查询返回以下四类信息下面逐一给出解法、原理与实际输出。任务 1查询 Cities 表中所有城市名核心语法是SELECT列名FROM表名SELECT city FROM Cities;执行后返回 170 行城市名与Cities表行数一致。值得注意的实践细节SQL 关键字不区分大小写select与SELECT等价但表名、列名在不同数据库下可能区分大小写因此最佳实践是——编程中一律按大小写敏感处理SQL 关键字统一使用大写。任务 2查询 Cities 表中所有爱尔兰城市在SELECT ... FROM ...基础上加入WHERE过滤条件即满足某条件才显示SELECT city FROM Cities WHERE country Ireland;实际返回 16 个爱尔兰城市按字母序排列包括Bantry、Casement、Connaught、Cork、Dongloe、Dublin、Galway、Indreabhan、Inis Mor、Inisheer、Inishmaan、Kerry、Leixlip、Shannon、Sligo、Waterford。字符串字面量在 SQL 中用单引号包裹WHERE country Ireland表示只保留国家为 Ireland 的行。任务 3查询所有机场名称及其所在城市与国家机场名存放在Airports表城市与国家存放在Cities表需要把两张表连接起来。这正是课程中讲解的INNER JOIN在两表之间建立接缝用各自某一列的值进行匹配。这里我们用Airports.city_id与Cities.id匹配SELECT Airports.name, Cities.city, Cities.country FROM Airports INNER JOIN Cities ON Airports.city_id Cities.id;执行原理ON子句指定匹配条件SQLite 会逐行比对两表将city_id与id相等的机场行和城市行拼成一条结果。使用表名.列名的写法是为了消除歧义——两张表都含有id列必须明确指定取自哪张表。从实际数据验证该查询返回180行。原因在于Airports表中有一条Newcastle Aerodrome记录的city_id为 NULL未关联任何城市而 INNER JOIN 只返回能在另一张表找到匹配的行因此 181 个机场中有 1 个被过滤掉。这也印证了课程中inner join 意味着任何未匹配的行都不会显示的说明。前几行结果为namecitycountryBelfast International AirportBelfastUnited KingdomSt Angelo AirportEnniskillenUnited KingdomGeorge Best Belfast City AirportBelfastUnited KingdomCity of Derry AirportLondonderryUnited KingdomBirmingham International AirportBirminghamUnited Kingdom任务 4查询伦敦英国的所有机场在 JOIN 基础上叠加WHERE过滤同时限定城市与国家两个条件SELECT Airports.name, Airports.code FROM Airports INNER JOIN Cities ON Airports.city_id Cities.id WHERE Cities.city London AND Cities.country United Kingdom;返回伦敦的全部 6 个机场数据中的code为四字母机场代码namecodeLondon Luton AirportEGGWLondon Gatwick AirportEGKKLondon City AirportEGLCLondon Heathrow AirportEGLLLondon Stansted AirportEGSSLondon HeliportEGLW通过这个任务可以看到 JOIN 与 WHERE 的协作模式先由 JOIN 把机场挂到正确的城市上再由 WHERE 把范围收窄到指定城市。这也与课程正文中先连接两表、再过滤年份的降雨量示例WHERE rainfall.year 2019完全同构。查询验证与结果核对建议在完成每个任务后将查询结果与以下基线核对数据来自仓库内 airports.db 实测任务 1 返回行数 Cities 表总行数170任务 2 返回行数 16爱尔兰城市任务 3 返回行数 180INNER JOIN 会排除 1 条city_id为 NULL 的机场记录任务 4 返回行数 6伦敦机场。若结果行数与上述不符优先检查是否漏写了JOIN的ON条件、是否把city_id与id写反、过滤条件中的字符串值大小写、引号是否正确。进阶思考探索多机场城市课程正文的挑战部分鼓励进一步探索数据。基于已掌握的表结构你可以尝试用GROUP BY找出拥有多个机场的城市例如SELECT Cities.city, COUNT(Airports.id) AS airport_count FROM Airports INNER JOIN Cities ON Airports.city_id Cities.id GROUP BY Cities.id HAVING COUNT(Airports.id) 1 ORDER BY airport_count DESC;实际数据中伦敦以 6 个机场居首Glasgow、Leeds、Bristol、Manchester、Belfast 各有 2 个。这类查询帮助你体会拆分存储、聚合查询的关系型数据库设计哲学。评分标准与完成度自检原作业的评分维度分为三等Exemplary典范、Adequate合格、Needs Improvement需改进。判定要点为四个查询是否全部编写正确并返回预期结果是否准确使用了WHERE过滤与INNER JOIN关联结果是否与数据库实际内容一致。完成四个任务后可对照上文的输出基线进行自检。小结通过本作业你完成了从环境搭建VS Code SQLite 扩展、数据库文件打开到基于真实机场数据编写四条 SQL 查询的完整链路。这四条查询由浅入深恰好覆盖了《关系型数据库》课程的核心知识SELECT/FROM取数、WHERE过滤、INNER JOIN跨表关联以及 JOIN 与 WHERE 的组合使用。课程正文 2-Working-With-Data/05-relational-databases/README.md 中关系型数据库围绕将信息拆分到多张表、再聚合展示与分析的总结在airports.db上得到了完整的实践印证——这也正是后续使用 DataFrame 进行数据处理时同样成立的核心思维。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考