SQLServer Transact SQL全集)

來源:互聯網
上載者:User

 

--語 句                                功 能

1、資料操作
SELECT      --從資料庫表中檢索資料行和列
INSERT      --向資料庫表添加新資料行
DELETE      --從資料庫表中刪除資料行
UPDATE      --更新資料庫表中的資料

2、資料定義
CREATE TABLE    --建立一個資料庫表
DROP TABLE     --從資料庫中刪除表
ALTER TABLE     --修改資料庫表結構
CREATE VIEW     --建立一個視圖
DROP VIEW     --從資料庫中刪除視圖
CREATE INDEX    --為資料庫表建立一個索引
DROP INDEX     --從資料庫中刪除索引
CREATE PROCEDURE   --建立一個預存程序
DROP PROCEDURE    --從資料庫中刪除預存程序
CREATE TRIGGER    --建立一個觸發器
DROP TRIGGER    --從資料庫中刪除觸發器
CREATE SCHEMA    --向資料庫添加一個新模式
DROP SCHEMA     --從資料庫中刪除一個模式
CREATE DOMAIN    --建立一個資料範圍
ALTER DOMAIN    --改變域定義
DROP DOMAIN     --從資料庫中刪除一個域

3、資料控制
GRANT      --授予使用者存取權限
DENY      --拒絕使用者訪問
REVOKE      --解除使用者存取權限

4、事務控制
COMMIT      --結束當前事務
ROLLBACK     --中止當前事務
SET TRANSACTION    --定義當前交易資料訪問特徵

5、程式化SQL
DECLARE      --為查詢設定遊標
EXPLAN      --為查詢描述資料訪問計劃
OPEN      --檢索查詢結果開啟一個遊標
FETCH      --檢索一行查詢結果
CLOSE      --關閉遊標
PREPARE      --為動態執行準備SQL 陳述式
EXECUTE      --動態地執行SQL 陳述式
DESCRIBE     --描述準備好的查詢

6、局部變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'

7、全域變數
---必須以@@開頭

8、IF 語句
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
 print 'x > y' --列印字串'x > y'
else if @y > @z
 print 'y > z'
else print 'z > y'

9、CASE 語句
use pangu
update employee
set e_wage =
 case
  when job_level = ’1’ then e_wage*1.08
  when job_level = ’2’ then e_wage*1.07
  when job_level = ’3’ then e_wage*1.06
  else e_wage*1.05
 end

10、WHILE CONTINUE BREAK 語句
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
 begin
  print @x --列印變數x 的值
  while @y < 3
   begin
    select @c = 100*@x + @y
    print @c --列印變數c 的值
    select @y = @y + 1
   end
  select @x = @x + 1
  select @y = 1
 end

11、WAITFOR語句
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee

 

12、SELECT語句

   select *(列名) from table_name(表名) where column_name operator value
   ex:(宿主)
  select * from stock_information where stockid   = str(nid)
     stockname = 'str_name'
     stockname like '% find this %'
     stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
     stockname like '[^F-M]%'   --------- (^排除指定範圍)
     --------- 只能在使用like關鍵字的where子句中使用萬用字元)
     or stockpath = 'stock_path'
     or stocknumber < 1000
     and stockindex = 24
     not stocksex = 'man'
     stocknumber between 20 and 100
     stocknumber in(10,20,30)
     order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
     order by 1,2 --------- by列號
     stockname = (select stockname from stock_information  where stockid  = 4)
     --------- 子查詢
     --------- 除非能確保內層select只返回一個行的值,
     --------- 否則應在外層where子句中用一個in限定符
  select distinct column_name form table_name --------- distinct指定檢索專屬的列值,不重複
  select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
  select stockname , "stocknumber" = count(*) from table_name group by stockname
                                      --------- group by 將表按行分組,指定列中有相同的值
          having count(*) = 2  ---------  having選定指定的組
       
  select *
  from table1, table2                 
  where table1.id *= table2.id -------- 左外部串連,table1中有的而table2中沒有得以null表示
     table1.id =* table2.id -------- 右外部串連

  select stockname from table1
  union [all]  -----  union合并查詢結果集,all-保留重複行
  select stockname from table2

