要求是
求出计算机系java考试成绩最高
的学生的学号、姓名和Java考试成绩。
select s.sno,s.sname,grade from student s
join sc on s.sno=sc.sno
join course c on c.cno=sc.cno where sdept='计算机系' and cname='java' order by grade DESC;
-- 为什么这里选最大值不能用top 我加了with ties 也不对是哪里语法错误了。
select max(grade) from sc order by grade desc;
-- 然后我想这是不是mysql top语法不能用,然后我就试试这个最后还是不行。但是用max就可以。这是为什么
mysql 不是使用top关键字来取数据 ,而是在最后加上 limit 1 那就是取第一条
select s.sno,s.sname,grade from student s
join sc on s.sno=sc.sno
join course c on c.cno=sc.cno where sdept='计算机系' and cname='java' order by grade DESC limit 1;
在第六步之前创建一个arraylist对象,并在while循环里将数据add()进去。
//6.处理结果
ArrayList<String> list = new ArrayList<>();
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
list.add(name+id);
}
System.out.println("连接成功");
System.out.println("连接成功");
Collections.shuffle(list);
System.out.println(list.get(0));
运行结果就不放了
总的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.ResourceBundle;
/**
* @author Pzr
* @create 2022/9/19 - 16:41
*/
public class JDBC {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "333");
//4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
Statement stat = conn.createStatement();
//5.执行sql语句,并且接收结果
String sql = "select * from test_1";
ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
//6.处理结果
ArrayList<String> list = new ArrayList<>();
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
list.add(name+id);
}
System.out.println("连接成功");
Collections.shuffle(list);
System.out.println(list.get(0));
//7.释放资源
conn.close();
stat.close();
conn.close();
}
}
注意:在将数据导入的那步可能出现缺少驱动的情况:
解决方法: https://www.zhihu.com/question/391063453/answer/2680013999
根据您的需求,您可以使用以下代码在MySQL中查询计算机系Java考试成绩最高的学生的学号、姓名和Java考试成绩:
SELECT s.id, s.name, c.java_score
FROM students s
JOIN computer_exam c ON s.id = c.id
WHERE c.major = '计算机系' AND c.java_score = (SELECT MAX(java_score) FROM computer_exam WHERE major = '计算机系');
其中,表students存储学生信息,包括学号id和姓名name等字段;表computer_exam存储计算机系学生的考试成绩信息,其中包括学号id、Java考试成绩java_score、专业major等字段。
以上SQL查询语句通过JOIN将两个表按照学号id进行匹配,然后通过WHERE子句筛选出计算机系学生以及Java考试成绩最高的学生,最后SELECT语句输出对应的学号、姓名和Java成绩。
关于您提到的MySQL的top语法,实际上MySQL没有类似于SQL Server的TOP语法。但是您可以使用LIMIT语法来限定查询结果集的大小,如LIMIT 1可只查询第一行记录。另外,您所提到的使用max函数来实现查询,可以看作是一种使用聚合函数来计算最大值的方法,在实际应用中也十分常见。
希望以上解答能够帮到您,如有任何问题请随时与我联系。