python技术面试题(七)--SQL语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: python技术面试题(七)--SQL语句

我们后面查询用到的表:

1. mysql> select * from t_score;
2. +------+--------------+-----------+--------+
3. | c_id | c_student_id | c_english | c_math |
4. +------+--------------+-----------+--------+
5. |    1 |            1 |      60.5 |     99 |
6. |    2 |            2 |      65.5 |     60 |
7. |    3 |            3 |      70.5 |     88 |
8. |    4 |            4 |      60.5 |     77 |
9. |    5 |            5 |      60.5 |     89 |
10. |    6 |            6 |        90 |     93 |
11. |    7 |            7 |        80 |     99 |
12. |    8 |            8 |        88 |     99 |
13. |    9 |            9 |        77 |     60 |
14. |   10 |           10 |        75 |     86 |
15. |   11 |           11 |        60 |     60 |
16. |   12 |           12 |        88 |     99 |
17. |   13 |           13 |        77 |     59 |
18. |   14 |           14 |      NULL |     59 |
19. |   15 |           15 |        60 |   NULL |
20. +------+--------------+-----------+--------+

1.单表查询

1.mysql中的分页查询。

语法:

select * from 表名 limit (page-1)*count,count;

page指的是页码,count指的是每页显示的条数。

# 每页3条数据,查询第三页的数据,(3-1)*3=6.
mysql> select * from t_score limit 6,3;
+------+--------------+-----------+--------+
| c_id | c_student_id | c_english | c_math |
+------+--------------+-----------+--------+
|    7 |            7 |        80 |     99 |
|    8 |            8 |        88 |     99 |
|    9 |            9 |        77 |     60 |
+------+--------------+-----------+--------+

2.求和:

# 求数学学科的总成绩
mysql> select sum(c_math) from t_score;
+-------------+
| sum(c_math) |
+-------------+
|        1127 |
+-------------+

3.求平均:

# 求数学学科的平均成绩
mysql> select avg(c_math) from t_score;
+-------------+
| avg(c_math) |
+-------------+
|        80.5 |
+-------------+

4.求最大最小值:

# 找到数学最高分
mysql> select max(c_math) from t_score;
+-------------+
| max(c_math) |
+-------------+
|          99 |
+-------------+
# 找到数学最低分
mysql> select min(c_math) from t_score;
+-------------+
| min(c_math) |
+-------------+
|          59 |
+-------------+

5.统计记录总数:

# 统计参加数学考试的人有多少
mysql> select count(*) from t_score;
+----------+
| count(*) |
+----------+
|       15 |
+----------+

6.分组:

group_by后面的字段名要和select后面的字段名相同,否则会报错。

# 从成绩表中取出数学成绩进行分组
mysql> select c_math from t_score group by c_math;
+--------+
| c_math |
+--------+
|   NULL |
|     59 |
|     60 |
|     77 |
|     86 |
|     88 |
|     89 |
|     93 |
|     99 |
+--------+

7.根据分组结果,使用group_concat()来获取分组中指定字段的集合

# 根据数据成绩进行分组,获取每个分数中学生的编号
mysql> select c_math,group_concat(c_student_id) from t_score group by c_math;
+--------+----------------------------+
| c_math | group_concat(c_student_id) |
+--------+----------------------------+
|   NULL | 15                         |
|     59 | 13,14                      |
|     60 | 2,9,11                     |
|     77 | 4                          |
|     86 | 10                         |
|     88 | 3                          |
|     89 | 5                          |
|     93 | 6                          |
|     99 | 1,7,8,12                   |
+--------+----------------------------+

8.分组和聚合函数的使用

# 根据性别进行分组,求出每组同学的最大年龄、最小年龄、年龄总和、平均年龄、人数
mysql> select c_gender,max(c_age),min(c_age),sum(c_age),avg(c_age),count(*) from t_student group by c_gender;
+----------+------------+------------+------------+------------+----------+
| c_gender | max(c_age) | min(c_age) | sum(c_age) | avg(c_age) | count(*) |
+----------+------------+------------+------------+------------+----------+
| 男       |         99 |         15 |       1084 |    47.1304 |       26 |
| 女       |         88 |         11 |        239 |    39.8333 |        7 |
+----------+------------+------------+------------+------------+----------+

9.having条件语句的使用。

# 从学生表中以性别进行分组,然后选出女生分组,并展示小组中所有的名字
mysql> select c_gender,group_concat(c_name) from t_student group by c_gender having c_gender='女';
+----------+-----------------------------------------------------------+
| c_gender | group_concat(c_name)                               
        |
+----------+-----------------------------------------------------------+
| 女       | 小龙女,白骨精,扈三娘,孙二娘,赵敏,嫦娥,孙                         |
+----------+-----------------------------------------------------------+

2.多表查询