13、insert 語句

  insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
              value (select Stockname , Stocknumber from Stock_table2)---value為select語句

14、update語句

  update table_name set Stockname = "xxx" [where Stockid = 3]
         Stockname = default
         Stockname = null
         Stocknumber = Stockname + 4

15、delete語句

  delete from table_name where Stockid = 3
  truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
  drop table table_name --------------- 完全刪除表

16、alter table*** --- 修改資料庫表結構

  alter table database.owner.table_name add column_name char(2) null .....
  sp_help table_name ---- 顯示表已有特徵
  create table table_name (name char(20), age smallint, lname varchar(30))
  insert into table_name select ......... ----- 實現刪除列的方法(建立新表)
  alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
   
17、常用函數

----統計函數----
AVG    --求平均值
COUNT   --統計數目
MAX    --求最大值
MIN    --求最小值
SUM    --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id

--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
 (select max(e_wage)
  from employee)

--STDEV()
--STDEV()函數返回運算式中所有資料的標準差

--STDEVP()
--STDEVP()函數返回總體標準差

--VAR()
--VAR()函數返回運算式中所有值的統計變異數

--VARP()
--VARP()函數返回總體變異數

----算術函數----

/***三角函數***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函數***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
        --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
                       --把弧度轉換為角度返回與運算式相同的資料類型可為
        --INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換為弧度返回與運算式相同的資料類型可為
        --INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression)  --返回運算式的指數值
LOG(float_expression)  --返回運算式的自然對數值
LOG10(float_expression)--返回運算式的以10 為底的對數值
SQRT(float_expression) --返回運算式的平方根
/***取近似值函數***/
CEILING(numeric_expression)  --返回>=運算式的最小整數返回的資料類型與運算式相同可為
        --INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression)    --返回<=運算式的最小整數返回的資料類型與運算式相同可為
        --INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression)    --返回以integer_expression 為精度的四捨五入值返回的資料
        --類型與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression)      --返回運算式的絕對值返回的資料類型與運算式相同可為
        --INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression)     --測試參數的加號或減號返回0 零值1 正數或-1 負數返回的資料類型
        --與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI()       --傳回值為π 即3.1415926535897936
RAND([integer_expression])   --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數

18、字串函數
ASCII()         --函數返回字元運算式最左端字元的ASCII 碼值
CHAR()   --函數用於將ASCII 碼轉換為字元
    --如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER()   --函數把字串全部轉換為小寫
UPPER()   --函數把字串全部轉換為大寫
STR()   --函數把數值型資料轉換為字元型資料
LTRIM()   --函數把字串頭部的空格去掉
RTRIM()   --函數把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()  --函數返回部分字串
CHARINDEX(),PATINDEX()  --函數返回字串中某個指定的子串出現的開始位置
SOUNDEX()  --函數返回一個四位字元碼
    --SOUNDEX函數可用來尋找聲音相似的字串但SOUNDEX函數對數字和漢字均只返回0 值    
DIFFERENCE()    --函數返回由SOUNDEX 函數返回的兩個字元運算式的值的差異
    --0 兩個SOUNDEX 函數傳回值的第一個字元不同
    --1 兩個SOUNDEX 函數傳回值的第一個字元相同
    --2 兩個SOUNDEX 函數傳回值的第一二個字元相同
    --3 兩個SOUNDEX 函數傳回值的第一二三個字元相同
    --4 兩個SOUNDEX 函數傳回值完全相同

