前面我们介绍了单张表的查询,包括模糊查询、分组、排序、各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的表进行组合查询,本节内容涉及到的几个关键点有:

等值和非等值连接查询;自然连接查询;嵌套查询;自身连接查询;

我们还是通过Python中的“pymysql”模块来连接Mysql数据库,进行今天的学习。

准备工作

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

下面是三张表的建表语句和一些基础数据:

建表语句

基础数据

等值和非等值连接查询

通过比较运算符(通常有:=、>=、<=、>、<、<>、!=、like等)进行查询条件的比较,sql语句的写法是:

select A.*,B.* from A,B where A.主键=B.外键 and 其他查询条件;

假如我们想要查询学生名字叫陈伟的学生的成绩,在Python中举例如下:

进行等值连接查询的sql语句编写时,要明确指出数据源来源于哪几张表,并且要很清楚的知道哪几个字段是相互关联的,然后再添加其他的查询条件。其实这种查询的原理就是将数张表合成一张大表,字段相加,记录相乘,即笛卡尔积。

自然连接查询

自然连接查询就是在等值连接查询的基础之上,将需要的列展示出来的查询。

sql语句的写法是:select A.字段1,B.字段2 from A,B where A.主键 = B.外键 and 其他查询条件;

例如:我们想查询陈伟的所有学科的成绩,展示学生姓名、学科和成绩,如下图所示:

自然连接查询的本质实际上也是基于等值连接查询结果的,只是在查询结果集中进行筛选。因此,基于以上两种查询,优点是简单方便,缺点也很明显:查询效率较低,不利于海量的数据查询;

嵌套查询

嵌套查询就是将一个查询语句嵌套到另一个查询语句里,得到的查询结果集;

假设我们要查询学生名字叫陈伟的语文考试成绩,用嵌套查询可以这样写:

编写嵌套查询语句时要注意的地方是:在写之前要理清思路,表的结构要清晰明了。单条sql查询语句要逐个验证,然后再结合在一起进行验证。它的优点在于查询效率较高,缺点就是逻辑性比较强;

从上例我们看到通过“in”关键词将两条查询语句连在一起进行嵌套查询,下面列举一下嵌套查询所用到的各种关键词:

in:查询的值是否在子查询语句的结果集中,如上例;exist:子查询语句的结果只要不为空,就返回所有符合条件的查询结果;

上例中,因为子查询语句能查询到值,因此主查询语句将返回所有的查询结果;

any:子查询语句的结果集中只要有任意一个满足条件,就返回所有符合条件的查询结果;all:子查询语句的结果集必须都要满足条件,才返回符合条件的查询结果;

请注意上例中any和all的用法,得到不同的结果;

自身连接查询

当在一张表中用到该表的好几个字段作为筛选条件,可以考虑使用自身连接查询实现,此时,需要为该表起一个别名,例如我们要把所有大于女同学年龄的所有男同学查询出来,可以这么做:

通过as关键词为同一张表命名为一个别名,从而可以使用这个别名,自身连接查询在应用中往往因为语法简单,但逻辑关系复杂而导致不太容易被理解。其实有时候,只要将单表看成是多张表,跳出思维的局限性,有时候在应用中会给我们带来很多方便。

