SQL knowledge Note I

SQL 中自增列(標識列又稱標識符列):

三種特點:

  1、列的數據類型爲不帶小數的數值類型
  2、在進行插入(Insert)操作時,該列的值是由系統按一定規律生成,不允許空值
  3、列值不重複,具有標識表中每一行的作用,每個表只能有一個標識列。

 

IDENTITY(type,seed,increment),
類型(type)
在SQL Server 2000中,標識列類型必須是數值類型,如下:
decimal、int、numeric、smallint、bigint 、tinyint 其中要注意的是,當選擇decimal和numeric時,小數位數必須爲零
另外還要注意每種數據類型所有表示的數值範圍

種子(seed)
是指派給表中第一行的值,默認爲1

遞增量(increment)
相鄰兩個標識值之間的增量,默認爲1。

詳細介紹鏈接:http://bingdian2001.blog.hexun.com/33157398_d.html

                     http://msdn.microsoft.com/zh-cn/library/ms186775.aspx

 

 

應用需知:

1,爲標識列指定顯式值

使用command:

SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

參數
database  指定的表所駐留的數據庫名稱。

owner       表所有者的名稱。

table        是含有標識列的表名。

 

示例:

SET IDENTITY_INSERT [ database.[ owner.] ] { table }  ON

insert.....(顯示指定標識列 批量插入)

SET IDENTITY_INSERT [ database.[ owner.] ] { table }  OFF

 

2,返回最後插入的標識值的系統函數。

  @@IDENTITY (Transact-SQL)

  http://msdn.microsoft.com/zh-cn/library/ms187342.aspx

 

3,重置標識列 起始值。

方法1     --   清空已有數據,並且將自增自段恢復從1開始計數
truncate   table   表名    

方法2     --   不清空已有數據,但將自增自段恢復從1開始計數
dbcc   checkident(表名,RESEED,0)

 

語法
DBCC   CHECKIDENT('table_name ' [,{NORESEED | { RESEED[ ,new_reseed_value ]}}] )
參數
'table_name' 是要對其當前標識值進行檢查的表名。表名必須符合標識符規則。有關更多信息,請參見使用標識符。指定的表必須包含標識列。
NORESEED 指定不應更正當前標識值 |RESEED 指定應該更正當前標識值。
new_reseed_value
是在標識列中重新賦值時要使用的值。

 

 

4,select語句中實現第一列(非表自帶)是自增的

有主鍵的可以直接用:
select   自增列=(select   sum(1)   from   表   where   主鍵 <=a.主鍵),*   from   表   a

沒有主鍵的需要用臨時表:
select   自增列=identity(int,1,1),*   into   #tb   from   表
select   *   from   #tb
drop   table   #tb

 

5,標識列並非是唯一,有很多原因能導致標識列不唯一。

具體可參考鏈接 http://bbs.db001.com/thread-315-1-1.html

 

 sql中text/char/varchar/ntext/nchar/nvarchar的區別 .

1, "n "開頭的 表示存儲的是Unicode 編碼格式儲存字符串。即2個字節

2, 用varchar,方便我們開發系統,但是就速度和空間考慮,用varchar沒有char快,佔的空間也大!
      char一般用在字符串定長的情況下,

3,  text文本型數據可以存儲超過20億個字符串。但是也不是任何時候都是和使用文本型數據,因爲他非常佔空間,也非常消耗服務器,隨處亂用後果不堪設想!因爲即使你像一個文本型字段輸入了一個空值他都會佔用2K的空間!而當這時除了刪除該數據沒有別的辦法收回空間!效率不高這個可以肯定

 

 

Sql聯合查詢

UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合併成一個結果集合顯示:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

[ALL]選項表示將所有行合併到結果集合中。不指定該項時,被聯合查詢結果集合中的重複行將只保留一行。

聯合查詢時,查詢結果的列標題爲第一個查詢語句的列標題。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。

在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選擇表達式應具有相同的數據類型,或是可以自動將它們轉換爲相同的數據類型。在自動轉換時,對於數值類型,系統將低精度的數據類型轉換爲高精度的數據類型。

在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括號可以改變這一執行順序。例如:

查詢1 UNION (查詢2 UNION 查詢3)

 

連接查詢:

內聯(inner join)

select * from t1,t3 where  t1.id=t3.id 或

select * from t1 inner join t3 on t1.id=t3.id

左聯(left outer join)顯示左表中的所有行

右聯(right outer join)顯示右表中的所有行

全聯(full outer join)顯示兩邊表中所有行

交叉連接查詢(cross join )等價於 無條件內聯   select * from t1,t3

 

http://www.javaeye.com/topic/185385

http://www.javaeye.com/topic/450287

可參考http://blog.csdn.net/keke_wanwei/archive/2006/03/13/623455.aspx

 

 

發佈了68 篇原創文章 · 獲贊 16 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章