QUOTENAME()  --函數返回被特定字元括起來的字串
/*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/

REPLICATE()     --函數返回一個重複character_expression 指定次數的字串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/

REVERSE()       --函數將指定的字串的字元排列順序顛倒
REPLACE()       --函數返回被替換了指定子串的字串
/*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/

SPACE()   --函數返回一個有指定長度的空白字串
STUFF()   --函數用另一子串替換字串指定位置長度的子串

19、資料類型轉換函式----
CAST() 函數文法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數文法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])

select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199   Jan 15 2000

20、日期函數----
DAY()   --函數返回date_expression 中的日期值
MONTH()   --函數返回date_expression 中的月份值
YEAR()   --函數返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
    --函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
    --函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>)  --函數以字串的形式返回日期的指定部分
DATEPART(<datepart> , <date>)  --函數以整數值的形式返回日期的指定部分
GETDATE()  --函數以DATETIME 的預設格式返回系統當前的日期和時間

21、系統函數----
APP_NAME()      --函數返回當前執行的應用程式的名稱
COALESCE()  --函數返回眾多運算式中第一個非NULL 運算式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定欄位的長度值
COL_NAME(<table_id>, <column_id>)   --函數返回表中指定欄位的名稱即列名
DATALENGTH() --函數返回日期運算式的資料的實際長度
DB_ID(['database_name']) --函數返回資料庫的編號
DB_NAME(database_id)  --函數返回資料庫的名稱
HOST_ID()     --函數返回伺服器端電腦的名稱
HOST_NAME()     --函數返回伺服器端電腦的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
 --IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
 into newtable
 from oldtable*/
ISDATE()  --函數判斷所給定的運算式是否為合理日期
ISNULL(<check_expression>, <replacement_value>) --函數將運算式中的NULL 值用指定值替換
ISNUMERIC()  --函數判斷所給定的運算式是否為合理的數值
NEWID()   --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)
 --NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值

22、數學函數

  1.絕對值
  S:select abs(-1) value
  O:select abs(-1) value from dual

  2.取整(大)
  S:select ceiling(-1.001) value
  O:select ceil(-1.001) value from dual

  3.取整(小)
  S:select floor(-1.001) value
  O:select floor(-1.001) value from dual

  4.取整(截取)
  S:select cast(-1.002 as int) value
  O:select trunc(-1.002) value from dual

  5.四捨五入
  S:select round(1.23456,4) value 1.23460
  O:select round(1.23456,4) value from dual 1.2346

  6.e為底的冪
  S:select Exp(1) value 2.7182818284590451
  O:select Exp(1) value from dual 2.71828182

  7.取e為底的對數
  S:select log(2.7182818284590451) value 1
  O:select ln(2.7182818284590451) value from dual; 1

  8.取10為底對數
  S:select log10(10) value 1
  O:select log(10,10) value from dual; 1

  9.取平方
  S:select SQUARE(4) value 16
  O:select power(4,2) value from dual 16

  10.取平方根
  S:select SQRT(4) value 2
  O:select SQRT(4) value from dual 2

  11.求任意數為底的冪
  S:select power(3,4) value 81
  O:select power(3,4) value from dual 81

  12.取隨機數
  S:select rand() value
  O:select sys.dbms_random.value(0,1) value from dual;

  13.取符號
  S:select sign(-8) value -1
  O:select sign(-8) value from dual -1
  ----------數學函數

  14.圓周率
  S:SELECT PI() value 3.1415926535897931
  O:不知道

  15.sin,cos,tan 參數都以弧度為單位
  例如:select sin(PI()/2) value 得到1(SQLServer)

  16.Asin,Acos,Atan,Atan2 返回弧度

  17.弧度角度互換(SQLServer,Oracle不知道)
  DEGREES:弧度-〉角度
  RADIANS:角度-〉弧度

  ---------數值間比較

  18. 求集合最大值
  S:select max(value) value from
  (select 1 value
  union
  select -2 value
  union
  select 4 value
  union
  select 3 value)a

  O:select greatest(1,-2,4,3) value from dual

  19. 求集合最小值
  S:select min(value) value from
  (select 1 value
  union
  select -2 value
  union
  select 4 value
  union
  select 3 value)a

  O:select least(1,-2,4,3) value from dual

  20.如何處理null值(F2中的null以10代替)
  S:select F1,IsNull(F2,10) value from Tbl
  O:select F1,nvl(F2,10) value from Tbl

  --------數值間比較

  21.求字元序號
  S:select ascii('a') value
  O:select ascii('a') value from dual

  22.從序號求字元
  S:select char(97) value
  O:select chr(97) value from dual

  23.串連
  S:select '11'+'22'+'33' value
  O:select CONCAT('11','22')||33 value from dual

  23.子串位置 --返回3
  S:select CHARINDEX('s','sdsq',2) value
  O:select INSTR('sdsq','s',2) value from dual

  23.模糊子串的位置 --返回2,參數去掉中間%則返回7
  S:select patindex('%d%q%','sdsfasdqe') value
  O:oracle沒發現,但是instr可以通過第四霾問刂瞥魷執問?BR>  select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

  24.求子串
  S:select substring('abcd',2,2) value
  O:select substr('abcd',2,2) value from dual

  25.子串代替 返回aijklmnef
  S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
  O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

  26.子串全部替換
  S:沒發現
  O:select Translate('fasdbfasegas','fa','我' ) value from dual

  27.長度
  S:len,datalength
  O:length

  28.大小寫轉換 lower,upper

  29.單字首大寫
  S:沒發現
  O:select INITCAP('abcd dsaf df') value from dual

  30.左補空格(LPAD的第一個參數為空白格則同space函數)
  S:select space(10)+'abcd' value
  O:select LPAD('abcd',14) value from dual

  31.右補空格(RPAD的第一個參數為空白格則同space函數)
  S:select 'abcd'+space(10) value
  O:select RPAD('abcd',14) value from dual

  32.刪除空格
  S:ltrim,rtrim
  O:ltrim,rtrim,trim

  33. 重複字串
  S:select REPLICATE('abcd',2) value
  O:沒發現

  34.發音相似性比較(這兩個單詞傳回值一樣,發音相同)
  S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
  O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
  SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比較soundex的差
  返回0-4,4為同音,1最高