使用python对学生表的查询_多表组合查询——Python操作Mysql数据库相关推荐

  1. 条件查询_多条件组合查询---测试用例设计

    一.假设查询因子:A,B,C,D,E(下拉框+复选框) 1.单独查询:A:B:C:D:E - 确保单独查询的正确性,这也是最基本的. 2.两个组合查询:AB:AC:AD:AE:BC:BD:BE:CD: ...

  2. jdbc如何对mysql数据库进行查询_【转载】通过JDBC对MySQL数据库的增删改查

    目录 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...

  3. mysql请假表需要什么_课内资源 - 基于JSP和MYSQL数据库实现的请假管理系统

    1 系统概述 1.1 系统说明 该系统用于海宁市医院的员工请假的专用请假系统,将员工请假的申请.审批.查询流程规范化,并进行必要的记录,为后面奖金的发放和人事升迁做参考. 同时该系统还支持管理员对用户 ...

  4. mysql多组合条件查询_多条件组合查询

    // 条件(criteria) 分别为 cname, gender, cellphone, email public List query(Customer criteria){ try{ // 给出 ...

  5. cmd如何刷新MySQL数据库_怎样在cmd中用命令操作MySQL数据库 需要技巧

    用命令来操作MySQL是工作必备的,今天我就来分享一下cmd命令操作MySQL数据库的方法,希望有帮助. 工具/材料 电脑 xampp 操作方法 01 首先,启动MySQL服务才行哦.这里我是用xam ...

  6. oracle 查询天,Oracle查询_ 单表查询

    前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...

  7. python操作mysql中的表_带你了解什么是Python操作MySQL数据库

    写这篇文章主要是为了介绍Python操作MySQL数据库,并结合相应的实例带你更加深入了解.文中的代码实例很详细,对大家有一定的参考学习价值. 1.什么是pymysql? PyMySQL是在Pytho ...

  8. python 自动运维架构师_运维架构师-Python 自动化运维开发-031

    *运维架构师-Python 自动化运维开发-031 十九.Python3 操作数据库 1.Python3 操作 MySQL 1.基本介绍Python3 操作 MySQL 数据库 可以使用的模块是 py ...

  9. 操作 mysql 不生成日志_利用Python操作MySQL数据库,以后不懂这些是要被鄙视的!...

    前言 在工作中,我们需要经常对数据库进行操作,比如 Oracle.MySQL.SQL Sever 等,今天我们就学习如何利用Python来操作 MySQL 数据库. 本人环境:Python 3.7.0 ...

  10. 【Python】Python 2 和 Python 3 操作 MySQL 数据库实现创建表、删除表、增删改查操作

    1.MySQL数据库和表的编码格式 (1)创建数据库并指定字符集 mysql> create database testpythondb character set utf8; Query OK ...

最新文章

  1. Celery+Rabbitmq实现异步任务
  2. java启动器在bin目录_org.iipg.starter
  3. 3-18pytorch与矩阵分解PCA
  4. Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
  5. Leetcode每日一题:416.partition-equal-subset-sum(分割等和子集)
  6. shell脚本之统计进程数(ubuntu实测可用)
  7. 边相关扫描线填充算法
  8. 成功的人不是最聪明的那个人,但绝对是一个交流很棒的人
  9. 中国自由软件推广先锋的自述,心潮澎湃的一往无前,一定要看!作者:洪峰
  10. json序列化 java对象_Java中将JSON反序列化为泛型对象
  11. NDK在Linux下载配置以及C、C++编译配置(交叉编译)
  12. 基于SSM的酒店客房预订管理系统
  13. mysql v8 漏洞_海洋CMS V8.7 SQL注入漏洞
  14. 计算机通讯技术核心期刊有哪些,通信类核心期刊汇总.doc
  15. IntelliJ IDEA 创建Java项目
  16. 运维工程师 常见的 trouble shooting 故障排错思路
  17. 腾讯 地图 机器学习岗 春招实习123面(猝)
  18. C语言实现小游戏之井字棋
  19. opencv学习1-3——通道变换,灰度化grayscale,二值化thresholding。
  20. NLP-Highway Network代码实现

热门文章

  1. 简单两步使用node发送qq邮件
  2. freeRTOSConfig.h文件对FreeRTOS进行系统配置
  3. extern与头文件(*.h)的区别和联系
  4. linux中O(1)调度算法与全然公平(CFS)调度算法
  5. Yii2 使用 Joins 查询
  6. B树、B-树、B+树、B*树
  7. mysql从入门到精通之数据库安装图解
  8. Chrome v28 会在pwd目录下生成libpeerconnection.log文件
  9. 在 Ubuntu 下安装 Discuz! 7.0
  10. C#.net模拟提交表单POST