SQL查询重复数据和清除重复数据
有例表:emp
emp_no name age
001 Tom 17
002 Sun 14
003 Tom 15
004 Tom 16
要求:
列出所有名字重复的人的记录
(1)最直观的思路:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:
select name from emp group by name having count(*)>1
所有名字重复人的记录是:
select * from emp
where name in (select name from emp group by name having count(*)>1)
(2)稍微再聪明一点,就会想到,如果对每个名字都和原表进行比较,大于2个人名字与这条记录相同的就是合格的 ,就有
select * from emp where (select count(*) from emp e where e.name=emp.name) >1
--注意一下这个>1,想下如果是 =1,如果是 =2 如果是>2 如果 e 是另外一张表 而且是=0那结果 就更好玩了:)
这个过程是 在判断工号为001的 人 的时候先取得 001的 名字(emp.name) 然后和原表的名字进行比较 e.name
注意e是emp的一个别名。
再稍微想得多一点,就会想到,如果有另外一个名字相同的人工号不与她他相同那么这条记录符合要求:
select * from emp
where exists&
相关文档:
本系列文章导航
[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧
[Oracle]高效的PL/SQL程序设计(二)--标量子查询
[Oracle]高效的PL/SQL程序设计(三)--Package的优点
[Oracle]高效的PL/SQL程序设计(四)--批量处理
[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集
[Oracle]高效的PL/SQL程序设计(六)- ......
--------------方法A-----------------
程序:
declare
i int:=1;
v varchar2(200):=NULL;
v1 varchar2(20):=NULL;
begin
loop
for k in 1..i loop
v1:=k||' ......
入门篇
////////////////////////////////////////////
% : 表示0~n个任意字符
_ : 表示单个任意字符
[] :表示在括号里列出的任意字符
[^]:表示任意个没有在括号中列出的字符
***********************
系统数据库
MASTER数据库:
......
SQL SERVER 2008中定时备份数据库任务的创建与删除
[http://news.newhua.com/news1/program_database/2008/1215/0812151515485B22JHGBK9HJ87DK09D6958HB8K83EJ0053JKGC1A543.html]
由于之前是使用SQL SERVER 2000或者2005,这次给客户安装时使用2008 SERVER,本以为创建数据库定时备份任务会与2000/2005有很大区别,但经 ......