23、日期函數

  35.系統時間
  S:select getdate() value
  O:select sysdate value from dual

  36.前後幾日
  直接與整數相加減

  37.求日期
  S:select convert(char(10),getdate(),20) value
  O:select trunc(sysdate) value from dual
  select to_char(sysdate,'yyyy-mm-dd') value from dual

  38.求時間
  S:select convert(char(8),getdate(),108) value
  O:select to_char(sysdate,'hh24:mm:ss') value from dual

  39.取日期時間的其他部分
  S:DATEPART 和 DATENAME 函數 (第一個參數決定)
  O:to_char函數 第二個參數決定

  參數---------------------------------下表需要補充
  year yy, yyyy
  quarter qq, q (季度)
  month mm, m (m O無效)
  dayofyear dy, y (O表星期)
  day dd, d (d O無效)
  week wk, ww (wk O無效)
  weekday dw (O不清楚)
  Hour hh,hh12,hh24 (hh12,hh24 S無效)
  minute mi, n (n O無效)
  second ss, s (s O無效)
  millisecond ms (O無效)
  ----------------------------------------------

  40.當月最後一天
  S:不知道
  O:select LAST_DAY(sysdate) value from dual

  41.本星期的某一天(比如星期日)
  S:不知道
  O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

  42.字串轉時間
  S:可以直接轉或者select cast('2004-09-08'as datetime) value
  O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

  43.求兩日期某一部分的差(比如秒)
  S:select datediff(ss,getdate(),getdate()+12.3) value
  O:直接用兩個日期相減(比如d1-d2=12.3)
  SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

  44.根據差值求新的日期(比如分鐘)
  S:select dateadd(mi,8,getdate()) value
  O:SELECT sysdate+8/60/24 vaule FROM DUAL;

  45.求不同時區時間
  S:不知道
  O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

  -----時區參數,北京在東8區應該是Ydt-------
  AST ADT 大西洋標準時間
  BST BDT 白令海標準時間
  CST CDT 中部標準時間
  EST EDT 東部標準時間
  GMT 格林尼治標準時間
  HST HDT 阿拉斯加—夏威夷標準時間
  MST MDT 山區標準時間
  NST 紐芬蘭標準時間
  PST PDT 太平洋標準時間
  YST YDT YUKON標準時間

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.