加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer和Oracle中一些常用的sql语句2

发布时间:2020-12-12 13:58:59 所属栏目:MsSql教程 来源:网络整理
导读:--------------------------------------------------------------WITH Emp?AS ( SELECT E.Dept_Id,Count(*) Emp_Count FROM Employees E GROUP BY E.Dept_Id )SELECT D.Dept_Name,E.Emp_CountFROM Departments D,Emp EWHERE D.Dept_Id = E.Dept_IdORDER BY
--------------------------------------------------------------
WITH Emp?
AS
  (
  SELECT E.Dept_Id,Count(*) Emp_Count
  FROM Employees E
  GROUP BY E.Dept_Id
  )

SELECT D.Dept_Name,E.Emp_Count
FROM Departments D,Emp E
WHERE D.Dept_Id = E.Dept_Id
ORDER BY Emp_Count DESC
--------------------------------------------------------------

/************************************************************
   打印99乘法表
 ************************************************************/
--把重复用到的SQL语句放在with as 里面,取一个别名可用做子查询部分,后面的查询就可以用它
WITH Tally(N) AS   
(
    SELECT 1 N
    --FROM DUAL
    UNION ALL
    SELECT N + 1 N
    FROM   Tally
    WHERE  N < 9
)
SELECT CAST(B.N AS VARCHAR)
       + ' * ' 
       + CAST(A.N AS VARCHAR)
       + ' = ' 
       + CAST(A.N * B.N AS VARCHAR)
       Result
FROM   Tally A
       CROSS JOIN Tally B       
       
--------------------------------------------------------------       
--SQL SERVER
--用table2中的数据 更新存在于table1的数据
UPDATE table1
SET
	table1.UserName = table2.UserName,table1.Pwd = table2.Pwd	
FROM table2
WHERE table1.id=table2.id

---------------------------------------------------------------
--Oracle
UPDATE Emp_Bak E
   SET (Salary,Dept_Id)= 
           (
           SELECT A.Salary,A.Dept_Id
           FROM Adjustment A 
           WHERE E.Emp_Id = A.Emp_Id
           )
WHERE E.Emp_Id=
           (
           SELECT A.Emp_Id 
           FROM Adjustment A 
           WHERE E.Emp_Id = 
           A.Emp_Id
           )
         
UPDATE
    (
    SELECT E.Salary,A.Salary New_Salary,E.Dept_Id,A.Dept_Id 
         New_Dept_Id 
    FROM Emp_Bak E,Adjustment A
    WHERE E.Emp_Id = A.Emp_Id
    ) --(INLINE-VIEW)
SET Salary = New_Salary,Dept_Id = New_Dept_Id

---Oracle和SQLServer补齐字符串的方法 
SELECT RIGHT(REPLICATE('0',10)+LTRIM(1234),10);  --SQLServer

SELECT LPAD(1234,10,'0') FROM DUAL;   --Oracle
--结果 0000001234

-----特殊字符 模糊搜索 % _相关处理
SELECT *
FROM 
  ( 
  SELECT '5% Discount' VAL 
  --FROM DUAL
  UNION ALL
  SELECT '59_' VAL
  --FROM DUAL
  ) D
WHERE VAL LIKE '5%%' ESCAPE ''

SELECT *
FROM 
    (
    SELECT '5% Discount' VAL 
    --FROM DUAL
    UNION ALL
    SELECT '59_' VAL
    --FROM DUAL
    ) D
WHERE VAL LIKE '%_' ESCAPE ''


--還有SQL SERVER特有的
SELECT *
FROM 
    (
    SELECT '5% Discount' VAL 
    UNION ALL
    SELECT '59_' VAL
    ) D
WHERE VAL LIKE '5[%]%' 

--
SELECT *
FROM 
    (
    SELECT '5% Discount' VAL 
    UNION ALL
    SELECT '59_' VAL
    ) D
WHERE VAL LIKE '%[_]'

------------------------------------------
--正则表达式搜索
--145,ORACLE
SELECT Val
FROM 
    (
    SELECT '123' Val
    FROM DUAL
    UNION ALL 
    SELECT '456' FROM DUAL
    UNION ALL 
    SELECT 'ABC' FROM DUAL
    UNION ALL 
    SELECT 'xyz' FROM DUAL
    UNION ALL 
    SELECT '@789' FROM DUAL
    UNION ALL
    SELECT '789@' FROM DUAL
    ) 
WHERE 1=1
  AND REGEXP_LIKE(Val,'^[0-9]') --測試1
  --AND REGEXP_LIKE( Val,'^[^0-9]')--測試2
  --AND REGEXP_LIKE(Val,'^[A-Za-z]')--測試3


--145,SQL SERVER
SELECT Val
FROM 
    (
    SELECT '123' Val
    UNION ALL 
    SELECT '456'
    UNION ALL 
    SELECT 'ABC'
    UNION ALL 
    SELECT 'xyz'
    UNION ALL 
    SELECT '@789'
    UNION ALL 
    SELECT '789@'
    ) A
WHERE 1=1
  AND Val LIKE '[0-9]%' --測試1,數字(0-9)
  --AND Val LIKE '[^0-9]%'--測試2,非數字
  --AND Val LIKE '[A-Z]%' --測試,3 英文(A-Z)
  	
--------------中文Unicode区间---------------- 
--------------------------------------------- 	
WITH Tally(N) AS
(
SELECT 19966 N
UNION ALL
SELECT N +1 N
FROM Tally
WHERE N<40892
)
SELECT N,NCHAR(N) Word
FROM Tally
OPTION (MAXRECURSION 32000) 

------------------利用中文是两个字节的特性判断------------------- 	
--150,SQL SERVER
SELECT Word,LEN(Word),DATALENGTH(Word),CASE WHEN LEN(Word) = DATALENGTH(Word)  THEN '英文' 
         ELSE '中文' 
     END Judge
FROM 
  (
  SELECT 'English' Word
  --FROM DUAL
  UNION ALL
  SELECT '中文'
  --FROM DUAL
  UNION ALL
  SELECT '堃'
  --FROM DUAL
)  A
    
--149,ORACLE  利用中文是两个字节的特性判断
SELECT Word,LENGTH(Word)  "Len",LENGTHB(Word) "LenB",CASE WHEN LENGTH(Word) = LENGTHB(Word)  THEN '英文' 
         ELSE '中文' 
     END Judge
FROM 
  (
  SELECT 'English' Word
  FROM DUAL
  UNION ALL
  SELECT '中文'
  FROM DUAL
  UNION ALL
  SELECT '堃'
  FROM DUAL
)    

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读