# 学生表中保存了学生的信息和所在班级的ID,班级表中保存了班级的信息。 查询学生姓名和对应的班级
mysql> select t_student.c_name,t_class.c_name from t_student,t_class where t_student.c_class_id=t_class.c_id;
+-----------+-------------------------------------+
| c_name    | c_name




|
+-----------+-------------------------------------+
| 孙德龙    | 软件工程18级一班                        |
| 塔大      | 软件工程18级二班                        |
| 宋江      | 计算机科学与技术18级一班                 |
| 武松      | 计算机科学与技术18级二班                 |
| 孙二娘    | 网络工程18级一班                        |
| 扈三娘    | 网络工程18级二班                        |
| 鲁智深    | 软件工程18级一班                        |
| 林冲      | 软件工程18级二班                       |
| 阮小七    | 计算机科学与技术18级一班                 |
| 阮小五    | 计算机科学与技术18级二班                 |
| 阮小二    | 网络工程18级一班                       |
| 白骨精    | 网络工程18级二班                       |
| 孙悟空    | 软件工程18级一班                       |
| 猪八戒    | 软件工程18级二班                       |
| 沙和尚    | 计算机科学与技术18级一班                 |
| 唐三奘    | 计算机科学与技术18级二班                 |
| 哪吒      | 网络工程18级一班                       |
| 嫦娥      | 网络工程18级二班                       |
| 杨过      | 软件工程18级一班                       |
| 郭靖      | 软件工程18级二班                       |
| 洪七公    | 计算机科学与技术18级一班                 |
| 欧阳锋    | 计算机科学与技术18级二班                 |
| 黄药师    | 网络工程18级一班                       |
| 小龙女    | 网络工程18级二班                       |
| 孙%       | 软件工程18级一班                      |
| 张无忌    | 软件工程18级二班                       |
| 张翠山    | 计算机科学与技术18级一班                 |
| 张三丰    | 计算机科学与技术18级二班                 |
| 宋青书    | 网络工程18级一班                        |
| 赵敏      | 网络工程18级二班                       |
| 孙        | 计算机科学与技术18级一班                 |
| 孙子      | 计算机科学与技术18级一班                 |
| 孙        | 网络工程18级一班                       |
+-----------+-------------------------------------+

1.内连接查询

语法:

select * from 表1 inner join 表2 on 表1.列 运算符 表2.列

连接时必须指定连接条件,用on指定。如果无条件,那么会出现笛卡尔积。

#  查询学生姓名和对应的班级
mysql> select ts.c_name,tc.c_name from t_student as ts inner join t_class tc on ts.c_class_id=tc.c_id;
.....结果同上一个结果.......

上面的as代表的是为表起别名,也可以不写空格隔开。

2.左连接查询

语法:

select * from 表1 left join 表2 on 表1.列 运算符 表2.列

查询的结果为根据左表中的数据进行连接,如果右表中没有满足条件的记录,则连接空值。

mysql> select ts.c_name,tc.c_name from t_student as ts left join t_class tc on ts.c_class_id=tc.c_id;
+--------------+-------------------------------------+
| c_name       | c_name                          
    |
+--------------+-------------------------------------+
| 孙德龙       | 软件工程18级一班                        |
| 塔大         | 软件工程18级二班                       |
| 宋江         | 计算机科学与技术18级一班                |
| 武松         | 计算机科学与技术18级二班                |
| 孙二娘       | 网络工程18级一班                       |
| 扈三娘       | 网络工程18级二班                       |
| 鲁智深       | 软件工程18级一班                       |
| 林冲         | 软件工程18级二班                      |
| 阮小七       | 计算机科学与技术18级一班                |
| 阮小五       | 计算机科学与技术18级二班                |
| 阮小二       | 网络工程18级一班                       |
| 白骨精       | 网络工程18级二班                       |
| 孙悟空       | 软件工程18级一班                       |
| 猪八戒       | 软件工程18级二班                       |
| 沙和尚       | 计算机科学与技术18级一班                 |
| 唐三奘       | 计算机科学与技术18级二班                 |
| 哪吒         | 网络工程18级一班                       |
| 嫦娥         | 网络工程18级二班                       |
| 杨过         | 软件工程18级一班                       |
| 郭靖         | 软件工程18级二班                       |
| 洪七公       | 计算机科学与技术18级一班                 |
| 欧阳锋       | 计算机科学与技术18级二班                 |
| 黄药师       | 网络工程18级一班                       |
| 小龙女       | 网络工程18级二班                        |
| 孙%          | 软件工程18级一班                       |
| 张无忌       | 软件工程18级二班                        |
| 张翠山       | 计算机科学与技术18级一班                 |
| 张三丰       | 计算机科学与技术18级二班                 |
| 宋青书       | 网络工程18级一班                        |
| 赵敏         | 网络工程18级二班                       |
| 孙           | 计算机科学与技术18级一班                 |
| 孙子         | 计算机科学与技术18级一班                 |
| 孙           | 网络工程18级一班                       |
| 小闫笔记     | NULL                         
|
+--------------+-------------------------------------+

