① 执行hr_cre.sql创建7张测试表并添加测试数据。
1、创建测试表、插入数据:
create table test
(id int,
name varchar(10),
score int,
classname varchar(20));
insert into test values (1,'张三',100,'一班');
insert into test values (2,'李四',89,'一班');
insert into test values (3,'王五',97,'一班');
insert into test values (4,'赵六',87,'二班');
insert into test values (5,'孙七',94,'二班');
insert into test values (6,'杨八',76,'二班');
2、查询每个班级的总分,可用如下语句:
select classname,SUM(score) as 总分 from test group by classname;
3、结果截图:
② 关于sql 包中的 statement 接口
你只知道什么是接口,却不知道为什么要使用接口。
听说接口回调这个说法吗。你必须关心statement是怎么来的。
Statement statement=connection.creStatement();
问题就在这句话里面。 connection.creStatement();返回的到底是什么?
请你仔细想好再回答。
其实connection.creStatement();返回的是一个实现了statement接口的类。
当然你不知道到底是哪个类,你只要知道它实现了statement接口就行,然后用接口的引用去指向那个类就叫接口回调。 你想想,你要开灯只要按一下那个开关,相当于那个接口引用,至于那个开关具体是怎么实现开关灯功能的你不知道,你也不需要知道,对使用者来说,这就是接口的一大好处。因为具体返回哪个类由Connection类来决定,而且恰恰那个类也不用你写。
那么现在你应该知道 了,statement.execute();实现了没有。 也就是人家帮你实现了那个接口,你只管用,不用关具体怎么实现的,因为,那个方法需要什么参数,有什么功能在接口里已经写的很清楚了。
再给你一个接口回调的例子。迭代器的实现
HashSet set=new HashSet();
Iterator it=set.iterator();
由hashset来决定怎么去实现iterator接口,你只管定义接口引用,然后就去使用接口里有的方法就行。
③ 请教sql语句
先建一个自定义函数(SQL SERVER数据库)
create function cre_funcation(@a int)--传入参数为A表的那个字段
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+a.b_name from tableB a
where a.a_id=@a
if len(@str)>0
begin
set @str=right(@str,len(@str)-1)
end
else
begin
set @str='无'
end
return @str
end
再写查询语句
select a.*,dbo.cre_funcation(a_id) from tablea
--注意,自己改一下表名或者字段名,这样就一定可以的。