表: Courses
(student, class)是该表的主键列。该表的每一行表示学生的名字和他们注册的班级。
问题:
编写一个SQL查询来报告 至少有5个学生 的所有类,以 任意顺序 返回结果表。
结果展示:
输入:
输出:
import java.sql.*;
public class test1{
public static void main(String[] args){
String url="jdbc:mysql://localhost:3306/student_course?&useSSL=false&serverTimezone=UTC";
Connection con = null ;
try{
String driver="com.mysql.jdbc.Driver";
String user="root";
String password="123456";
try {
//加载JDBC—MySQL数据库驱动程序
Class.forName(driver);
//建立连接
con = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
System.out.println(e.toString());
System.out.println("数据库驱动没有安装");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("连接失败");
}
System.out.println("courses表:");
String s1 = "select * from Courses";
Statement sql = con.createStatement();
ResultSet rs1 = sql.executeQuery(s1);//结果存放在ResultSet对象中
while(rs1.next()){
// 通过字段检索
System.out.println(rs1.getString("student")+"\t"+rs1.getString("class"));
}
System.out.println("");
//问题:编写一个SQL查询来报告至少有5个学生的所有类,以任意顺序返回结果表
//GROUP BY子句分组:细化聚集函数的作用对象
//使用了GROUP BY子句分组,则可以使用HAVING短语,按照指定条件筛选出相应的组
//只有满足HAVING短语指定条件的组才被输出
String s2 = "select class from courses group by class having count(student) >= 5;";
ResultSet rs2 = sql.executeQuery(s2);
if(rs2.next()) {
System.out.println("class");
System.out.println(rs2.getString("class"));
}
// 完成后关闭
sql.close();
con.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 关闭资源
try{
if(con!=null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
}