文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:32
字数 617
阅读 3
收藏 0
--------------------------------------------------------------
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
)

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/9044695

共有 人打赏支持
深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/08/22
90
0
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/06/11
73
0
OpenJWeb 1.8数据库管理工具功能说明

QQ:29803446 msn:baozhengw999@hotmail.com email:baozhengw@163.com 联系人:王先生 OpenJWeb 1.8数据库管理工具功能说明 由于使用sqlserver 的DTS跨数据库复制功能经常失败,所以openjweb开...

迷途d书童
2012/03/09
65
0
基于AEAI ESB的处理大字段

1.背景 数据迁移中大字段一直是个比较头疼的问题,一旦大字段中值大于32K的话就无法用sql语句来实现插入和更新。通用的解决办法一般有两种:存储过程和JDBC。下面主要总结下基于AEAI ESB用J...

数通畅联
2015/01/22
0
0
sqlserver,你的delete语句表名为什么不能别名?

前几天写了几行sql,用于清除环境里面的脏数据,平时开发用的是oracle数据库,看了下里面的语句,处理concat字符串拼接函数看起来稍微特殊点,其它都没有啥问题。百度了下,cancat可以用在收...

heshifk
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端、后端和全栈到底不该学什么

1、前言 在职业规划咨询过程中经常会被问到这样的问题: 老师,我是该深入钻研专精一门,走技术大牛路线,还是所有都要精通,做一个全栈工程师? 类似问题的变种还有,老师我是不是该30岁最迟...

前端攻城小牛
31分钟前
3
0
【git命令】git-stash

应用场景 应用场景:使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们...

echojson
33分钟前
2
0
centos7.3编译安装OpenSSL1.1.1b

简介 OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 安装 下载:下载地址 ...

阿dai学长
34分钟前
1
0
0基础【转行】大数据

目前大数据行业异常火爆,不少人都对大数据充满了兴趣,其中有大部分人都是之前没有接触过计算机技术的,对编程语言也不太了解,那是不是这部分零基础的朋友就学不了大数据了呢?答案当然是否...

董黎明
35分钟前
1
0
Krpano 动态传参-action

效果解释:点击热点1,触发显示或隐藏热线2。 hotspot等标签允许编写自定义属性,这里直接设置自定义属性为dk=spot6,点击spot7,显示或隐藏spot6。 action方法体中,直接引用get(dk)即可获得...

华山猛男
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部