一道面试题引发的数据库SQL语句实践(含行列转换)

本文介绍了如何通过SQL查询找出数据库中每门课程成绩都大于等于80分的学生,提供了三种不同的解决方案,包括行列转换、group by与聚合函数的结合使用,以及排除有任一课程低于80分的学生。讨论了不同方案的执行效率和适用场景,并给出了实际的数据库脚本和查询结果截图。
摘要由CSDN通过智能技术生成

问题场景

最近有个朋友去面试,问了我一道面试题。题目如下,在形如下面的数据库表score中,找出每门成绩(grade)都大于等于80分的学生姓名。

----------------------------------------
name      | course  | grade
----------------------------------------
zhangsan  | Java   | 70
----------------------------------------
zhangsan  | C++    | 80
----------------------------------------
lisi     | Java   | 90
----------------------------------------
lisi     | C++    | 60
----------------------------------------
wangwu   | Java   | 85
----------------------------------------
wangwu   | C++   | 95
----------------------------------------
 
期望结果
----------------------------------------
name
----------------------------------------
wangwu
----------------------------------------
 
本文以MySQL数据库为例,以三种方案一步一步实现面试题要求。
 
方案一
1、寻求行列转换,也称矩阵转置,将多列数据转为一行,这一步最关键,实现SQL语句如下:
下面的sql是以score为主表来构建多列,构造的从表为每门课程的数据表,通过主表的 name 字段来关联从表的 name 字段。
select s.`name` as name,
(select grade from score where name = s.`name` and course = 'Java')as 
好的,以下是一些常见的数据库 SQL 面试题: 1. 什么是 SQL? SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。它允许用户从数据库中检索、插入、删除和更新数据。 2. 什么是关系型数据库? 关系型数据库是一种使用表和行来存储和组织数据数据库。它们使用 SQL 语句来查询和操作数据,并使用关系(例如主键和外键)来连接不同的表。 3. 什么是 SELECT 语句? SELECT 语句用于从数据库中检索数据。它可以选择特定的列、过滤数据、排序数据等等。 4. 如何选择所有列? 使用以下 SQL 语句选择所有列: ``` SELECT * FROM table_name; ``` 5. 如何选择特定的列? 使用以下 SQL 语句选择特定的列: ``` SELECT column1, column2, ... FROM table_name; ``` 6. 如何过滤数据? 使用 WHERE 子句过滤数据。以下是一个示例: ``` SELECT * FROM table_name WHERE column1 = 'value'; ``` 这将选择 column1 的值等于 'value' 的所有行。 7. 如何对数据进行排序? 使用 ORDER BY 子句对数据进行排序。以下是一个示例: ``` SELECT * FROM table_name ORDER BY column1 ASC; ``` 这将按升序对 column1 进行排序。 8. 什么是 INNER JOIN? INNER JOIN 是一种将两个表连接在一起的方法。它只选择两个表之间共有的行。 9. 如何使用 INNER JOIN? 以下是一个使用 INNER JOIN 的示例: ``` SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column = table2.column; ``` 这将选择 table1 和 table2 中具有相同值的行。 10. 什么是外键? 外键是一个表中的列,它引用了另一个表中的主键。它用于在两个表之间建立关系。 以上是一些常见的数据库 SQL 面试题,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值