Oracle数据库班级管理系统SQL语句及Java程序示例

本文将提供一个简单的Oracle数据库班级管理系统的示例,包括创建表结构、SQL语句查询、更新、删除操作以及Java程序连接数据库并查询学生信息。

1. 创建表结构

create table classes(
    cid number primary key,  --班级ID
    cname varchar2(11),   --班级名称
    copendate date     -- 开班日期
);

create table subjects(
    subid number primary key, --学科ID
    subname varchar2(20),  --学科名称
    subdesc varchar2(20)   --学科描述
);


create table students(
    sid number primary key,   --学生ID
    sname varchar2(20),   --学生名称
    ssex varchar2(2),  --学生性别 
    sdate date,   --出生日期
    cid number   --班级ID
);


create table scores(
    subid number,    --学科ID
    sid number,      --学生ID
    score number     --学生成绩
);

2. SQL语句示例

2.1 查询每个班级年龄最大、最小的学生信息

-- 查询每个班级年龄最大、最小的学生信息
-- 使用子查询分别查找每个班级年龄最大和最小的学生信息
SELECT 
    c.cname,
    MAX(s.sname) AS 最大学生姓名,
    MIN(s.sname) AS 最小学生姓名
FROM
    classes c
JOIN
    students s ON c.cid = s.cid
GROUP BY
    c.cname;

2.2 查询每个科目、不同班级的学生的平均成绩及每个科目的平均成绩

-- 查询每个科目、不同班级的学生的平均成绩及每个科目的平均成绩
SELECT 
    s.subname, 
    c.cname, 
    AVG(sc.score) AS 班级平均成绩, 
    (SELECT AVG(score) FROM scores WHERE subid = s.subid) AS 科目平均成绩
FROM 
    subjects s 
JOIN 
    scores sc ON s.subid = sc.subid 
JOIN 
    students st ON sc.sid = st.sid 
JOIN 
    classes c ON st.cid = c.cid 
GROUP BY 
    s.subname, c.cname
ORDER BY 
    s.subname, c.cname;

2.3 删除年龄小于15岁的学生信息

-- 删除年龄小于15岁的学生信息
DELETE FROM students WHERE sdate > ADD_MONTHS(SYSDATE, -180);

2.4 查询班级人数最多的班级信息及其人数

-- 查询班级人数最多的班级信息及其人数,如果有多个班级人数相同,则显示先开班的班级信息
SELECT 
    c.cname, 
    COUNT(s.sid) AS 人数 
FROM 
    classes c 
JOIN 
    students s ON c.cid = s.cid 
GROUP BY 
    c.cname 
HAVING 
    COUNT(s.sid) = (SELECT MAX(COUNT(sid)) FROM students GROUP BY cid) 
ORDER BY 
    c.copendate DESC
FETCH FIRST 1 ROW ONLY;

2.5 查询考试成绩比该科目平均成绩高的所有学生基本信息

-- 查询考试成绩比该科目平均成绩高的所有学生基本信息
SELECT 
    st.sname, 
    st.ssex, 
    st.sdate, 
    c.cname, 
    s.subname, 
    sc.score 
FROM 
    students st 
JOIN 
    classes c ON st.cid = c.cid 
JOIN 
    scores sc ON st.sid = sc.sid 
JOIN 
    subjects s ON sc.subid = s.subid 
WHERE 
    sc.score > (SELECT AVG(score) FROM scores WHERE subid = sc.subid);

2.6 使用in子句查询没有参与考试学生的基本信息

-- 使用in子句查询没有参与考试学生的基本信息
SELECT * FROM students WHERE sid NOT IN (SELECT sid FROM scores);

3. Java程序连接数据库并查询所有学生信息

import java.sql.*;

public class StudentQuery {
    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "user", "password");
             Statement stmt = conn.createStatement()) {
            String sql = "SELECT * FROM students";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                int sid = rs.getInt("sid");
                String sname = rs.getString("sname");
                String ssex = rs.getString("ssex");
                Date sdate = rs.getDate("sdate");
                int cid = rs.getInt("cid");
                System.out.println("学生ID: " + sid + ", 学生姓名: " + sname + ", 性别: " + ssex + ", 出生日期: " + sdate + ", 班级ID: " + cid);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

注意:

  • 请将代码中的数据库连接信息("jdbc:oracle:thin:@localhost:1521:orcl", "user", "password")替换成你的实际数据库连接信息。
  • 以上示例仅供参考,你可以根据自己的需要进行修改和扩展。

总结

本文通过创建表结构、编写SQL语句和Java程序,展示了一个简单的Oracle数据库班级管理系统的示例。希望能够帮助你更好地理解Oracle数据库的基本操作和应用。

Oracle数据库班级管理系统SQL语句及Java程序示例

原文地址: https://www.cveoy.top/t/topic/qAfq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录