SqlServer和Oracle中一些常用的sql语句1
发布时间:2020-12-12 13:59:02 所属栏目:MsSql教程 来源:网络整理
导读:insert into city --找出Hotel表中不存在于city表中的城市名select DISTINCT rtrim(ltrim(cityname)) from Hotel e WHERE not EXISTS (SELECT * FROM city eb WHERE eb.cityname=e.cityname) --------------------------------Insert-----------------------
insert into city --找出Hotel表中不存在于city表中的城市名 select DISTINCT rtrim(ltrim(cityname)) from Hotel e WHERE not EXISTS (SELECT * FROM city eb WHERE eb.cityname=e.cityname) --------------------------------Insert--------------------------------- -- 多条数据一次insert插入 INSERT INTO table1 SELECT '张三1','aaa','90' union all SELECT '张三2','90' union all SELECT '张三3','90' /* INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下: INSERT INTO SELECT语句复制表数据 */ --1.创建测试表 create TABLE Table1 ( a varchar(10),b varchar(10),c varchar(10),CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] create TABLE Table2 ( a varchar(10),d int,CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO --2.创建测试数据 Insert into Table1 values('赵','asds','90') Insert into Table1 values('钱','100') Insert into Table1 values('孙','80') Insert into Table1 values('李',null) GO select * from Table2 --3.INSERT INTO SELECT语句复制表数据 Insert into Table2(a,c,d) select a,5 from Table1 GO --4.显示更新后的结果 select * from Table2 GO /* 结果 a c d 李 NULL 5 钱 100 5 孙 80 5 赵 90 5 */ --5.删除测试表 drop TABLE Table1 drop TABLE Table2 /* SELECT INTO FROM语句 语句形式为:SELECT vale1,value2 into Table2 from Table1 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下: SELECT INTO FROM创建表并复制表数据 */ --1.创建测试表 create TABLE Table1 ( a varchar(10),CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO --2.创建测试数据 Insert into Table1 values('赵',null) GO --3.SELECT INTO FROM语句创建表Table2并复制数据 select a,c INTO Table2 from Table1 GO --4.显示更新后的结果 select * from Table2 GO /* a c 李 NULL 钱 100 孙 80 赵 90 */ --5.删除测试表 drop TABLE Table1 drop TABLE Table2 -- 根据表Adjustment中的记录删除Emp_Bak中对应的数据 DELETE Emp_Bak E WHERE EXISTS ( SELECT 'X' FROM Adjustment A WHERE E.Emp_Id = A.Emp_Id ) DELETE Emp_Bak E WHERE Emp_Id IN ( SELECT A.Emp_Id FROM Adjustment A WHERE E.Emp_Id = A.Emp_Id ) --103,ORACLE 中删除表Emp_Bak中重复数据 --JOIN DELETE Emp_Bak D WHERE ROWID > ( SELECT MIN(ROWID) FROM Emp_Bak R WHERE D.Emp_Id = R.Emp_Id ) --NOT IN DELETE Emp_Bak D WHERE ROWID NOT IN ( SELECT MIN(ROWID) FROM Emp_Bak R GROUP BY R.Emp_Id ) --104,SQL SERVER 删除重复数据 分三步 首先将非重复数据存储到临时表,然后清空原数据表,最后将临时表数据存回原数据表 --STEP01 SELECT DISTINCT Emp_id,Emp_Name,Dept_id,Mobile,Ext,Salary,Email,Date_Update INTO #Emp_Bak FROM Emp_Bak --STEP02 TRUNCATE TABLE Emp_Bak --STEP03 INSERT INTO Emp_Bak SELECT Emp_id,GETDATE() Date_Create -- FROM #Emp_Bak ------------------------------4.5------------------------------------ --105,ORACLE,删除大量数据时 可能导致数据库事务日志文件急剧扩展,甚至无法继续进行事务处理等问题,可用分批删除数据方法 DECLARE n NUMBER; BEGIN LOOP EXIT WHEN n=0; DELETE EMP_BAK WHERE ROWNUM<=5 AND Dept_Id Like 'I%'; n :=SQL%ROWCOUNT; DBMS_OUTPUT.PUT_LINE( n ); COMMIT; END LOOP; END; --105,SQL SERVER,WHILE (@@ROWCOUNT>0) BEGIN DELETE TOP(5) FROM Emp_Bak WHERE Dept_Id Like 'I%' END -------------------------------- ------------------------------5.1------------------------------------ --117 SELECT TO_CHAR(DATE'-4712-01-01','J') "JDay(Base)",TO_CHAR(DATE'2010-01-01','J') "JDay",(TO_CHAR(DATE'2010-01-01','J') -TO_CHAR(DATE'-4712-01-01','J'))/365.25 Diff FROM DUAL --117 SELECT DATE'2010-03-17' Today,TIMESTAMP '2010-3-17 8:28:40' Now FROM DUAL ------------------------------5.4------------------------------------ --124,ORACLE SELECT NVL(A,'新值') "test1.A",COALESCE(A,'新值')"test1.B",B,C) "test2.A",NVL(A,NVL(B,C)) "test2.B" FROM ( SELECT NULL A,NULL B,'非NULL' C FROM DUAL ) --124,SQL SERVER SELECT ISNULL(A,'新值') "test1.A",'新值') "test1.B",C) "test2.A",ISNULL(A,ISNULL(B,C)) "test2.B" FROM ( SELECT NULL A,'非NULL' C ) A --125 --SQL SERVER SELECT VAL,NULLIF(VAL,0) "NULLIF(VAL,0)" FROM ( SELECT 0 VAL --FROM DUAL UNION ALL SELECT 20 VAL --FROM DUAL ) A --ORACLE SELECT VAL,0)" FROM ( SELECT 0 VAL FROM DUAL UNION ALL SELECT 20 VAL FROM DUAL ) A --mssql去空格 SELECT REPLACE(REPLACE(REPLACE(REPLACE(CAST('abc def ghi cd e' AS VARCHAR),CHAR(13) + CHAR(10),''),CHAR(13),CHAR(10),' ','') -- 查询table1中 city相同数目大于1的 且text字段为空 select * from table1 where city in (select city from table1 group by city having count(*)>1) and text is null --SQL:删除重复数据,只保留一条 --在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 --1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) --2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1) and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>1) --3、查找表中多余的重复记录(多个字段) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) --4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 delete from vitae a where (a.peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) --5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 select * from vitae a where (a.peopleId,seq having count(*)>1) --6.消除一个字段的左边的第一位: update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%' --7.消除一个字段的右边的第一位: update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村' --8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录 update vitae set ispass=-1 where peopleId in (select peopleId from vitae group by peopleId,seq having count(*) > 1) and seq in (select 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sqlserver 权限实验
- sql – 为什么在本地服务器上使用OPENQUERY不好?
- sql-server – SQL Server中的ISNULL(SUM(x),0)或SUM(ISNUL
- data-structures – 关系数据库的高效持久数据结构
- sql-server-2005 – 使用SQL Server 2005中的ROW_NUMBER()O
- .net – 使用SqlBulkCopy,如何将数据插入非默认数据库模式的
- Access数据库导入Mysql的方法之一
- MySQL缓存的查询和清除命令使用详解
- sql – 使用其他表中多个值的随机更新表
- sql-server – 从字符串转换为uniqueidentifier时转换失败