数据库应用技术 10-1 sql-sample (15 分)

本题目要求编写SQL语句,检索出每个班级中分数最低的同学id,姓名,分数,班级名称a111

表结构:

create table tb_student (
    id int not null primary key,
    name varchar(32)
);
create table tb_score (
    stu_id int,
    score int
);
create table tb_class (
    id int not null,
    name varchar(32)
);
create table tb_student_class
(
    id       int null,
    class_id int null,
    stu_id   int null
);

表样例

tb_student表:

idname
30ddd
49ccc
51aaa
52bbb

tb_score表:

stu_idscore
3099
4979
5180
5259

tb_class表:

idname
1class-1
2class-2
3class-1
4class-2

tb_student_class

idstu_idclass_id
1301
2492
3511
4522

输出样例:

stu_idstu_nameclass_namescore
51aaaclass-180
52bbbclass-259

sql版本高的可以使用ROW_NUMBER() over (PARTITION BY tb_class.name ORDER BY tb_score.score ASC)as rn,tb_score.score达到分组排序的目的,但是PTA上的sql应该是5.7,只能用GROUP BY和ORDER BY

SELECT
	ANY_VALUE(stu_id) as stu_id	,         --any_value()抑制ONLY_FULL_GROUP_BY值被拒绝
	ANY_VALUE(stu_name) as stu_name	,     
	ANY_VALUE(class_name) as class_name	, 
	ANY_VALUE(score) as score
FROM
(
SELECT
	tb_score.stu_id,
	tb_student.name AS stu_name,
	tb_class.name AS class_name,
	tb_score.score 
FROM
	tb_score
	INNER JOIN tb_student_class ON tb_score.stu_id = tb_student_class.stu_id
	INNER JOIN tb_class ON tb_student_class.class_id = tb_class.id
	INNER JOIN tb_student ON tb_score.stu_id = tb_student.id
ORDER BY
    tb_class.name ASC,
	tb_score.score ASC
LIMIT 100        --不加limit的话order by后每列数据不对应,不知道为什么
)as a
GROUP BY
	a.class_name

