查询所有选修了‘语文’这门课的学生信息
时间: 2023-12-18 15:17:19 浏览: 28
好的,这个问题需要查询学生选课信息表和学生信息表。假设选课信息表为 course_selection,学生信息表为 student_info,语文课程的课程号为 'CHN101',那么可以使用如下 SQL 语句查询所有选修了语文课的学生信息:
```
SELECT *
FROM student_info
WHERE student_info.id IN (
SELECT course_selection.student_id
FROM course_selection
WHERE course_selection.course_id = 'CHN101'
)
```
注意,这个 SQL 语句只是一个示例,实际的 SQL 语句需要根据具体的数据库结构进行调整。
相关问题
Spark求每名同学的选修的课程门数
假设有如下的选课表格:
| 学生姓名 | 选修课程1 | 选修课程2 | 选修课程3 |
| -------- | --------- | --------- | --------- |
| 张三 | 语文 | 数学 | 英语 |
| 李四 | 历史 | 地理 | 生物 |
| 王五 | 英语 | 物理 | 化学 |
可以使用 Spark SQL 来进行数据分析。首先,需要将上述表格转化成 Spark DataFrame 的格式,代码如下:
```
from pyspark.sql import SparkSession
# 初始化 SparkSession
spark = SparkSession.builder.appName("CourseCount").getOrCreate()
# 定义选课表格
data = [("张三", "语文", "数学", "英语"),
("李四", "历史", "地理", "生物"),
("王五", "英语", "物理", "化学")]
# 创建 DataFrame
df = spark.createDataFrame(data, ["Name", "Course1", "Course2", "Course3"])
# 展示 DataFrame
df.show()
```
接着,可以使用 Spark SQL 的 `selectExpr` 函数和 `case when` 语句来计算每名同学的选修课程门数,代码如下:
```
from pyspark.sql.functions import expr
# 使用 selectExpr 函数和 case when 语句计算每名同学的选修课程门数
df.selectExpr("Name",
"case when Course1 is not null then 1 else 0 end + \
case when Course2 is not null then 1 else 0 end + \
case when Course3 is not null then 1 else 0 end as CourseCount") \
.show()
```
输出结果如下:
```
+----+-----------+
|Name|CourseCount|
+----+-----------+
|张三 | 3|
|李四 | 3|
|王五 | 3|
+----+-----------+
```
MySQL实现查看课程(不包括001这门课)都及格的学生
假设我们有以下表结构:
学生表(student):
| id | name | age |
| ---- | ---- | --- |
| 1 | 张三 | 20 |
| 2 | 李四 | 19 |
| 3 | 王五 | 21 |
课程表(course):
| id | name |
| ---- | ----- |
| 001 | 语文 |
| 002 | 数学 |
| 003 | 英语 |
成绩表(score):
| id | student_id | course_id | score |
| ---- | ----------| ---------| ----- |
| 1 | 1 | 002 | 80 |
| 2 | 1 | 003 | 90 |
| 3 | 2 | 002 | 70 |
| 4 | 2 | 003 | 85 |
| 5 | 3 | 002 | 95 |
| 6 | 3 | 003 | 92 |
我们可以使用如下的SQL语句查询出所有及格的学生(不包括选修001课程):
```
SELECT s.id, s.name, s.age
FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN course c ON sc.course_id = c.id
WHERE c.name != '001' AND sc.score >= 60
GROUP BY s.id, s.name, s.age
HAVING COUNT(*) = (SELECT COUNT(*) FROM course WHERE name != '001');
```
这个SQL语句的思路是先使用INNER JOIN关联三张表,筛选出选修了非001课程且成绩及格的学生。然后使用GROUP BY将结果按照学生id、姓名、年龄分组,再使用HAVING筛选出选修了所有非001课程的学生。最终输出学生的id、姓名、年龄信息。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)