首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多表组合查询——Python操作Mysql数据库

前面我们介绍了单张表的查询,包括模糊查询、分组、排序、各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的表进行组合查询,本节内容涉及到的几个关键点有:等值和非等值连接查询;自然连接查询;嵌套查询;自身连接查询;我们还是通过Python中的“pymysql”模块来连接Mysql数据库,进行今天的学习。

和上次一样,我们还是建立了三张表,它们分别是:学生表、学科表、成绩表。每张表都有一个自增量的ID字段,作为该表的主键,同时,成绩表里有两个字段“student_ID”和“subject_ID”与学生表的ID、学科表的ID相关联,同时在这三张表里都插入了一些基础数据,通过已插入的这些基础数据我们来进行分析和介绍。下面是三张表的建表语句和一些基础数据:

,!=,类似等)来比较查询条件,编写sql语句:selectA.*,B。*来自A,B,其中A.主键=B.外键和其他查询条件;如果我们想查询名称为陈伟的学生成绩,Python中的示例如下:

在为等价连接查询编写sql语句时,必须清楚地指出数据源来自哪些表,并清楚地知道哪些字段彼此相关,然后添加其他查询条件。事实上,这种查询的原理是将几个表组合成一个大表,添加字段,并记录乘法,即笛卡尔积。自然连接查询是一种基于等效连接查询显示所需列的查询。

自然连接查询的本质实际上是基于等效连接查询的结果,但仅限于查询结果集。因此,基于以上两种查询,优点既简单又方便,缺点也很明显:查询效率低,不利于海量数据查询;嵌套查询是将一个查询语句嵌套到另一个查询语句中,并获取查询结果集;假设我们想查询陈伟的语言测试成绩的学生姓名,使用嵌套查询可以这样写:

编写嵌套查询语句时要注意的重要事项是在编写之前澄清这些想法,并且表的结构应该清楚。单个sql查询语句逐个验证,然后组合验证。

在上面的例子中,因为子查询语句可以查询该值,所以主查询语句将返回所有查询结果;any:子查询语句的结果集将返回所有限定查询结果,只要其中任何一个满足条件;all:子查询的结果集必须满足条件才能返回合格的查询结果;

请注意上面例子中的任何和所有用法,并得到不同的结果;当使用表的多个字段作为表中的过滤条件时,您可以考虑使用自己的连接查询实现。在这种情况下,您需要为表提供别名。例如,如果我们想查询所有比女同学年长的男学生,我们可以这样做:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829A04DXH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券