这里有个坑就是tb_class表的id看起来是和tb_student_class表的id对应,但实际上只有和tb_student_class的class_id对应才是正确答案。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 数据库开发基础案例中,JDBC技术是非常重要的应用。JDBC是Java数据库连接的缩写,它提供了一种标准的API,用于连接和操作各种类型的数据库。通过JDBC技术,我们可以在Java应用程序中连接数据库,执行SQL语句,获取和处理查询结果等。 在实际开发中,我们可以使用JDBC技术来实现各种数据库操作,例如创建数据库、创建表、插入数据、更新数据、删除数据等。具体来说,我们可以通过JDBC API中的Connection、Statement、ResultSet等类来实现这些操作。 除了基本的数据库操作,JDBC技术还可以与其他技术结合使用,例如使用JSP和Servlet来实现Web应用程序中的数据库操作,或者使用Spring框架来实现更加高级的数据库操作。 总之,JDBC技术数据库开发中不可或缺的一部,掌握它可以让我们更加高效地进行数据库开发。 ### 回答2: JDBC技术是Java程序连接数据库的标准API。JDBC提供了一个接口,使Java开发人员可以与数据库进行交互,从而从中检索和修改信息。JDBC技术可以集成在Java应用程序中,可以帮助我们连接并操作各种类型的关系数据库。 JDBC的使用步骤包括: 1.加载JDBC驱动程序 在使用JDBC之前,我们必须使用Class.forName()加载相应的驱动程序,以便能够与特定数据库进行交互。例如,如果你想要与MySQL数据库连接,你可以加载com.mysql.jdbc.Driver类。 2.连接到数据库 在驱动程序加载完成后,我们可以使用DriverManager类来建立与数据库的连接。需要提供连接URL、用户名和密码等信息。 3.创建Statement对象 需要利用Connection对象来创建Statement对象,Statement对象用于执行SQL语句。Statement对象有三种类型:普通Statement对象、PreparedStatement对象和CallableStatement对象,它们的参数以及执行SQL语句的方式有所不同。 4.执行查询 利用Statement对象,我们可以执行普通的SQL查询语句,例如SELECT语句,通过ResultSet对象返回查询结果集。 5.执行更新 利用Statement对象,我们可以执行插入、更新、删除等操作,这些操作会改变数据库的状态。执行更新操作的方法是executeUpdate(),返回受影响的行数。 6.关闭资源 最后,我们必须关闭连接、Statement对象和ResultSet对象等资源,以避免内存泄漏和其他资源泄漏问题。 JDBC是Java应用程序连接数据库的标准方式,拥有丰富的API和灵活的使用方式。在企业级应用程序中,我们通常需要使用对象关系映射框架(ORM)来简化数据库操作。ORM框架可以自动将Java对象映射到关系数据库中的表,并且支持许多高级数据库操作,例如缓存、延迟加载和数据验证等。ORM框架可以大大简化开发人员对数据库的操作和管理,提高应用程序的开发效率和质量。 ### 回答3: JDBC是Java开发中最常用的关系型数据库连接技术,它允许开发者通过Java程序来访问和管理数据库。JDBC的使用非常广泛,无论是大型企业级应用程序,还是简单的个人应用程序都会用到它。下面我们来看一下如何在Java中使用JDBC技术来进行数据库开发。 一、数据库连接 在使用JDBC进行数据库开发之前,我们需要首先连接数据库。JDBC提供了一个标准接口,可以用来连接各种不同的数据库。连接数据库的代码如下: 1. 加载数据库驱动程序: Class.forName("com.mysql.jdbc.Driver"); 2. 获取数据库连接: Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=root"); 其中,第一行代码是加载MySQL数据库驱动程序,第二行代码连接test数据库。在这个例子中,我们使用了MySQL数据库,但它也可以用来连接Oracle、SQL Server等其他数据库。 二、执行SQL语句 连接成功之后,我们就可以执行SQL语句了。JDBC提供了Statement和PreparedStatement两种接口来执行SQL语句。 1. Statement接口 Statement是最简单的执行SQL语句的接口。它允许我们执行任意的SQL语句,包括增删改查操作。下面是一个使用Statement执行查询语句的例子: Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from user"); 其中,conn是连接数据库的Connection对象,stmt使用Connection对象创建,用来执行SQL语句,rs是执行查询语句返回的结果集。 2. PreparedStatement接口 PreparedStatement是通过预编译方式执行SQL语句的接口。它预先编译SQL语句,避免了每次执行SQL语句时的解析操作,可以提高执行效率。下面是一个使用PreparedStatement执行查询语句的例子: PreparedStatement pstmt = conn.prepareStatement("select * from user where id = ?"); pstmt.setInt(1, 1); ResultSet rs = pstmt.executeQuery(); 其中,pstmt是通过Connection对象创建的,第一步预编译SQL语句,第二步通过setInt()方法设置参数,最后通过executeQuery()方法执行SQL语句并返回结果集。 三、事务处理 在进行数据库操作时,通常需要保证数据的一致性和完整性。JDBC提供了对事务的支持,允许我们在一系列操作中,将它们作为一个整体操作来执行。在JDBC中,我们可以使用Connection对象来处理事务。下面是一个简单的事务处理代码: try{ conn.setAutoCommit(false); //执行一系列操作... conn.commit(); }catch(Exception e){ conn.rollback(); }finally{ conn.setAutoCommit(true); } 其中,将AutoCommit设置为false表示开启事务处理,执行操作过程中出现异常时进行回滚操作,执行完成后将AutoCommit设置为true,表示恢复自动提交模式。 总结 以上就是JDBC在Java中进行数据库开发的基础案例。在实际的开发中,需要根据具体的场景进行选择和使用不同的JDBC接口。使用JDBC开发数据库程序,不仅可以让我们更好地管理数据库,还能提高程序的执行效率,为程序的稳定性和可靠性带来重要的保障。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶然o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值