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

news/2024/7/7 21:58:06

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

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

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

u=3015931767,4114415826&fm=173&app=25&f=JPEG?w=454&h=341&s=D0AABF571B526E5F0C94886803006073

准备工作

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

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

u=3110472887,3937870175&fm=173&app=25&f=JPEG?w=603&h=495&s=CA50CD1A19BFC5CC406530DE020050B2建表语句

u=538952269,4055892002&fm=173&app=25&f=JPEG?w=640&h=247&s=8013C53297C05D5B5C45A1DA0000D0B1基础数据

等值和非等值连接查询

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

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

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

u=1366755825,554547936&fm=173&app=25&f=JPEG?w=640&h=430&s=8A63C514111FC1CC44F421DE0200C0B1

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

自然连接查询

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

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

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

u=3600230604,1550701552&fm=173&app=25&f=JPEG?w=640&h=192&s=8873C7149F745C0104F4115E030050B2

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

嵌套查询

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

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

u=2458492417,2499946408&fm=173&app=25&f=JPEG?w=638&h=179&s=0B73C5148DF06C0104701C7C030090F0

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

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

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

u=3700289559,3348451383&fm=173&app=25&f=JPEG?w=640&h=100

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

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

u=1081957203,2395117647&fm=173&app=25&f=JPEG?w=640&h=342&s=8A63C51411DC55C84AEDA9DB020050B2

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

自身连接查询

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

u=3264145376,350968771&fm=173&app=25&f=JPEG?w=640&h=186&s=8A73C5149D707C0342E541DE020090B2

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


http://lihuaxi.xjx100.cn/news/293691.html

相关文章

hive币涨幅空间大吗_空间大、油耗低,家用MPV领域的三款全能好车,你心动了吗?...

汽车行业一直有“金九银十”的说法&#xff0c;眼下正值10月购车黄金季&#xff0c;很多朋友都在考虑入手一辆爱车。对于已经成家立业的小伙伴来说&#xff0c;买车时自然会更关注家庭的用车需求。而汽车作为大宗消费品&#xff0c;置换率低&#xff0c;使用率高&#xff0c;所…

检查当前ORACLE连接数

检查当前ORACLE连接数并写入文件 [oraclerac1 shell]$ cat ip.sh #!/bin/sh date1date %Y%m%d date2"date %Y-%m-%d_%R" ipnumnetstat -antp|grep :1521|awk {print $5}|awk -F":" {print $1}|grep ^[^0]|sort |uniq -c|sort|awk -v a" ${date2…

python tqdm_Python基础 | 一个被忽视的神器tqdm

欢迎点击「算法与编程之美」↑关注我们&#xff01;本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列文章。首先来看一段视频&#xff0c;是不是很酷&#xff1f;日常工作和学习中&#xff0c;经常需要观察当前…

input框选中时如何不出灰框_如何建立学习目标:这个SMART原则,你要了解,家长看懂教给孩子...

作者 | 好看的 原创来川学习方法&#xff0c;学出幸福感点击标题下方“来川学习方法”蓝字关注我经常跟学生们说一句话&#xff1a;学霸都是赢在起跑线上的。这个起跑线指的是什么&#xff1f;早点启蒙、多上补习班、提前把老师要教的内容学一遍&#xff1f;不是。我说的起跑线…

lingo变量无限制版本_java变量必看知识点

点击蓝字关注我们Java 语言是强类型(Strongly Typed)语言&#xff0c;强类型包含以下两方面的含义&#xff1a;所有的变量必须先声明、后使用。指定类型的变量只能接受类型与之匹配的值。这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变量能被赋的…

Windows xp 无人值守远程安装部署

一、实验准备1、服务器&#xff08;beijing&#xff09;安装以下服务:1.1 安装AD并同时安装DNS1.2 安装DHCP1.3 安装“远程安装服务”2、客户机&#xff1a;应支持网络启动&#xff0c;网卡上有启动芯片&#xff08;PXE芯片&#xff09;二、实验拓扑三、实验步骤&#xff1a;Be…

php读取西门子plc_简单说一些PLC中模拟量的相关概念

引言&#xff1a;有些刚刚接触PLC的小伙伴对PLC中的模拟量编程不理解甚至有点摸不着方向&#xff0c;让他用PLC读取一个压力值模拟量&#xff0c;他会感到有点为难。就是因为PLC中的一些基本概念没有搞清楚&#xff0c;我今天简单来给大家说一些&#xff0c;应该说大家看了&…

新浪云python示例_在新浪云上部署Django应用程序

前言 近日&#xff0c;笔者利用空闲时间写了一个简单的在线预约系统&#xff0c;使用的工具包括Python 3.5.1 和 Django 1.9.5 。早就有听说Django响亮的口号&#xff0c;“The web framework for perfectionists with deadlines”。这次自己亲自尝试了过后&#xff0c;发现果然…