用sql查询选English课程的学生名称

时间: 2024-03-06 17:50:06 浏览: 18
好的,以下是查询语句: ``` SELECT students.name AS student_name FROM students INNER JOIN student_course ON students.id = student_course.student_id INNER JOIN courses ON student_course.course_id = courses.id WHERE courses.name = 'English'; ``` 这个查询语句会从 students, student_course 和 courses 三个表中筛选出选了 English 课程的学生名称。首先使用 INNER JOIN 连接 students 和 student_course 表,以获取学生ID,然后使用 INNER JOIN 连接 student_course 和 courses 表,以获取课程信息。最后使用 WHERE 子句选择课程名称为 English 的记录,并用 student_name 别名作为结果返回。
相关问题

查询所有课程的成绩第2名到第3名的学生信息及该课程成绩 sql语句怎么写

假设有以下三张表: **student表** ``` id name age gender 1 Tom 18 M 2 Jack 19 M 3 Lily 18 F 4 Lucy 20 F 5 Bob 19 M ``` **course表** ``` id name 1 Math 2 English 3 Science ``` **score表** ``` id student_id course_id score 1 1 1 80 2 2 1 90 3 3 1 85 4 4 1 95 5 5 1 88 6 1 2 75 7 2 2 85 8 3 2 90 9 4 2 95 10 5 2 80 11 1 3 90 12 2 3 85 13 3 3 92 14 4 3 88 15 5 3 95 ``` 则查询所有课程的成绩第2名到第3名的学生信息及该课程成绩的 SQL 语句如下: ``` SELECT s.name, c.name, sc.score FROM ( SELECT course_id, student_id, score, DENSE_RANK() OVER(PARTITION BY course_id ORDER BY score DESC) AS rank FROM score ) AS sc INNER JOIN student AS s ON sc.student_id = s.id INNER JOIN course AS c ON sc.course_id = c.id WHERE sc.rank BETWEEN 2 AND 3 ORDER BY c.name, sc.score DESC; ``` 解释: 1. 内层子查询使用了窗口函数 `DENSE_RANK()`,按照课程分组,按照成绩从高到低排名,生成一个排名列 `rank`。 2. 外层查询将内层查询结果进行关联,得到学生姓名、课程名称和成绩,并筛选出排名在 2-3 之间的结果。 3. 最后按照课程名称和成绩从高到低排序。

怎么运用IntelliJ IDEA创建:1-建立学生和课程表35 要求:学生可以选择多个课程,每个课程可以被多个学生选择。 查询某个学生所选的所有课程列表 查询某个课程的学生列表 学生可以修改所选的课程