3.子查询

语法:

select * from 表1 where 条件 运算符 (select查询)

子查询是单独可以执行的一条SQL语句,它作为主查询的条件或者数据源嵌套在主查询中。

3.1标量子查询(子查询返回的结果是一个数据(一行一列))

# 查询班级中年龄大于平均年龄的学生信息
mysql> select * from t_student where c_age > (select avg(c_age) from t_student);
# 因为数据太多,为了展示效果,我们查询指定的一些字段
mysql> select c_id,c_name,c_gender,c_address from t_student where c_age > (select avg(c_age) from t_student);
+------+-----------+----------+-----------------------------+
| c_id | c_name    | c_gender | c_address                   |
+------+-----------+----------+-----------------------------+
|    7 | 鲁智深    | 男       | 北京市西城区西直门          |
|   15 | 沙和尚    | 男       | 北京市西城区西直门          |
|   16 | 唐三奘    | 男       | 北京市西城区西直门          |
|   18 | 嫦娥      | 女       | 北京市昌平霍营              |
|   19 | 杨过      | 男       | 北京市西城区西直门          |
|   20 | 郭靖      | 男       | 北京市西城区西直门          |
|   21 | 洪七公    | 男       | 北京市西城区西直门          |
|   22 | 欧阳锋    | 男       | 北京市西城区西直门          |
|   25 | 孙%       | 男       | 北京市西城区西直门          |
|   29 | 宋青书    | 男       | 北京市西城区西直门          |
|   30 | 赵敏      | 女       | 北京市昌平霍营              |
+------+-----------+----------+-----------------------------+

3.2列级子查询(子查询返回的结果是一列(一列多行))

# 主查询 where 条件 in (列子查询)
# 查询出所有学生所在班级的班级名称
mysql> select c_name from t_class where c_id in (select c_class_id from t_student);
+-------------------------------------+
| c_name                              
|
+-------------------------------------+
| 软件工程18级一班                    |
| 软件工程18级二班                    |
| 计算机科学与技术18级一班            |
| 计算机科学与技术18级二班            |
| 网络工程18级一班                    |
| 网络工程18级二班                    |
+-------------------------------------+

3.3行级子查询(子查询返回的结果是一行(一行多列))

# 主查询 where (字段1,2,...) = (行子查询) 
# 查询班级年龄最大,所在班号最小的学生
mysql> select c_id,c_name,c_gender,c_address from t_student where(c_age,c_class_id) = (select max(c_age),min(c_class_id) from t_student);
+------+-----------+----------+-----------------------------+
| c_id | c_name    | c_gender | c_address                   |
+------+-----------+----------+-----------------------------+
|    7 | 鲁智深     | 男        | 北京市西城区西直门             |
|   25 | 孙%       | 男        | 北京市西城区西直门             |
+------+-----------+----------+-----------------------------+

4.自连接查询。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
103 66
|
1天前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
103 64
|
8天前
|
算法 数据挖掘 Python
Python中的拟合技术:揭示数据背后的模式
Python中的拟合技术:揭示数据背后的模式
18 0
Python中的拟合技术:揭示数据背后的模式
|
9天前
|
前端开发 JavaScript 安全
深入理解Python Web开发中的前后端分离与WebSocket实时通信技术
在现代Web开发中,前后端分离已成为主流架构,通过解耦前端(用户界面)与后端(服务逻辑),提升了开发效率和团队协作。前端使用Vue.js、React等框架与后端通过HTTP/HTTPS通信,而WebSocket则实现了低延迟的全双工实时通信。本文结合Python框架如Flask和Django,探讨了前后端分离与WebSocket的最佳实践,包括明确接口规范、安全性考虑、性能优化及错误处理等方面,助力构建高效、实时且安全的Web应用。
26 2
|
8天前
|
数据处理 Python
Python中的插值技术:让数据说话
Python中的插值技术:让数据说话
20 0
|
9天前
|
SQL 数据处理 数据库
python 提取出sql语句中where的值
python 提取出sql语句中where的值
19 0
|
5月前
|
NoSQL 数据库 Redis
万字长文Python面试题,找工作就靠这了
万字长文Python面试题,找工作就靠这了
982 0
|
5月前
|
NoSQL 数据库 Redis
万字长文Python面试题,年后找工作就靠这了
万字长文Python面试题,年后找工作就靠这了
237 0
|
机器学习/深度学习 JSON API
万字长文Python面试题,年后找工作就靠这了(二)
万字长文Python面试题,年后找工作就靠这了(二)
万字长文Python面试题,年后找工作就靠这了(二)
|
SQL 存储 NoSQL
万字长文Python面试题,年后找工作就靠这了(三)
万字长文Python面试题,年后找工作就靠这了(三)
下一篇
无影云桌面