??xml version="1.0" encoding="utf-8" standalone="yes"?>
jdbc:mysql://127.0.0.1:3306/mybank?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
oracle下支持执行多条语句,下面3个相?/p>
foreach的主要用在构建in条g中,它可以在SQL语句中进行P代一个集合。foreach元素的属性主要有 itemQindexQcollectionQopenQseparatorQclose。item表示集合中每一个元素进行P代时的别名,index?定一个名字,用于表示在P代过E中Q每ơP代到的位|,open表示该语句以什么开始,separator表示在每ơ进行P代之间以什么符号作为分?W,close表示以什么结束,在用foreach的时候最关键的也是最Ҏ出错的就是collection属性,该属性是必须指定的,但是在不同情?下,该属性的值是不一LQ主要有一?U情况:
1. 如果传入的是单参C参数cd是一个List的时候,collection属性gؓlist
2. 如果传入的是单参C参数cd是一个array数组的时候,collection的属性gؓarray
3. 如果传入的参数是多个的时候,我们需要把它们装成一个Map了,当然单参C可以装成mapQ实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
扚w删除
<delete id="batchDeleteStudent" parameterType="List">
DELETE FROM STUDENT WHERE id IN
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
扚w更新 注意Qoracle?形如 update *** set *** where ** in(....) q种语句 in所在的集合有条数限??000?/p>
<update id="batchUpdateStudent" parameterType="List">
UPDATE STUDENT SET name = "5566" WHERE id IN
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</update><update id="batchUpdateStudentWithMap" parameterType="Map" >
UPDATE STUDENT SET name = #{name} WHERE id IN
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
扚w插入 mysql和oracle不一?/p>
转自Q?nbsp;http://blog.csdn.net/myjlvzlp/article/details/8434376
假设现有一张h员表Q表名:PersonQ,若想姓名、n份证受住址q三个字D完全相同的记录查找出来Q?/p>
1: SELECT p1.*
2: FROM persons p1,persons p2
3: WHERE p1.id<>p2.id
4: AND p1.cardid = p2.cardid
5: AND p1.pname = p2.pname
6: AND p1.address = p2.address
可以实现该功能?/p>
删除重复记录的SQL语句
1.用rowidҎ
2.用group byҎ
3.用distinctҎ
1。用rowidҎ
据据oracle带的rowid属性,q行判断Q是否存在重?语句如下Q?nbsp;
查数?
select * from table1 a where rowid !=(select max(rowid)
from table1 b where a.name1=b.name1 and a.name2=b.name2......)
删数据:
delete from table1 a where rowid !=(select max(rowid)
from table1 b where a.name1=b.name1 and a.name2=b.name2......)2.group byҎ
查数?
select count(num), max(name) from student --列出重复的记录数Qƈ列出他的name属?nbsp;
group by num
having count(num) >1 --按num分组后找中num列重复,卛_现次数大于一?nbsp;
删数据:
delete from student
group by num
having count(num) >1
q样的话把所有重复的都删除了?/p>3.用distinctҎ -对于的表比较有?/p>
create table table_new as select distinct * from table1 minux
truncate table table1;
insert into table1 select * from table_new;
查询及删除重复记录的Ҏ大全
1、查找表中多余的重复记录Q重复记录是Ҏ单个字段QpeopleIdQ来判断select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录Q重复记录是Ҏ单个字段QpeopleIdQ来判断Q只留有rowid最的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录Q多个字D)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录Q多个字D)Q只留有rowid最的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)5、查找表中多余的重复记录Q多个字D)Q不包含rowid最的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)(? 比方?在A表中存在一个字D?#8220;name”Q?nbsp;
而且不同记录之间?#8220;name”值有可能会相同,
现在是需要查询出在该表中的各记录之间Q?#8220;name”值存在重复的;
Select Name,Count(*) From A Group By Name Having Count(*) > 1如果q查性别也相同大则如?
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1(? Ҏ一
declare @max integer,@id integer
declare cur_rows cursor local for select dD?count(*) from 表名 group by dD?having count(*) >Q?1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where dD?= @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
Ҏ?/p>
Q重复记录"有两个意义上的重复记录,一是完全重复的记录Q也x有字D均重复的记录,二是部分关键字段重复的记录,比如Name字段重复Q而其他字D不一定重复或都重复可以忽略?/p>
1、对于第一U重复,比较Ҏ解决Q?/p>
select distinct * from tableName
可以得到无重复记录的结果集?/p>
如果该表需要删除重复的记录Q重复记录保?条)Q可以按以下Ҏ删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生q种重复的原因是表设计不周生的Q增加唯一索引列即可解冟?/p>
2、这c重复问题通常要求保留重复记录中的W一条记录,操作Ҏ如下
假设有重复的字段为Name,AddressQ要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select卛_CNameQAddress不重复的l果集(但多了一个autoID字段Q实际写时可以写在select子句中省L列)
(? 查询重复
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1)
Oracle数据导入导出imp/exp
功能QOracle数据导入导出imp/expq当与oracle数据q原与备份?br />
大多情况都可以用Oracle数据导入导出完成数据的备份和q原Q不会造成数据的丢失)?br /> Oracle有个好处Q虽然你的电脑不是服务器Q但是你装了oracle客户端,q徏立了q接
Q通过Net Configuration Assistantd正确的服务命名,其实你可以想成是客户端与服务器端 修了条\Q然后数据就可以被拉q来了)
q样你可以把数据导出到本圎ͼ虽然可能服务器离你很q?br /> 你同样可以把dmp文g从本地导入到q处的数据库服务器中?br /> 利用q个功能你可以构Z个相同的数据库,一个用来测试,一个用来正式用?br />
执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br /> DOS中可以执行时׃ 在oracle 8i ?nbsp; 安装目录\$ora10g\BIN被设|ؓ全局路径Q?br /> 该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br /> oracle用java~写Q我想SQLPLUS.EXE、EXP.EXE、IMP.EXEq俩个文件是被包装后的类文g?br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类Q完成导入导出功能?br />
下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成Q因为导入导出很单?br />数据导出Q?br /> 1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br /> exp system/manager@TEST file=d:\daochu.dmp full=y
2 数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 数据库中的表table1中的字段filed1?00"打头的数据导?br /> exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出Q对于压~我不太在意Q用winzip把dmp文g可以很好的压~?br /> 不过在上面命令后?加上 compress=y 可以了
数据的导?br /> 1 D:\daochu.dmp 中的数据导入 TEST数据库中?br /> imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br /> 在后面加?ignore=y 可以了?br /> 2 d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不情冉|是将表彻底删除,然后导入?br />
注意Q?br /> 你要有够的权限Q权限不够它会提CZ?br /> 数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上?/p>
数据导出Q?br />exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
导出注意事项Q导出的是当前用L的数据,当前用户如果有DBA的权限,则导出所有数据!
同名用户之间的数据导入:
imp hkb/hkb@xe file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
不同名之间的数据导入Q?br />imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp
log=c:\orabackup\hkbimp.log;