笨办法学 Python · 续 练习 40:SQL 读取

简介: 练习 40:SQL 读取 原文:Exercise 40: Reading with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译在 CRUD 矩阵中,你只知道“创建”。

练习 40:SQL 读取

原文:Exercise 40: Reading with SQL

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

在 CRUD 矩阵中,你只知道“创建”。你可以创建表,你可以在这些表中创建行。现在我将告诉你如何“读取”,或者在 SQL 中是SELECT

SELECT * FROM person;

SELECT name, age FROM pet;

SELECT name, age FROM pet WHERE dead = 0;

SELECT * FROM person WHERE first_name != "Zed";

这里是每一行做的事情:

ex5.sql:1

这表示“从person中选择所有列并返回所有行”。SELECT的格式是SELECT what FROM tables(s) WHERE (tests)WHERE子句是可选的。*(星号)字符是你想要的所有列。

ex5.sql:3

这里我只要从pet表请求两列,nameage。它将返回所有行。

ex5.sql:5

现在我正在从pet寻找相同的列,但是我只请求dead = 0的行。这会给我所有的活着的宠物。

ex5.sql:7

最后,我从person选择所有列,就像在第一行,但我现在指明,它们不等于"Zed"WHERE子句决定哪一行返回,哪一行不返回。

选择多表

希望你现在专注于选择数据。永远记住这一点:SQL 只知道表。SQL 喜欢表。SQL 仅返回表。表,表,表,表! 我以这种非常疯狂的方式重复一遍,以便你将开始意识到,你在编程中知道的东西不会有帮助。你在编程中处理图,在 SQL 中处理表。他们是相关的概念,但心智模型是不同的。

这里是一个例子,它们哪里不一样。假设你想知道 Zed 拥有什么宠物。你需要写一个SELECT,在person中查找,然后“以某种方式”找到我的宠物。为此,你必须查询person_pet表来获取所需的id列。以下是我的做事方式:

SELECT pet.id, pet.name, pet.age, pet.dead
    FROM pet, person_pet, person
    WHERE
    pet.id = person_pet.pet_id AND
    person_pet.person_id = person.id AND
    person.first_name = "Zed";

现在它看起来很庞大,但我会把它拆解,所以你可以看到,他只是简单构造新的表,基于三个表中的数据,和WHERE子句。

ex6.sql:1

我仅仅想要pet中的一些列,所以我在选择中指定它们。在上一个练习中,你使用*来表示“每一列”,但它在这里是一个坏主意。相反,你想要明确地指定你想要的每个表中的哪个列,你可以使用table.column实现它,就像pet.name

ex6.sql:2

为了将pet连接到person,我需要遍历person_pet关系表。在 SQL 中,这意味着我需要在FROM之后列出所有三个表。

ex6.sql:3

WHERE子句的开始。

ex6.sql:4

首先,我将pet连接到person_pet,通过相关 ID 列pet.idperson_pet.id

ex6.sql:5

并且我需要以相同的方式,将人person连接到person_pet。现在,数据库可以仅仅搜索 id 列全部匹配的行,这些就是连接的行。

ex6.sql:6

我最后仅仅请求自己拥有的宠物,通过为我的名称添加person.first_name测试。

挑战练习

  • 写一个查询,查找所有超过 10 年的宠物。
  • 写一个查询,查找所有比你年轻的人。然后查找比你年长的人。
  • 编写一个查询,WHERE子句中使用多于一个测试,使用AND来编写它。例如WHERE first_name = "Zed" AND age > 30
  • 执行另一个查询,使用三个条件,并使用ANDOR运算符来搜索行。
  • 如果你已经知道像 Python 或 Ruby 这样的语言,这可能是一个查看数据的令人惊奇的方式。花时间使用类和对象来构建相同的关系,然后将其映射到此配置。
  • 执行一个查询,查找你到目前为止添加的宠物。
  • 更改查询来使用你的person.id而不是person.name,像我一样。
  • 浏览运行的输出,并确保你知道哪些 SQL 命令生成了哪个表,以及如何生成该输出。

深入学习

通过阅读SELECT命令的文档,继续深入了解 SQLite3,同时阅读EXPLAIN QUERY PLAN功能的文档。如果你不知道为什么 SQLite3 做了一些事情,EXPLAIN是你的答案。

相关文章
|
19小时前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如'cat')的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
19小时前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
2天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
12 1
|
2天前
|
SQL 数据库 数据库管理
python自动生成SQL语句自动化
python自动生成SQL语句自动化
8 1
|
2天前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
14天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
20天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
20 0
|
22天前
|
Python
python 格式化、set类型和class类基础知识练习(下)
python 格式化、set类型和class类基础知识练习(下)
24 0
|
22天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
57 0
|
22天前
|
Python
python 文件操作和学生管理系统练习
python 文件操作和学生管理系统练习
22 0