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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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
相关文章
|
6天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
4天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
15 2
|
10天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
22 2
|
11天前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
28 2
|
16天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
16天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
18天前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
16 1
|
25天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
9天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?