SQL總結(三)其他查詢
其他常用的SQL,在這里集合。
1、SELECT INTO
從一個表中選取數據,然后把數據插入另一個表中。常用於創建表的備份或者用於對記錄進行存檔。
語法:
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
IN 子句可用於向另一個數據庫中拷貝表。
1)備份表信息
SELECT ID,Name INTO Students_Backup FROM Students
2)復制到備份庫
SELECT * INTO Students IN 'Backup.mdb' FROM Students
2、IDENTITY
作用:創建唯一的,遞增的列
注意:一張表中只能有一列為IDENTITY
1)創建學生信息表時,指定其ID為自增列,從1開始,每次遞增1
IF OBJECT_ID (N'Students', N'U') IS NOT NULL DROP TABLE Students; GO --學生信息表 CREATE TABLE Students( ID int primary key IDENTITY(1,1) not null, Name nvarchar(50), Age int, Sex bit, City nvarchar(50), MajorID int )
2)如果指定了自增列,又需要插入指定ID的值,需要停止INDENTIY,執行后再開啟。
SET IDENTITY_Insert Students ON insert Students(ID,Name,Age,City) values(10,'Jim',18,'NewYank') SET IDENTITY_Insert Students OFF
3)與SELECT INTO 合用,插入行號
這個常常用於臨時表分頁時使用。
注意:如果查詢的列中有自增列,需要將其刪除,或者屏蔽,因為一張表中只有一個IDENTITY字段。
SELECT IDENTITY(int,1,1) AS RowNumber,Name,Age,Sex,City INTO Students_Backup FROM Students
SCOPE_IDENTITY()
還有一個常用的函數,與此一起使用 SCOPE_IDENTITY()
常常在有IDENTITY列的插入時,需要返回當前的行的IDENTITY的列值。
如:
IF OBJECT_ID (N'Students', N'U') IS NOT NULL DROP TABLE Students; GO --學生信息表 CREATE TABLE Students( ID int IDENTITY(1,1) PRIMARY KEY not null, Name nvarchar(50), Age int, Sex bit, City nvarchar(50), MajorID int ) INSERT INTO Students(Name,Age,Sex,City,MajorID) VALUES('Jim',18,0,'ShangHai',12) SELECT SCOPE_IDENTITY()
這個例子,每次返回插入記錄的ID的值。如果有其他關聯表用到此ID,這時就不用再從數據庫查一遍了。
3、OBJECT_ID
返回架構范圍內對象的數據庫對象標識號。
1)查詢表是否存在
SELECT OBJECT_ID(N'Students',N'U')
與以下語句等價:
SELECT id FROM sysobjects WHERE name=N'Students' and type=N'U'
2)常常用於創建表、視圖時,做判定。保證腳本的重復執行
創建學生信息表時,需要判定該表是否存在,如果存在則刪除
IF OBJECT_ID (N'Students', N'U') IS NOT NULL DROP TABLE Students; GO --學生信息表 CREATE TABLE Students( ID int primary key IDENTITY(1,1) not null, Name nvarchar(50), Age int, Sex bit, City nvarchar(50), MajorID int )
4、跨庫執行
如果系統需要多個數據庫,當執行跨庫腳本,無需再次進行連接,可以執行如下腳本
實例:當前在master庫,查詢TestDB庫的Students表信息:
USE master SELECT * FROM TestDB..Students
常用函數
1、LEN函數
計算字段值的長度
SELECT LEN(Name) AS NameLength FROM Students
2、FORMAT函數
FORMAT 函數用於對字段的顯示進行格式化。
語法:
SELECT FORMAT(column_name,format) FROM table_name
1)時間格式化
SELECT FORMAT(GETDATE(),'yyyy-MM-dd')
結果:2014-05-13
3、CAST函數
1、實例:將價格轉為整型
SELECT CAST(Price AS smallint) AS CPrice FROM Orders
結果:10
2、將字段解析為XML
SELECT CAST(Scheme AS xml) AS CPrice FROM Orders
結果:
<xml> <ProductID>101</ProductID> <ProductName>Card</ProductName> </xml>
4、CONVERT
語法:
CONVERT(data_type,expression[,style])
說明:
此樣式一般在時間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar)
相互轉換的時候才用到.
tyle數字在轉換時間時的含義如下:------------------------------------------------------------------------------------------------------------
Style(2位表示年份) | Style(4位表示年份) | 輸入輸出格式
------------------------------------------------------------------------------------------------------------
0 | 100 | mon dd yyyy hh:miAM(或PM)
------------------------------------------------------------------------------------------------------------
1 | 101 美國 | mm/dd/yy
------------------------------------------------------------------------------------------------------------
2 | 102 ANSI | yy-mm-dd
------------------------------------------------------------------------------------------------------------
3 | 103 英法 | dd/mm/yy
------------------------------------------------------------------------------------------------------------
4 | 104 德國 | dd.mm.yy
------------------------------------------------------------------------------------------------------------
5 | 105 意大利 | dd-mm-yy
------------------------------------------------------------------------------------------------------------
6 | 106 | dd mon yy
------------------------------------------------------------------------------------------------------------
7 | 107 | mon dd,yy
------------------------------------------------------------------------------------------------------------
8 | 108 | hh:mm:ss
------------------------------------------------------------------------------------------------------------
9 | 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
------------------------------------------------------------------------------------------------------------
10 | 110 美國 | mm-dd-yy
------------------------------------------------------------------------------------------------------------
11 | 111 日本 | yy/mm/dd
------------------------------------------------------------------------------------------------------------
12 | 112 ISO | yymmdd
------------------------------------------------------------------------------------------------------------
13 | 113 歐洲默認值 | dd mon yyyy hh:mi:ss:mmm(24小時制)
------------------------------------------------------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小時制)
------------------------------------------------------------------------------------------------------------
20 | 120 ODBC 規范 | yyyy-mm-dd hh:mi:ss(24小時制)
------------------------------------------------------------------------------------------------------------
21 | 121 | yyyy-mm-dd hh:mi:ss:mmm(24小時制)
------------------------------------------------------------------------------------------------------------
1)實例:時間轉換為指定形式
SELECT CONVERT(NVARCHAR(20),GETDATE(),120)
結果:2014-05-13 23:49:34
2)實例轉為XML格式
SELECT CONVERT(xml,Scheme) FROM Orders
結果:
<xml> <ProductID>101</ProductID> <ProductName>Card</ProductName> </xml>
全部腳本
SELECT UCASE(Name) FROM Students SELECT UCASE(LastName) as LastName,FirstName FROM Persons SELECT GETDATE() --2014-05-13 23:15:36.130 SELECT FORMAT(GETDATE(),'yyyy-MM-dd') --2014-05-13 IF OBJECT_ID('Orders','U') IS NOT NULL DROP TABLE Orders CREATE TABLE Orders ( ID bigint primary key not null, ProductID int, ProductName nvarchar(50), Price float, Scheme text, Created datetime default(getdate()) ) INSERT INTO Orders(ID,ProductID,ProductName,Price,Scheme) VALUES(201405130001,101,'Card',10.899,'<xml><ProductID>101</ProductID><ProductName>Card</ProductName></xml>') SELECT LEN(ProductName) AS NameLength FROM Orders --4 SELECT FORMAT(Created,'yyyy-MM-dd') AS FormatDate FROM Orders --2014-05-13 SELECT ROUND(Price,2) FROM Orders --10.9 SELECT CAST(Price AS smallint) AS CPrice FROM Orders --10 SELECT CAST(Scheme AS xml) AS CPrice FROM Orders --CONVERT SELECT CONVERT(NVARCHAR(20),GETDATE(),120) --2014-05-13 23:49:34 SELECT CONVERT(xml,Scheme) FROM Orders /* 結果: <xml> <ProductID>101</ProductID> <ProductName>Card</ProductName> </xml> */