1.用一个表中的一个字段更新另一个表中的字段
update TableA set name = b.name from TableA a,TableB b where a.idA = b.idB-- 错误语句(An aggregate may not appear in the set list of an UPDATE statement.) update yaf_Topic set LastPosted = max (posted),NumPosts = count ( * ) from yaf_Message a,yaf_Topic b where a.TopicID = b.TopicID and b.ForumID = 10 -- 正确语句 update yaf_Topic set LastPosted = maxLastPosted,NumPosts = NumPostscount from ( select maxLastPosted = max (posted),NumPostscount = count ( * ),TopicID from yaf_Message group by topicID)a,yaf_Topic b where a.TopicID = b.TopicID and b.ForumID = 10
2.判断符合某个条件的记录是否存在,存在则不insert,不存在则Insert
insert into yaf_ProduceReviewPostHis(TopicID,Created,Flag,ReplyCount) select 12345678 , ' 23 ' , 1 , 20 where not exists ( select 1 from yaf_ProduceReviewPostHis where TopicID = 12345678 and Created = ' 23 ' and Flag = 1 )3.判断数据重复
select count ( * ) from ( select count ( * ) as user_count,userID,ForumID from yaf_vaccess group by userID,ForumID having count ( * ) > 1 ) a4.找重复列
select a. * from test a,( select count = count ( * ),string = min (string),test_id = min (test_id) from test group by string) b where a.string = b.string and a.test_id <> b.test_id5.删除重复数据
delete test where test.test_id in ( select a.test_id from test a,( select count = count ( * ),string = min (string),test_id = min (test_id) from test group by string) b where a.string = b.string and a.test_id <> b.test_id)6.having HAVING 子句运做起来非常象 WHERE 子句, 只用于对那些满足 HAVING 子句里面给出的条件的组进行计算。 其实,WHERE 在分组和聚集之前过滤掉我们不需要的输入行, 而 HAVING 在 GROUP 之后那些不需要的组. 因此,WHERE 无法使用一个聚集函数的结果. 而另一方面,我们也没有理由写一个不涉及聚集函数的 HAVING. 如果你的条件不包含聚集,那么你也可以把它写在 WHERE 里面, 这样就可以避免对那些你准备抛弃的行进行的聚集运算.
*聚集函数 指的是象count,max,sum,AVG等函数
如果我们想知道那些销售超过2个部件的供应商,使用下面查询:
SELECT S.SNO, S.SNAME, COUNT (SE.PNO) FROM SUPPLIER S, SELLS SE WHERE S.SNO = SE.SNO GROUP BY S.SNO, S.SNAME HAVING COUNT (SE.PNO) > 2 ;5.带有子查询的insert 当带有子查询是不能用values和括号。例如:
insert test2(id,string,string1, number ) select test_id,string,string1,test. number from test,test1 where test.test_id = test1.id6.not exists
select * from test1 where not exists ( select * from test where test1.id = test.test_id)7.关于在SQL中插入数据并返回ID的方法
INSERT INTO test values ( ' sss ' ) SELECT SCOPE_IDENTITY ()8.多子查询
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1 A, ( SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM ( SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE, ' YYYY/MM ' ) = TO_CHAR(SYSDATE, ' YYYY/MM ' )) X, ( SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE, ' YYYY/MM ' ) = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, ' YYYY/MM ' ) || ' /01 ' , ' YYYY/MM/DD ' ) - 1 , ' YYYY/MM ' ) ) Y, WHERE X.NUM = Y.NUM ( + ) AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND, 0 ) <> X.STOCK_ONHAND ) B WHERE A.NUM = B.NUM 9.曾经挽救过我的语句 select * from bbs.dbo.yaf_topic a full join bbs_temp_20050830.dbo.yaf_topic b on a.topicid = b.topicid where a.topicid is null -- --------------------------------- set identity_insert yaf_topic on INSERT INTO [ bbs ] . [ dbo ] . [ yaf_Topic ] ( [ TopicID ] , [ ForumID ] , [ UserID ] , [ Posted ] , [ Topic ] , [ Views ] , [ IsLocked ] , [ Priority ] , [ PollID ] , [ TopicMovedID ] , [ LastPosted ] , [ LastMessageID ] , [ LastUserID ] , [ LastUserName ] , [ NumPosts ] , [ PhotoTypeID ] , [ PhotoFilmName ] , [ PhotoCamera ] , [ ActionDate ] , [ CheckFlag ] , [ NoReply ] , [ Hide ] ) select b. * from bbs.dbo.yaf_topic a full join bbs_temp_20050830.dbo.yaf_topic b on a.topicid = b.topicid where a.topicid is null set identity_insert yaf_topic off 10.在存储过程中执行一个返回表的存储过程 create table #data(TopicID bigint , MessageID bigint ) insert #data exec yaf_topic_save @ForumID , @topic , @UserID , @Message , @Priority , @IP , @PollID , @ActionDate , @TopicMovedID , @Country , @Sheng , @Shi , @JinQu , @PhotoTypeID , @PhotoFilmName , @PhotoCamera , @Posted 11.带有输出参数的存储过程 Create Proc [ dbo ] .cs_GetAnonymousUserID ( @SettingsID int , @UserID int output ) as SET Transaction Isolation Level Read UNCOMMITTED Select @UserID = cs_UserID FROM cs_vw_Users_FullUser where SettingsID = @SettingsID and IsAnonymous = 1 12.sql2005的翻页 WITH OrderedOrders AS ( SELECT 11 as ' ddd ' FROM Employees ) SELECT COUNT ( 1 ) FROM OrderedOrders; WITH OrderedOrders AS ( SELECT Employees. * , ROW_NUMBER() OVER ( ORDER BY empid) AS ROW_NUMBER FROM Employees ) SELECT * FROM OrderedOrders WHERE ROW_NUMBER > 2 AND ROW_NUMBER <= 5 ;转载于:https://www.cnblogs.com/Elong/archive/2005/07/13/191950.html
