数据库作业16个题
现在有一教学管理系统,具体的关系模式如下:
Student (no, name, sex, birthday, class)
Teacher (no, name, sex, birthday, prof, depart)
Course (cno, cname, tno)
Score (no, cno, degree)
其中表中包含如下数据:
Course表:
Score表:
Student表:
Teacher表:
根据上面描述完成下面问题:
(注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)
DDL
- 写出上述表的建表语句。
student表
create table student(
no int primary key,
name varchar(16),
sex char(6),
birthday varchar(32),
class int );
Teacher表
create table Teacher(
no int primary key auto_increment,
name varchar(16),
sex char(6),
birthday varchar(211),
prof varchar(21),
depart varchar(122));
course表
create table course(
cno int primary key auto_increment,
cname varchar(23),
tno int ));
score表
create table score(
no int primary key,
cno int ,
degree double(8,2));
命令:
DML
2,给出相应的INSERT语句来完成题中给出数据的插入。
数据我放在我的C盘了
mysql> truncate table db1.teacher;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from teacher;
Empty set (0.01 sec)
mysql> LOAD DATA INFILE 'C:\db1_teacher.txt' INTO TABLE teacher;
Query OK, 15 rows affected (0.01 sec)
mysql> truncate table db1.score;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from teacher;
Empty set (0.01 sec)
mysql> LOAD DATA INFILE 'C:\db1_score.txt' INTO TABLE score;
Query OK, 15 rows affected (0.01 sec)
mysql> truncate table db1.student;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from student;
Empty set (0.01 sec)
mysql> LOAD DATA INFILE 'C:\db1_teacher.txt' INTO TABLE student;
Query OK, 15 rows affected (0.01 sec)
mysql> truncate table db1.course;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from course;
Empty set (0.01 sec)
mysql> LOAD DATA INFILE 'C:\db1_teacher.txt' INTO TABLE course;
Query OK, 15 rows affected (0.01 sec)
命令:
单表查询
3,以class降序输出student的所有记录(student表全部属性)
命令:
select * from student order by class desc;
4,列出教师所在的单位depart(不重复)。
命令:
Select distinct depart from teacher;
5,列出student表中所有记录的name、sex和class列
命令:
select name,sex,class from Student;
- 输出student中不姓王的同学的姓名。
命令:
Select name from student where name not like ‘王%’;
- 输出成绩为85或86或88或在60-80之间的记录(no,cno,degree)
命令:
select no,cno,degree from score where degree in(85,86,88) or degree between 60 and 80;
- 输出班级为95001或性别为‘女’ 的同学(student表全部属性)
命令:
select * from student where sex=’女’or class=95001;
- 以cno升序、degree降序输出score的所有记录。(score表全部属性)
命令:
select * from score order by degree desc,cno;
- 输出男生人数及这些男生分布在多少个班级中
命令:
select count(name),count(distinct class) from student where sex=’男’;
- 列出存在有85分以上成绩的课程编号。
命令:
select cno from score where degree>85;
- 输出95001班级的学生人数
命令:
select count(1) from student where class =95001;
- 输出‘3-105’号课程的平均分
命令:
select avg(degree) from Score where cno=’3-105’;
- 输出student中最大和最小的birthday日期值
命令:
select min(birthday),max(birthday) from student;
- 显示95001和95004班全体学生的全部个人信息(不包括选课)。(student表全部属性)
命令:
Select * from student where class in(95001,95004);
聚合查询
- 输出至少有5个同学选修的并以3开头的课程的课程号,课程平均分,课程最高分,课程最低分。
命令:
select cno,avg(degree),max(degree),min(degree)from Score inner Student on Score.no=Student.no group by cno having count(name)>5;
作业2:
import java.sql.*;
public class JDBCTest {
/**
* 1.使用DriverManager 进行加载驱动 Driver
* 2.通过驱动的加载拿到连接对象 Connection
* 3.通过connection对象获取到 Statement
* 4.使用Statement对象 进行sql查询或更新
* 5.查询执行完一定会拿到一个结果
* 6.关闭资源()
*
*/
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2,获取连接的对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","admin","DEFdef123!");
//3,获取statement对象
Statement st =conn.createStatement();
//4,进行查询,返回结果集
ResultSet rs =st.executeQuery("select * from tb4");
//5,对结果进行遍历
while(rs.next()){
System.out.println(rs.getString("user_name")+":"+rs.getInt("id")+":"+rs.getInt("pid")+":"+rs.getString("age"));
}
//6,关闭连接
rs.close();
st.close();
conn.close();
}
}
JDBC封装
封装
public class JDBCUtils {
private static String driver ="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/db1";
private static String username="admin";
private static String password ="DEFdef123!";
private static Connection conn;
private static Statement ts;
private static ResultSet rs;
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//封装连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
//封装关闭
public static void jdbcClose(ResultSet rs,Statement st ,Connection conn) throws SQLException {
rs.close();
if(rs!=null){
rs=null;
}
st.close();
if(st!=null){
st=null;
}
conn.close();
if(conn!=null){
conn=null;
}
}
}
查询封装
//查询封装
public static List select(String sql,User user) throws SQLException {
List<User> list =new ArrayList<>();
conn= getConnection();
ts =conn.createStatement();
ResultSet rs =ts.executeQuery(sql);
while(rs.next()){
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
list.add(user);
jdbcClose(rs,ts,conn);
return list;
}
查询封装后的测试:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws SQLException{
Scanner input =new Scanner(System.in);
System.out.println("请输入用户名");
String username =input.next();
System.out.println("请输入密码");
String password =input.next();
String sql ="select * from user";
User u =new User();
ArrayList l =(ArrayList) JDBCUtils.select(sql,u);
u=(User)l.get(0);
System.out.println(u);
if(username==u.getUsername()&&password==u.getPassword()){
System.out.println("登录成功");
}
else{
System.out.println("登录失败,请重新输入");
}
}
}
User实体类
public class User {
private String username;
private int id;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", id=" + id +
", password='" + password + '\'' +
'}';
}
}
增删改封装
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JDBCUtils {
private static String driver ="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/db1";
private static String username="admin";
private static String password ="DEFdef123!";
private static Connection conn;
private static Statement ts;
private static ResultSet rs;
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//封装连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
//增增删改封装
public static void update(String sql) throws SQLException {
conn= getConnection();
ts =conn.createStatement();
int bSet =ts.executeUpdate(sql);
System.out.println(bSet);
jdbcClose(ts,conn);
}
private static void jdbcClose(Statement ts, Connection conn) throws SQLException {
ts.close();
if(ts!=null){
ts=null;
}
conn.close();
if(conn!=null){
conn=null;
}
}
//封装关闭
public static void jdbcClose(ResultSet rs,Statement st ,Connection conn) throws SQLException {
rs.close();
if(rs!=null){
rs=null;
}
st.close();
if(st!=null){
st=null;
}
conn.close();
if(conn!=null){
conn=null;
}
}
}
增删改测试:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) throws SQLException{
String sql ="insert into tb4 values('wangxing4',6,7,'22')";
JDBCUtils.update(sql);
}
}
查询单元测试
@Test
public void select() throws SQLException {
String sql ="select * from tb4";
JDBCUtils.select(sql);
}
}
查询单元测试
import org.junit.Test;
import java.sql.SQLException;
import static org.junit.Assert.*;
public class TestTest {
@Test
public void update() throws SQLException {
String sql ="insert into tb4 values('wangxing5',8,9,'34')";
JDBCUtils.update(sql);
}
}
作业3:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JDBCUtils {
private static String driver ="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/db1";
private static String username="admin";
private static String password ="DEFdef123!";
private static Connection conn;
private static Statement ts;
private static ResultSet rs;
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//封装连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
//查询增删改
public static void update(String sql) throws SQLException {
conn= getConnection();
ts =conn.createStatement();
int bSet =ts.executeUpdate(sql);
System.out.println(bSet);
jdbcClose(ts,conn);
}
//查询封装
public static List select(String sql,User user) throws SQLException {
List<User> list =new ArrayList<>();
conn= getConnection();
ts =conn.createStatement();
ResultSet rs =ts.executeQuery(sql);
while(rs.next()){
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
list.add(user);
jdbcClose(rs,ts,conn);
return list;
}
private static void jdbcClose(Statement ts, Connection conn) throws SQLException {
ts.close();
if(ts!=null){
ts=null;
}
conn.close();
if(conn!=null){
conn=null;