首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  数据库  |  其它数据库   


经典SQL语句


原作者:不详    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-10-24

          

说明:复制表(只复制结构,源表名:a 新表名:b) 
SQL:  SELECT * INTO b FROM a WHERE 1<>1 


说明:拷贝表(拷贝数据,源表名:a 目标表名:b) 
SQL:  INSERT INTO b(a, b, c) 
   SELECT d, e, f FROM b


说明:显示文章、提交人和最后回复时间 
SQL: SELECT a.Title,a.Username,b.Adddate 
   FROM TABLE a, 
    (SELECT MAX(adddate) Adddate 
    FROM TABLE WHERE TABLE.Title = a.Title) b 


说明:外连接查询(表名1:a 表名2:b) 
SQL:  SELECT a.a, a.b, a.c, b.c, b.d, b.f 
   FROM a 
    LEFT OUT JOIN b ON a.a = b.c 


说明:日程安排提前五分钟提醒 
SQL:  SELECT * FROM 日程安排 
   WHERE DATEDIFF('minute',开始时间,GETDATE())>5 


说明:两张关联表,删除主表中已经在副表中没有的信息 
SQL:  DELETE FROM info 
   WHERE NOT EXISTS 
    (SELECT * FROM infobz 
    WHERE info.infid = infobz.infid ) 


说明:--
SQL:  SELECT * 
   FROM studentinfo 
   WHERE NOT EXISTS 
    (SELECT * FROM student 
     WHERE studentinfo.Fid = student.Fid) 
    AND 系名称='XXXX' and 专业名称='XXXX' 
   ORDER BY 性别,生源地,高考总成绩 


说明:  从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源) 
SQL: SELECT a.userper, a.tel, a.standfee, 
    TO_CHAR(a.telfeedate, 'yyyy') AS telyear, 
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '01', a.factration)) AS JAN,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'),
     '02', a.factration)) AS FRI,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '03', a.factration)) AS MAR,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '04', a.factration)) AS APR,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '05', a.factration)) AS MAY,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '06', a.factration)) AS JUE,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '07', a.factration)) AS JUL,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '08', a.factration)) AS AGU,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '09', a.factration)) AS SEP,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '10', a.factration)) AS OCT,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '11', a.factration)) AS NOV,    
    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), 
     '12', a.factration)) AS DEC    
   FROM (SELECT a.userper, a.tel, a.standfee, 
     b.telfeedate, b.factration 
    FROM TELFEESTAND a, TELFEE b 
    WHERE a.tel = b.telfax) a 
   GROUP BY a.userper, a.tel, a.standfee, 
    TO_CHAR(a.telfeedate, 'yyyy') 


说明:四表联查问题: 
SQL:  SELECT * 
   FROM a 
    LEFT INNER JOIN b ON a.a=b.b 
    RIGHT INNER JOIN c ON a.a = c.c 
    INNER JOIN d ON a.a = d.d 
   WHERE ..... 

说明:得到表中最小的未使用的ID号 

SQL: SELECT (CASE WHEN 
    EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) 
     THEN MIN(HandleID) + 1 ELSE 1 END) AS HandleID 
   FROM Handle 
   WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

~~~·2~~~~2.删除重复数据
-----------------------------------------------------------------------------------------------------------------------
一、具有主键的情况
a.具有唯一性的字段id(为唯一主键)
delete table 
where id not in 
(
select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。

b.具有联合主键
假设col1+','+col2+','...col5 为联合主键
select * from  table where col1+','+col2+','...col5 in (
   select max(col1+','+col2+','...col5) from table 
where having count(*)>1
group by col1,col2,col3,col4 
)
group by 子句后跟的字段就是你用来判断重复的条件,
如只有col1,那么只要col1字段内容相同即表示记录相同。

c:判断所有的字段
   select * into #aa from table group by id1,id2,....
   delete table 
   insert into table 
   select * from #aa

二、没有主键的情况

a:用临时表实现
select identity(int,1,1) as id,* into #temp from ta
delete #temp 
where id not in 
(
   select max(id) from # group by col1,col2,col3...
)
delete table ta
inset into ta(...)
    select ..... from #temp

b:用改变表结构(加一个唯一字段)来实现
alter table 表 add  newfield int identity(1,1)
delete 表
where newfield not in
(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield2.删除重复数据
-----------------------------------------------------------------------------------------------------------------------
一、具有主键的情况
a.具有唯一性的字段id(为唯一主键)
delete table 
where id not in 
(
select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。

b.具有联合主键
假设col1+','+col2+','...col5 为联合主键
select * from  table where col1+','+col2+','...col5 in (
   select max(col1+','+col2+','...col5) from table 
where having count(*)>1
group by col1,col2,col3,col4 
)
group by 子句后跟的字段就是你用来判断重复的条件,
如只有col1,那么只要col1字段内容相同即表示记录相同。

c:判断所有的字段
   select * into #aa from table group by id1,id2,....
   delete table 
   insert into table 
   select * from #aa

二、没有主键的情况

a:用临时表实现
select identity(int,1,1) as id,* into #temp from ta
delete #temp 
where id not in 
(
   select max(id) from # group by col1,col2,col3...
)
delete table ta
inset into ta(...)
    select ..... from #temp

b:用改变表结构(加一个唯一字段)来实现
alter table 表 add  newfield int identity(1,1)
delete 表
where newfield not in
(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号