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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
28天前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
221 11
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
19天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
134 1
|
2月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
2月前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
2月前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
2月前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
78 9
|
2月前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
151 5
|
3月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
4月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

热门文章

最新文章

推荐镜像

更多