博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一些Select检索高级用法

Posted on 2007-06-11 11:55  大胸宝腚  阅读(235)  评论(0)    收藏  举报
 

SQL五个集合函数:SUM,AVG,COUNT,MAX,MIN

 通配符的一些用法:(关键字:
like % [] -)
  
select * from tablename where column1 like '[A-M]%'
  这样可以选择出column字段中首字母在A
-M之间的记录
  
select * from tablename where column1 like '[ABC]%'
  这样可以选择出column字段中首字母是A或者B或者C的记录
  
select * from tablename where column1 like '[A-CG]%'
  这样可以选择出column字段中首字母在A
-C之间的或者是G的记录
  
select * from tablename where column1 like '[^C]%'
  这样可以选择出column字段中首字母不是C的记录

 脱字符(关键字:
like _)
  通过使用下滑线字符(_),可以匹配任意单个字符
  
select * from tablename where column1 like 'M_crosoft'

 匹配特殊字符:(
[ ] _ - %
  把他们都放到
[]中就行了,比如:
  
select * from tablename where column1 like '%[%]%'

 匹配发音(关键字:
SOUNDEX DIFFERENCE
  如果不知道一个名字确切的发音,但是又多少知道一点,可以考虑使用SOUNDEX DIFFERENCE函数。
  
select * from tablename where DIFFERENCE(column1,'Laofei'>3)
  DIFFERENCE返回0
-4之间的数字,4是非常接近,0是差异非常大
  要深入了解DIFFERENCE函数的工作原理,使用SOUNDEX函数返回DIFFERENCE函数所使用的音标码
  
select column1 as column,SOUNDEX(column1) 'sound like'

 注意:
  DIFFERENCE函数比较两个字符串的第一个字母和所有的辅音字母,该函数忽略任何元音字母(包括Y),除非元音字母是该字符串的第一个字母。
  使用这两个函数在where中执行效果并不好,所以尽量少使用。

 

在大的数据库应用中,经常因为各种原因遇到重复的记录,造成数据的冗余和维护上的不便。

1.用rowid方法

2.用group by方法

3.用distinct方法

 

1。用rowid方法

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
查数据:
    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 --列出重复的记录数,并列出他的name属性
  group by num
  having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次
删数据:
  delete from student
  group by num
  having count(num) >1
  这样的话就把所有重复的都删除了。

3.用distinct方法 -对于小的表比较有用

create table table_new as  select distinct *  from table1 minux
truncate table table1;
insert into table1 select * from table_new;