数据库操作(增删改查)

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
sql代码:
建数据库和表:

Create database sc_db;

use sc_db;


create table student
(sno char(8),
sname char(8),
ssex char(2),
sage int,
sdept char(10));

create table course
(cno char(3) ,
cname char(12),
cpno char(3),
ccredit int);

create table sc
(sno char(8),
cno char(3),
grade int);

插入数据:

use sc_db;

insert student
values('95001','李勇','男',20,'CS');

insert student
values('95002','刘晨','女',19,'IS');

insert student
values('95003','王敏','女',18,'MA');

insert student
values('95004','张立','男',19,'IS');

insert student
values('95005','欧阳小峰','男',19,'RE');

insert course
values('1','数据库','5',4);

insert course
values('2','数学','5',4);

insert course
values('3','信息系统','1',4);

insert course
values('4','操作系统','6',3);

insert course
values('5','数据结构','7',4);

insert course
values('6','数据处理',NULL,2);

insert course
values('7','PASCAL语言','6',3);

insert sc
values('95001','1',92);

insert sc
values('95001','2',85);

insert sc
values('95001','3',88);

insert sc
values('95002','2',90);

insert sc
values('95002','3',82);

insert sc(sno,cno)
values('95003','3',70);

insert sc(sno,cno)
values('95004','4',89);

1.数据查询

  1. 列别名
select sname,2014-sage birthday
from student
  1. 增加常数列
select sname,'Year of Birth:',2014-sage
from student
  1. 去重
select distinct sno
from sc

/*默认是ALL*/
select sno
from sc
/*等价于*/
select all sno
from sc
  1. where子句条件查询
查询条件谓词举例
比较=, >, <, >=, <=, !=, <>, !>, !<
范围BETWEEN AND, NOT BETWEEN ANDselect sname,sdept,sage from student where sage between 20 and 23
集合IN, NOT INselect sname,sdept,sage from student where sdept IN (‘CS’,‘MA’,‘IS’)
字符匹配LIKE, NOT LIKE; _(下划线)代表单个字符,%(百分号)代表任意长度,长度可以为0;当查询结果中含有通配符时,需要使用ESCAPE进行转义1.select sname,sdept,sage from student where sname LIKE ‘刘%’       2.select cno,ccredit from course where cname LIKE ‘DB\_Design’ ESCAPE '\'
空值IS NULL, IS NOT NULL
逻辑运算AND, OR, NOT
  1. 聚集函数
聚集函数含义举例
COUNT(*)统计元组个数select count(*) form student
COUNT([DISTINCT|ALL] <列名>)某列中取值的个数select count(sno) from student
SUM([DISTINCT|ALL] <列名>)计算一列值的总和,必须是数值型
AVG([DISTINCT|ALL] <列名>)计算一列值的平均值,必须是数值型
MAX([DISTINCT|ALL] <列名>)计算一列值的平均值,必须是数值型
MIN([DISTINCT|ALL] <列名>)计算一列值的平均值,必须是数值型

注意:当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值

  1. group by和having
/*
 *按照sno分组,select后面就不能包含sno之外的属性
 *但是可以让聚集函数的值成一列	
 *聚集函数所计算的范围是分组后各组的值
 */
/***1**/
select sno
from sc
group by sno
having count(*)>3
/***2**/
select cno,count(sno)
from sc
group by cno
  1. 多表查询
       1.连接查询
        2.嵌套查询
       相关子查询的理解:找出每个学生超过他自己选修课程平均成绩的课程号
       select sno,cno from sc x where grade >(select avg(grade) from sc y where y.sno=x.sno)
       从外层查询中取出sc的一个元组a,将a的sno值(例如95002)传给内层查询:select avg(grade) from sc y where y.sno=‘95002’
       执行内层查询得到86((82+90)/2),用该值代替内层查询,得到外层查询:select sno,cno from sc x where grade >86
       3.带谓词ANY,ALL的子查询
select sname,sage
from student
where sage<any(select sage
	from student
	where sdept='cs')
and sdept <>'cs'

            4.exists

select sname from student
where exists(select * from sc 
	where sno=student.sno and cno='1')
  1. 集合查询
    并操作UNION,交操作INTERSECT和差操作EXCEPT
select * from student where sdept='CS'
UNION
select * from student where sage<=19
  1. 派生表查询
select sno,cno 
from sc,(select sno,avg(grade) avg_grade from sc group by sno) as sno_avg_grade
where sc.sno=sno_avg_grade.sno and
	  sc.grade>=sno_avg_grade.avg_grade

2.添加数据

1.插入元组

insert
into sc(sno,cno)
values('95008','3')

2.插入子查询结果

create table dept_avgAge(
	sdept char(15),
	avg_age smallint)

insert 
into dept_avgAge(sdept,avg_age)
select sdept,avg(sage)
from student
group by sdept

3.数据修改

1.修改一个元组的值

update student
set sage=22
where sno='95002'

2.修改多个元祖的值

update student
set sage=sage+1

update sc
set grade =0
where sno in(
	select sno
	from student
	where sdept='CS'
)

4.数据删除

1.删除一个元组的值

delete 
from student 
where sno='95002'

2.删除多个元组

delete 
from sc

delete 
from sc
where sno in (
	selete sno
	from student 
	where sdept='CS'
)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于类的JDBC数据库操作增删的项目分析如下: 1. 首先,需要导入Java的JDBC库,以便能够使用JDBC API进行数据库操作。 2. 创建一个数据库连接,通过指定数据库的URL、用户名和密码来连接到数据库。可以使用`DriverManager.getConnection()`方法来实现。 3. 创建一个`Statement`对象,用于执行SQL语句。可以使用`connection.createStatement()`方法来创建。 4. 对于操作,可以使用`executeQuery()`方法执行SELECT语句,并通过`ResultSet`对象获取询结果。 5. 对于插入、更新和删除操作,可以使用`executeUpdate()`方法执行INSERT、UPDATE和DELETE语句,并通过返回的整数值获取受影响的行数。 6. 在完成数据库操作后,需要关闭数据库连接和相关资源,以释放资源并确保数据的完整性。可以使用`close()`方法来关闭连接和`Statement`对象。 下面是一个基于类的JDBC数据库操作增删的示例代码: ```java import java.sql.*; public class JDBCExample { public static void main(String[] args) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { // 1. 创建数据库连接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 2. 创建Statement对象 statement = connection.createStatement(); // 3. 执行操作 resultSet = statement.executeQuery("SELECT * FROM mytable"); // 4. 处理询结果 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 5. 执行插入操作 int rowsAffected = statement.executeUpdate("INSERT INTO mytable (id, name) VALUES (1, 'John')"); // 6. 输出受影响的行数 System.out.println("Rows affected: " + rowsAffected); } catch (SQLException e) { e.printStackTrace(); } finally { // 7. 关闭连接和相关资源 try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值