Python MySQL数据库2:数据库查询(上)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Python MySQL数据库2:数据库查询(上)

总体内容



  • 一、数据准备、基本的查询
  • 二、条件查询
  • 三、排序
  • 四、聚合、分组
  • 五、分页
  • 六、连接查询(多表的时候有用,单表的时候几乎没有用)
  • 七、自关联
  • 八、子查询
  • 九、总结


一、数据准备、基本的查询


  • 1.1、创建数据库 (pythonTestDataBase: 数据库名)


create database pythonTestDataBase charset=utf8;


image.png


  • 1.2、  使用数据库(pythonTestDataBase)


use pythonTestDataBase;
  • 1.3、创建两个数据表  animalTable 与 personTable


create table animalTable(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default '',
    age tinyint unsigned default 0,
    gender enum('雄','雌','保密') default "保密",
    is_delete bit default 0
);
create table personTable(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default '',
    gender enum('男','女','保密') default "保密",
    skinColor varchar(20) default '',
    is_delete bit default 0
);


image.png

  • 1.4、查看表结构


desc animalTable;
desc personTable;
  • 1.5、插入一些数据


insert into animalTable values(0, "梅花鹿", 3,"保密",0),(0, "熊猫", 2, "雌",0),(0, "东北虎", 6,"雄",0);
insert into personTable values(0, "小王","保密","黄",0),(0, "小李","男","黑",0),(0, "小杜","


image.png


1.6、基本的查询


  • (1)、查询所有字段


select * from 表名;
  • 例如:


select * from animalTable;
select * from personTable;
select id, name from animalTable;
  • (2)、查询指定字段


select 列1,列2,... from 表名;
  • 例如:


select name,gender from personTable;
  • (3)、使用 as 给字段起别名


select 字段 as 名字.... from 表名;
  • 例如:


select name as 姓名, gender as 性别 from personTable;


image.png

  • (4)、select 表名.字段 .... from 表名;


select 表名.name, 表名.age from 表名;
  • 例如:


select personTable.name, personTable.gender from personTable;
  • (5)、可以通过 as 给表起别名


select 别名.字段 .... from 表名 as 别名;
  • 例如


select s.name, s.gender from personTable as s;
  • (6)、消除重复行(distinct 字段)
select distinct gender from personTable;


二、条件查询



image.png

image.png

  • 2.1、比较运算符(使用 animalTable 表)


  • (1)、>


// 查看大于 6 岁的动物
select * from animalTable where age>6;
select id,name,gender from animalTable where age>6;
  • (2)、<


// 查看小于 6 岁的动物
select * from animalTable where age<6;
  • (3)、=>=<=


// 查看 等于、等于等于、小于等于 6 岁的动物
select * from animalTable where age=6;
select * from animalTable where age>=6;
select * from animalTable where age<=6;
  • (4)、!=


// 查看不等于 6 岁的动物
select * from animalTable where age!=6;
  • 2.2、逻辑运算符(使用 animalTable 表)
  • (1)、and


// 3到12之间的动物信息
select * from animalTable where age>3 and age<12;


image.png

  • (2)、or


// 6以上或者性别是保密的
select * from animalTable where age>6 or gender="保密";
  • (3)、not


// 不在 7岁以上的雄性 这个范围内的信息 
select * from animalTable where not (age>7 and gender = "雄");


image.png

// 年龄不是小于或者等于7 并且是雄性
select * from animalTable where  (not age <=7) and gender = "雄";


image.png

2.3、模糊查询(使用 personTable 表),效率比较低


image.png


(1)、like% 替换1个或者多个、_ 替换1个、查询姓名中 以 "关键字名" 开始的名字


  • % 替换1个或者多个


// 查询姓名中 有 "杰" 所有的名字
select * from personTable where name like "%杰%";


image.png


  • _ 替换1个


// 查询姓名中 有姓 "周" 所有2个字的名字
select * from personTable where name like "周_";
// 查询姓名中 有姓 "周" 所有3个字的名字
select * from personTable where name like "周__";
// 查询至少有2个字的名字
select name from personTable where name like "__%";
  • 查询姓名中 以 "关键字名" 开始的名字


// 查询姓名中 以 "小" 开始的名字
select name from personTable where name like "小%";
  • (2)、rlike 正则


// 查询以 周开始的姓名
select * from personTable where name rlike "^周.*";
// 查询以 周开始、伦结尾的姓名
select name from personTable where name rlike "^周.*伦$";


image.png

2.4、范围查询、null(使用 personTable 表)

image.png

in (1, 3, 8)表示在一个非连续的范围内

// 查询 身高为为172、178 的姓名
select * from personTable where height in (172, 178);


image.png

  • not in 不 非连续 的范围之内


// 查询 不是 身高为为172、178 的姓名
select * from personTable where height not in (172, 178);
  • between ... and ...表示在一个连续的范围内


查询 身高在 在172到180之间的的信息
select * from personTable where height betwen 172 in 180;


image.png

  • not between ... and ... 表示 不在一个连续的范围内


查询 身高在 不 在172到180之间的的信息
select * from personTable where height not betwen 172 in 180;
或者 (使用上面的即可)
select * from personTable where not height betwen 172 in 180;
  • 空(null)判断: 判空is null
    理解一个概念: name = null  与 name = "" 的区别,前者是 name没有指向任何地址,后者是指向一个空的地址


// 查询身高为 空(null) 的信息
select * from personTable where height is null;

image.png


  • 判非空 is not null


// 查询身高 不为 空(null) 的信息
 select * from personTable where height is not null;


三、排序 order by 字段,使用 animalTable 表



image.png


  • 3.1、order by` 字段
  • asc小到大 排列,即 升序
  • desc大到小 排序,即 降序
  • 3.2、默认是 升序(第2句与第3句一个意思)


// 查询年龄在3到12岁之间的雄性动物(默认按照 id 排序 )
select * from animalTable where (age between 3 and 12) and gender = "雄";
查询年龄在3到12岁之间的雄性动物,按照年龄从小到大排序
select * from animalTable where (age between 3 and 12) and gender = "雄" order by age;
select * from animalTable where (age between 3 and 12) and gender = "雄" order by age asc;


image.png


3.3、order by 多个字段

查询年龄在3到12岁之间的雄性动物,按照年龄从小到大排序,如果年龄相同的情况下按照 id 从大到小排序( id 默认是从小到大的)

select * from animalTable where (age between 3 and 12) and gender = "雄" order by age asc,i


image.png


3.4、不需要 where 约束

按照年龄从小到大、id 从大到小的排序

select * from animalTable order by age asc,id desc;


image.png


四、聚合、分组



image.png


4.1、聚合


  • (1)、count 计算个数
    查询雄性有多少人


select count(*) as 雄性数量 from animalTable where gender = "雄";


image.png

  • 查询雌性有多少


select count(*) as 女性人数 from personTable where gender = "女";
  • (2)、最大值  max  与 最小值 min
    查询最大的年龄


select max(age) from animalTable;


image.png


  • (3)、求和  sum
    求年龄的和


select sum(age) from animalTable;
  • (4)、平均值  avg
    求年龄的平均值


select avg(age) from animalTable;
  • 还可以用  sum(age)/count(*) 来计算平均年龄


select sum(age)/count(*) from animalTable;
  • (5)、四舍五入 round(值 , 保留小数的位数)  小数
    计算所有动物的平均年龄,保留2位小数


select round(avg(age),2) from animalTable;


image.png


  • 计算雄性的平均年龄 保留2位小数


select round(avg(age),2) from animalTable where gender = "雄";
  • 4.2、分组group by


  • group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
  • group by可用于单个字段分组,也可用于多个字段分组
  • (1)、按照 性别 分组,查询所有的性别
    查询所有性别的动物组


select gender from animalTable group by gender;
  • (2)、计算每种 性别 中的人数


select gender,count(*) from animalTable group by gender;


image.png

(3)、计算雄性的数量(取出分组中 雄 性的组),根据条件取出分组中的某一个分组

select gender,count(*) from animalTable where gender = "雄" group by gender;


image.png


(4)、group by + group_concat()  显示分组中的 指定字段


显示分组中的 name

  • group_concat(字段名)可以作为一个输出字段来使用,
  • 表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

select gender,group_concat(name) from animalTable where gender="雄" group by gender;


image.png


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
495 158
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
777 7
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1245 152
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
924 156
|
7月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
521 156
|
7月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
7月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
7月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
7月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
7月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
627 0

推荐镜像

更多
下一篇
开通oss服务