可以按照以下步骤在IntelliJ IDEA中创建一个Java项目,并使用JDBC连接MySQL数据库,实现学生和课程表的创建和操作: 1. 打开IntelliJ IDEA,点击"Create New Project",选择"Java"并点击"Next"。 2. 填写项目名称和项目路径,点击"Next"。 3. 在"Project SDK"中选择Java版本,点击"Next"。 4. 在"Additional Libraries and Frameworks"中选择"JDBC",点击"Next"。 5. 在"Project Template"中选择"Command Line App",点击"Next"。 6. 在"Command Line Options"中填写"run",点击"Finish"。 7. 在项目根目录下创建一个名为"lib"的文件夹,并将MySQL JDBC驱动程序(mysql-connector-java.jar)复制到该文件夹中。 8. 在项目根目录下创建一个名为"src"的文件夹,并在该文件夹下创建一个名为"main"的文件夹和一个名为"test"的文件夹。 9. 在"main"文件夹下创建一个名为"java"的文件夹,并在该文件夹下创建一个名为"com.example"的包。 10. 在"com.example"包下创建一个名为"Student"的类,用于表示学生信息,包括学生ID和姓名。在类中定义以下属性和方法: ```java public class Student { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` 11. 在"com.example"包下创建一个名为"Course"的类,用于表示课程信息,包括课程ID和名称。在类中定义以下属性和方法: ```java public class Course { private int id; private String name; public Course(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` 12. 在"com.example"包下创建一个名为"StudentCourse"的类,用于表示学生和课程之间的关系。在类中定义以下属性和方法: ```java public class StudentCourse { private int id; private int studentId; private int courseId; public StudentCourse(int id, int studentId, int courseId) { this.id = id; this.studentId = studentId; this.courseId = courseId; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; } public int getCourseId() { return courseId; } public void setCourseId(int courseId) { this.courseId = courseId; } } ``` 13. 在"com.example"包下创建一个名为"Database"的类,用于封装与MySQL数据库的连接和操作。在类中定义以下方法: ```java import java.sql.*; public class Database { private Connection conn; public Database(String url, String user, String password) throws SQLException { conn = DriverManager.getConnection(url, user, password); } public void createStudentTable() throws SQLException { String sql = "CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(255))"; try (Statement stmt = conn.createStatement()) { stmt.executeUpdate(sql); } } public void createCourseTable() throws SQLException { String sql = "CREATE TABLE course (id INT PRIMARY KEY, name VARCHAR(255))"; try (Statement stmt = conn.createStatement()) { stmt.executeUpdate(sql); } } public void createStudentCourseTable() throws SQLException { String sql = "CREATE TABLE student_course (id INT PRIMARY KEY, student_id INT, course_id INT, FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id))"; try (Statement stmt = conn.createStatement()) { stmt.executeUpdate(sql); } } public void addStudent(Student student) throws SQLException { String sql = "INSERT INTO student (id, name) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, student.getId()); pstmt.setString(2, student.getName()); pstmt.executeUpdate(); } } public void addCourse(Course course) throws SQLException { String sql = "INSERT INTO course (id, name) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, course.getId()); pstmt.setString(2, course.getName()); pstmt.executeUpdate(); } } public void addStudentCourse(StudentCourse studentCourse) throws SQLException { String sql = "INSERT INTO student_course (id, student_id, course_id) VALUES (?, ?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, studentCourse.getId()); pstmt.setInt(2, studentCourse.getStudentId()); pstmt.setInt(3, studentCourse.getCourseId()); pstmt.executeUpdate(); } } public void updateStudentCourse(int studentId, int oldCourseId, int newCourseId) throws SQLException { String sql = "UPDATE student_course SET course_id = ? WHERE student_id = ? AND course_id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, newCourseId); pstmt.setInt(2, studentId); pstmt.setInt(3, oldCourseId); pstmt.executeUpdate(); } } public ResultSet queryStudentCourses(int studentId) throws SQLException { String sql = "SELECT course.* FROM student_course INNER JOIN course ON student_course.course_id = course.id WHERE student_course.student_id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, studentId); return pstmt.executeQuery(); } } public ResultSet queryCourseStudents(int courseId) throws SQLException { String sql = "SELECT student.* FROM student_course INNER JOIN student ON student_course.student_id = student.id WHERE student_course.course_id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, courseId); return pstmt.executeQuery(); } } public void close() throws SQLException { conn.close(); } } ``` 14. 在"com.example"包下创建一个名为"Main"的类,用于测试数据库操作。在类中定义以下方法: ```java public class Main { public static void main(String[] args) { try { Database db = new Database("jdbc:mysql://localhost:3306/test", "root", "password"); db.createStudentTable(); db.createCourseTable(); db.createStudentCourseTable(); Student s1 = new Student(1, "Tom"); Student s2 = new Student(2, "Jerry"); db.addStudent(s1); db.addStudent(s2); Course c1 = new Course(1, "Math"); Course c2 = new Course(2, "English"); db.addCourse(c1); db.addCourse(c2); StudentCourse sc1 = new StudentCourse(1, 1, 1); StudentCourse sc2 = new StudentCourse(2, 1, 2); StudentCourse sc3 = new StudentCourse(3, 2, 1); db.addStudentCourse(sc1); db.addStudentCourse(sc2); db.addStudentCourse(sc3); ResultSet rs1 = db.queryStudentCourses(1); while (rs1.next()) { System.out.println(rs1.getString("name")); } ResultSet rs2 = db.queryCourseStudents(1); while (rs2.next()) { System.out.println(rs2.getString("name")); } db.updateStudentCourse(1, 1, 2); db.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 其中,"jdbc:mysql://localhost:3306/test"是MySQL数据库的连接字符串,"root"和"password"分别是数据库的用户名和密码。 以上就是使用IntelliJ IDEA创建学生和课程表的简单示例。通过这个示例,你可以了解到如何使用JDBC连接MySQL数据库,如何创建表、插入数据和查询数据等基本操作。

相关推荐

最新推荐

recommend-type

SQL语句实现查询SQL Server服务器名称和IP地址

主要介绍了SQL语句实现查询SQL Server服务器名称和IP地址,本文分别给出查询语句,需要的朋友可以参考下
recommend-type

在SQL查询中使用LIKE来代替IN查询的方法

在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN,直接在IN后面给出ID的集合或是在IN后面跟一个子查询。
recommend-type

SQL查询字段被包含语句

说到SQL的模糊查询,最先想到的,应该就是like关键字。当我们需要查询包含某个特定字段的数据时,往往会使用 ‘%关键字%’ 查询的方式。具体代码示例大家参考下本
recommend-type

mybatis 实现 SQL 查询拦截修改详解

主要介绍了mybatis 实现 SQL 查询拦截修改详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名

主要介绍了只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。