zoukankan      html  css  js  c++  java
  • SqlServer和Oracle中一些常用的sql语句1

    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','aaa','90' union all
    		SELECT '张三3','aaa','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),
            c 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('钱','asds','100')
        Insert into Table1 values('孙','asds','80')
        Insert into Table1 values('李','asds',null)
        GO
        select * from Table2
    
        --3.INSERT INTO SELECT语句复制表数据
        Insert into Table2(a, c, d) select a,c,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),
            b varchar(10),
            c varchar(10),
            CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
            (
                a ASC
            )
        ) ON [PRIMARY]
        GO
    
        --2.创建测试数据
        Insert into Table1 values('赵','asds','90')
        Insert into Table1 values('钱','asds','100')
        Insert into Table1 values('孙','asds','80')
        Insert into Table1 values('李','asds',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, Emp_Name
           ,Dept_id ,Mobile, Ext
           ,Salary, Email 
           , 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"
         , COALESCE(A, 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"
        , COALESCE(A, '新值')      "test1.B"
        , COALESCE(A, B, C)        "test2.A"
        , ISNULL(A, ISNULL(B, C))  "test2.B"
    FROM 
        (
           SELECT NULL A
                 , NULL B
                 , '非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
       , NULLIF(VAL, 0) "NULLIF(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,a.seq) in (select peopleId,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)
    
    --5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from vitae a
    where (a.peopleId,a.seq) in (select peopleId,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)   
    
    --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)

  • 相关阅读:
    ref与out的区别(C#)
    用MS SQL Server 2008修改数据库表时提示“不允许保存更改”的解决方法
    测试的职责
    性能测试新手误区(三):用户数与压力
    JAVA + LR实现apache流媒体的性能测试(LR部分)
    性能测试新手误区(二):为什么我模拟的百万测试数据是无效的
    JAVA + LR实现apache流媒体的性能测试(JAVA部分)
    性能测试新手误区(六):性能监控
    性能测试新手误区(五):这是性能问题么
    性能测试新手误区(四):一切来自录制
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234281.html
Copyright © 2011-2022 走看看