SQL(STructured Query Language)是一種資料庫查詢和程式設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統。
SQL同時也是資料庫腳本檔案的擴展名。
SQL是高級的非過程化程式語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的接口。它以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程式實現的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常複雜的語句。
SQL簡介
SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯繫,進行溝通。按照ANSI(美國國家標準協會)的規定,SQL被作為關係型資料庫管理系統的標準語言。SQL語句可以用來執行各種各樣的操作,例如更新資料庫中的數據,從資料庫中提取數據等。目前,絕大多數流行的關係型資料庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都採用了SQL語言標準。雖然很多資料庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的資料庫操作。
結構化查詢語言(Structured Query Language)最早是IBM的聖約瑟研究實驗室為其關係資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的套用。如今無論是像Oracle、Sybase、Informix、SQL Server這些大型的資料庫管理系統,還是像Visual Foxporo、PowerBuilder這些PC上常用的資料庫開發系統,都支持SQL語言作為查詢語言。
SQL Server
SQL Server 是一個關係資料庫管理系統它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同開發的於1988 年推出了第一個OS/2 版本在Windows NT 推出後Microsoft與Sybase 在SQL Server 的開發上就分道揚鑣了Microsoft 將SQL Server 移植到Windows NT 系統上專注於開發推廣SQL Server 的Windows NT 版本Sybase 則較專注於SQL Server在UNIX 作業系統上的套用在本書中介紹的是Microsoft SQL Server 以後簡稱為SQL Server或MS SQL Server .
SQL Server 2000 是Microsoft 公司推出的SQL Server 資料庫管理系統的最新版本該版本繼承了SQL Server 7.0 版本的優點同時又比它增加了許多更先進的功能具有使用方便可伸縮性好與相關軟體集成程度高等優點可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2000 的大型多處理器的伺服器等多種平台使用.
SQL語言包含4個部分:
1.數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。
DDL 用於定義和管理物件,例如資料庫、資料表以及檢視表,DDL 陳述式通常包括每個物件的CREATE、ALTER 以及 DROP 命令
2.數據操作語言(DML),例如:INSERT、UPDATE、DELETE語句。
DML 利用 INSERT、SELECT、UPDATE 及 DELETE 等陳述式來操作資料庫物件所包含的資料。
3.數據查詢語言(DQL),例如:SELECT語句。
UPDATE 陳述式用來更新或改變一列或多列中的值。
4.數據控制語言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。
DCL是用來管理資料庫的語言。包含管理許可權及數據更改。
SQL查詢語句大全
一、簡單查詢
簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜尋條件等。
例如,下面的語句查詢testtable表中姓名為"張三"的nickname欄位和email欄位。
SELECT nickname,email
FROM testtable
WHERE
(一) 選擇列表
選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變數(包括局部變數和全局變數)等構成。
1、選擇所有列
例如,下面語句顯示testtable表中所有列的數據:
SELECT *
FROM testtable
2、選擇部分列並指定它們的顯示次序
查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
SELECT nickname,email
FROM testtable
3、更改列標題
在選擇列表中,可重新指定列標題。定義格式為:
列標題=列名
列名 列標題
如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列標題:
SELECT 暱稱=nickname,電子郵件=email
FROM testtable
4、刪除重複行
SELECT語句中使用ALL或DISTINCT選項來顯示錶中符合條件的所有行或刪除其中重複的數據行,默認為ALL。使用DISTINCT選項時,對於所有重複的數據行在SELECT返回的結果集合中只保留一行。
5、限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說明返回n行,而TOP n PERCENT時,說明n是表示一百分數,指定返回的行數等於總行數的百分之幾。
例如:
SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable
(二)FROM子句
FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應使用下面語句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名:
表名 as 別名
表名 別名
例如上面語句可用表的別名格式表示為:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT不僅能從表或視圖中檢索數據,它還能夠從其它查詢語句所返回的結果集合中查詢數據。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,將SELECT返回的結果集合給予一別名t,然後再從中檢索數據
三) 使用WHERE子句設定查詢條件
WHERE子句設定查詢條件,過濾掉不需要的數據行。例如下面語句查詢年齡大於20的數據:
SELECT *
FROM usertable
WHERE age>20
WHERE子句可包括各種條件運算符:
比較運算符(大小比較):>、>=、=、、!>、!=10 AND age、>=、、!。
3、自然連線:在連線條件中使用等於(=)運算符比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。
例,下面使用等值連線列出authors和publishers表中位於同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然連線,在選擇列表中刪除authors 和publishers 表中重複列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連線
內連線時,返回查詢結果集合中的僅是符合查詢條件( WHERE 搜尋條件或 HAVING 條件)和連線條件的行。而採用外連線時,它返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表(左外連線時)、右表(右外連線時)或兩個邊接表(全外連線)中的所有數據行。如下面使用左外連線將論壇內容和作者信息連線起來:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連線將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三)交叉連線
交叉連線不帶WHERE 子句,它返回被連線的兩個表所有數據行的笛卡爾積,返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type