mysql查询学生的学号、姓名、专业、课程和课程对应成绩(多表连接)
时间: 2023-12-20 12:05:40 浏览: 144
好的,您的问题是:如何使用多表连接查询学生的学号、姓名、专业、课程和课程对应成绩?
这个问题可以用以下 SQL 语句来实现:
```
SELECT s.student_id, s.student_name, m.major_name, c.course_name, sc.score
FROM student AS s
JOIN major AS m ON s.major_id = m.major_id
JOIN score AS sc ON sc.student_id = s.student_id
JOIN course AS c ON c.course_id = sc.course_id;
```
以上语句中,我们使用了 `JOIN` 语句来连接四个表:`student` 表、`major` 表、`score` 表和 `course` 表。其中,`student` 表和 `major` 表关联的字段是 `major_id`,`score` 表和 `student` 表关联的字段是 `student_id`,`score` 表和 `course` 表关联的字段是 `course_id`。最终查询出学号、姓名、专业、课程和对应成绩等信息。
希望这个回答能解决您的问题。若有任何疑问,可以随时向我提出。
相关问题
mysql查询学号为10002学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
在MySQL中,你可以使用如下的SQL查询语句来获取学号为10002的学生的所有成绩,包括学号、姓名、所在系别、课程号、课程名及成绩:
```sql
SELECT students.id AS 学号, students.name AS 姓名, departments.department_name AS 所在系别, courses.course_code AS 课程号, courses.course_name AS 课程名, scores.score AS 成绩
FROM students
JOIN student_departments ON students.id = student_departments.student_id
JOIN departments ON student_departments.department_id = departments.id
JOIN courses ON scores.course_id = courses.id
WHERE students.id = 10002;
```
这个查询假设你有以下几个表:
1. `students` 表存储学生信息,包括`id`(学号)、`name`(姓名)等;
2. `student_departments` 表连接学生和系别,通过`student_id`和`department_id`关联;
3. `departments` 表存储系别信息;
4. `courses` 表存储课程信息,包括`course_code`(课程号)和`course_name`(课程名);
5. `scores` 表存储学生的成绩,通过`student_id`和`course_id`关联。
eclipse连接mysql输入一个学号,如果该学号信息存在,则显示出该学号对应的学生的基本信息, 包括学号,姓名,性别,年龄等,以及该学生所选修的课程名称,成绩;若没有该学号 对应的信息存在,则输出简单的提示信息。
首先,需要将 Java 项目中的 MySQL JDBC 驱动包导入到 Eclipse 中。
然后,可以使用以下代码实现输入学号查询学生信息和所选课程成绩:
```java
import java.sql.*;
public class StudentInfo {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/your_database_name";
static final String USER = "your_username";
static final String PASS = "your_password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 注册 JDBC 驱动
Class.forName(JDBC_DRIVER);
// 打开连接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 输入学号
String studentID = "10001"; // 这里可以根据实际需求改变
// 执行查询
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql = "SELECT student.id, student.name, student.gender, student.age, course.name, score.score " +
"FROM student " +
"LEFT JOIN score ON student.id = score.student_id " +
"LEFT JOIN course ON score.course_id = course.id " +
"WHERE student.id = '" + studentID + "'";
ResultSet rs = stmt.executeQuery(sql);
// 处理查询结果
if (rs.next()) {
// 学生基本信息
String id = rs.getString("student.id");
String name = rs.getString("student.name");
String gender = rs.getString("student.gender");
int age = rs.getInt("student.age");
System.out.println("Student ID: " + id);
System.out.println("Student Name: " + name);
System.out.println("Student Gender: " + gender);
System.out.println("Student Age: " + age);
// 所选课程成绩
String courseName = rs.getString("course.name");
int score = rs.getInt("score.score");
System.out.println("Course Name: " + courseName);
System.out.println("Score: " + score);
} else {
System.out.println("No data found for student ID: " + studentID);
}
// 关闭资源
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// 处理 JDBC 错误
se.printStackTrace();
} catch (Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
} finally {
// 关闭资源
try {
if (stmt != null) stmt.close();
} catch (SQLException se2) {
} // 什么也不做
try {
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
```
需要注意的是,上述代码中的 `your_database_name`、`your_username` 和 `your_password` 需要根据实际情况进行修改。此外,还需要根据实际的数据库表结构和字段名进行调整。
阅读全文