练习 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.deadFROM pet, person_pet, personWHEREpet.id = person_pet.pet_id ANDperson_pet.person_id = person.id ANDperson.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是你的答案。

笨办法学 Python · 续 练习 40:SQL 读取相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 45:创建 ORM

    练习 45:创建 ORM 原文:Exercise 45: Creating an ORM 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这本书的 SQL 部分的最后一个练习是一 ...

  8. 笨办法学 Python · 续 第六部分:SQL 和对象关系映射

    第六部分:SQL 和对象关系映射 原文:Part VI: SQL and Object Relational Mapping 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本 ...

  9. 笨办法学 Python · 续 练习 43:SQL 管理

    练习 43:SQL 管理 原文:Exercise 43: SQL Administration 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 "管理"一词在 ...

最新文章

  1. Ubuntu 安装 IPython、jupyter notebook
  2. Binder跨进程通信原理(三):Binder IPC实现原理
  3. 肿瘤表观遗传相关重磅数据库:MR4Cancer使用指南
  4. 1×pbs缓冲液配方_PBS缓冲液的配制
  5. Arm 进击自定义指令集,成立自动驾驶计算联盟!
  6. 2017-03-10Git撤销修改
  7. Python中报错:系统找不到指定的文件;浏览器似乎在未打开之前就已经退出解决方法...
  8. 阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准
  9. clustalw序列比对_序列比对,科研必备的几款软件
  10. JFlash 对Flash内容读取
  11. 手把手教你微信小程序开发
  12. java openxml word_使用OpenXML操作Office文档
  13. 全志A10/RK2918等七款平板芯片横向PK
  14. 自学报告:创新设计思维
  15. ava.lang.IllegalArgumentException: At least one base package must be specified at org.springframewo
  16. 2022漂亮有质感的SummerAdmin后台模板+Layui内核
  17. SkyWalking--告警--使用/教程/示例
  18. 211大学副教授月工资只有7000多?高校教授真实的待遇情况如何?
  19. java人民币大小写转换_Java 实现人民币小写转大写[转载http://sunjun.blogchina.com/]
  20. NLP: LDA主题模型

热门文章

  1. (48)System Verilog 类中变量随机激励数组数据
  2. (42)System Verilog 例化Verilog模块
  3. FPGA资源不足导致vivado生成bit失败
  4. fork() 和 vfork()
  5. ajax onload怎么用,Ajax中onload和onreadystatechange两种请求方式的区别
  6. redis 哨兵_Redis的哨兵模式
  7. 【蓝桥杯嵌入式】【STM32】4_TIM之定时器及其中断、PWM初探
  8. java 鸡尾酒排序_Java实现几种常见排序方法
  9. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
  10. php乱码解决方案,PHP中文乱码解决方案