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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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.自连接查询。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
20 2
|
1天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
|
1天前
|
机器学习/深度学习 算法 算法框架/工具
【Python机器学习专栏】深度学习中的正则化与优化技术
【4月更文挑战第30天】本文探讨了深度学习中的正则化和优化技术,以提升模型的泛化能力和训练效率。正则化包括L1和L2正则化以及Dropout,防止过拟合。优化技术涵盖梯度下降法、动量法和Adam优化器,加速模型收敛。Python示例展示了如何在Keras中应用这些技术,如L2正则化、Dropout及Adam优化器。
|
1天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】数据特征选择与降维技术
【4月更文挑战第30天】本文探讨了Python中数据特征选择与降维技术在机器学习和数据分析中的应用。特征选择包括单变量选择、递归特征消除(RFE)、树模型的特征重要性和相关性分析,有助于去除冗余和无关特征。降维技术涵盖PCA、LDA以及非线性方法如KPCA和ISOMAP,用于在低维空间保留信息。这些技术能简化数据、提升模型性能及可解释性。
|
11天前
|
数据采集 机器学习/深度学习 数据挖掘
Python数据清洗与预处理面试题解析
【4月更文挑战第17天】本文介绍了Python数据清洗与预处理在面试中的常见问题,包括Pandas基础操作、异常值处理和特征工程。通过示例代码展示了数据读取、筛选、合并、分组统计、离群点检测、缺失值和重复值处理、特征缩放、编码、转换和降维。强调了易错点,如忽视数据质量检查、盲目处理数据、数据隐私保护、过度简化特征关系和忽视模型输入要求。掌握这些技能和策略将有助于在面试中脱颖而出。
25 8
|
12天前
|
机器学习/深度学习 TensorFlow 语音技术
《Python 语音转换简易速速上手小册》第7章 高级语音处理技术(2024 最新版)
《Python 语音转换简易速速上手小册》第7章 高级语音处理技术(2024 最新版)
50 0
|
20天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
61 10
|
1月前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
30 0
|
28天前
|
SQL 关系型数据库 MySQL
SQL Error (2013): Lost connection to MySQL server at 'waiting for initial communication packet', sys...
SQL Error (2013): Lost connection to MySQL server at 'waiting for initial communication packet', sys...
|
20天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
91 6