SQL 指令應用介紹
何謂 SQL SQL 是「結構化查詢語言」 ( S tructured Q uery L anguage )的簡稱, 讀作「 Ess Que Ell 」或「 sequel 」。 SQL 最初是由 IBM 的研究中心在 1970 年代初期 所開發的,是專門用於關連式資料庫的一種查詢 語言。 利用 SQL 可以用來定義資料庫結構、建立表格、 指定欄位型態與長度,也能新增、異動或查詢資 料,它已經成為關聯式資料庫的標準語言。
查詢語言的標準 SQL 的標準化作業,主要是由 ANSI (美國國家 標準學會)與 ISO (國際標準組織)這兩個組織 所推動的。 最初是在 1986 年由 ANSI 制定其標準化規格,隨 後在 1992 年時再推出更新的版本,就是所謂的 「 SQL-92 」、「 SQL/92 」或「 SQL2 」。目前, 新一代的規格仍在持續發展中,即「 SQL-99 」規 格。 一般稱之為 ANSI-92
SQL 的普及性 資料庫廠商 –Microsoft Access for Windows – 現今市面上所有關聯性資料庫軟體幾乎都支援 SQL 。 – 市面上關聯性資料庫軟體例如: Oracle 、 Sybase 、 DB2 、 Microsoft SQL Server 。 Microsoft SQL Server 所使用的 SQL 稱之為 Transact-SQL (T-SQL) ,它強化了原有的 SQL 功能。
SQL 的分類 資料定義語言 ( Data Definition Language , DDL ) – 可以用來建立、更改或刪除 table 、 schema 、 domain 、 index 與 view 。 – 主要指令有三: CREATE 、 ALTER 與 DROP 。 資料操作語言 ( Data Manipulation Language , DML ) –DML 係用來操作資料。 – 主要指令有四: SELECT 、 INSERT 、 UPDATE 和 DELETE 。 資料控制語言 ( Data Control Language , DCL ) – DCL 提供資料庫的安全性。 – 主要指令有四: GRANT 和 REVOKE 、 COMMIT 、 ROLLBACK 。
資料表 (Tables) 在關聯式的資料庫系統中,表格是存放資料的地方。 在表格中,橫向的資料我們稱之為行 (Row) ,其意義 是一筆資料錄 (Record) ; 而縱向的資料我們稱之為欄位 (Column) ,其意義是在 同一表格中具有相同屬性的資料集合。
檢視表 (Views) 所謂的 VIEW 物件是從一個或多個實際儲存資料 的表格中所衍生出來的 可將它想像成只是一個定義在表格上的虛擬表格 而被 VIEW 參考使用到的表格則稱之為基底表格
Table 之間的關聯 Products 表格的 –PK(Primary Key 主鍵 ) 是 Prod_num+supp_code –FK(Forgien Key 外鍵 ) 是 supp_code Suppliers 表格的 –PK(Primary Key 主鍵 ) 是 supp_code 想查詢各產品的供應商名稱 – 必須將 Products 表格 FK 與 Suppliers 表格 PK 作串聯關係,才能將 供應商名稱 (supp_name) 找到。
SQL 基本語法 語法的四大基本敘述: –Select 敘述 –Updae 敘述 –Insert 敘述 –Delete 敘述
SELECT 敘述(選取查詢) 語法: SELECT {field list} FROM {table} WHERE {criteria} ORDER BY {order field list} 範例: SELECT StuID, Cname, Sex FROM USTD83A WHERE Dep="332" and Grade="2" ORDER BY StuID
關聯性 SELECT 語法: SELECT {field list} FROM {table1} INNER JOIN {table2} ON {table1.field} = {table2.field} WHERE {criteria} 範例: SELECT UCHC83A.StuID, USTD83A.Cname FROM UCHC83A INNER JOIN USTD83A ON UCHC83A.StuID= USTD83A.StuID WHERE UCHC83A.Crsno = "1589"
UPDATE 敘述(修改資料) 語法: UPDATE {table} SET {field} = new value WHERE {criteria} 範例: UPDATE USTD83A SET Grade = Grade + 1 WHERE Grade = 4
INSERT 敘述(新增資料) 語法: INSERT INTO {table} VALUES (new value) 範例: INSERT INTO ZIPCODE VALUES (“111”, “ 士林區 ”, “ 台北市 ")
DELETE 刪除資料(修改資料) 語法: DELETE FROM {table} WHERE {criteria} 範例: DELETE FROM USTD83A WHERE Grade = 4
聚合函數 一個您可以用來計算合計的函數, 例如 Sum 、 Count 、 Avg 及 Max 。 在撰寫運算式及在程式設計時,您可以使 用 SQL 聚合函數 及範圍聚合函數來計算各 種統計值。
SQL 指令實例介紹 進階 Select 查詢指令
基本的 Select 指令 SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ListPrice > $40 ORDER BY ListPrice ASC
透過 AS 子句可指派別名給結果集資料行 USENorthwind SELECTCategoryName AS ' 產品名稱 ', Description AS ' 說明 ' FROM dbo.Categories
排序資料 (ORDER BY) SELECTcategoryid ' 產品類別代號 ',productname,unitprice ' 單價 ' FROMNorthWind.dbo.products ORDER BY unitprice ASC
移除重複的資料列 (DISTINCT) 使用 DISTINCT 關鍵字列出不重複的 Title 資料列 SELECT DISTINCT Title FROM AdventureWorks.HumanResources.Employee ORDER BY Title
使用運算式計算的結果 SELECT OrderID ' 訂單編號 ',ProductID ' 產品編號 ', (UnitPrice*Quantity)*(1-Discount) ' 總金額 ' FROM Northwind.dbo.[Order Details] Order By 3 DESC
透過 GETDATE() 系統函數取得當下執行的 日期與時間,並透過運算子示範加減日期。 SELECT GETDATE() ' 今天 ',GETDATE()+1 ' 明天 ',GETDATE()-2 ' 前天 '
加號「 + 」運用在字串與數值運算式中的執行結果 USE AdventureWorks; SELECT FullName=c.FirstName+'.'+c.LastName, VacationHours, SickLeaveHours, 休假總時數 =VacationHours + SickLeaveHours FROM HumanResources.Employee AS e JOIN Person.Contact AS c ON e.ContactID = c.ContactID ORDER BY 休假總時數 ASC
資料型別不同的資料無法計算 SELECT ProductID,Name,04+ProductNumber FROM AdventureWorks.Production.Product p
透過 CONVERT 轉換函數,將數值資料轉換 為字串型別,則兩個相同型別的字串即可相加 SELECT ProductID,Name,convert(nvarchar,'04')+ProductNumber FROM AdventureWorks.Production.Product p
查詢國家欄位內容為 USA 的員工資料 USE NorthWind SELECT country,city,lastname FROM employees WHERE country='USA'
透過不等運算子傳回所有位在 USA 以外的員工資料 USE NorthWind SELECT country,city,lastname FROM employees WHERE country<>'USA'
透過不等運算式找出庫存量大於 100 的產品資料 USE NorthWind SELECT ProductName,UnitPrice,UnitsInStock FROM dbo.Products WHERE UnitsInStock>110
使用萬用字元 SELECT Phone FROM AdventureWorks.Person.Contact WHERE Phone like '415%' SELECT Phone FROM AdventureWorks.Person.Contact WHERE Phone = '415%' USE AdventureWorks select distinct City, PostalCode from Person.Address where PostalCode LIKE '[A-E][A-Z][0-9][0-9]' GO
使用邏輯運算子 (AND 、 OR 與 NOT ) SELECT ProductID, ProductModelID, Color FROM AdventureWorks.Production.Product WHERE ProductModelID = 20 OR ProductModelID = 21 AND Color = 'Red' SELECT ProductID, ProductModelID, Color FROM AdventureWorks.Production.Product WHERE (ProductModelID = 20 OR ProductModelID = 21) AND Color = 'Red'
取回指定範圍內的資料 ( 使用 BETWEEN AND 關鍵字 ) SELECT ProductID, Name,ListPrice FROM AdventureWorks.Production.Product WHERE ListPrice BETWEEN 20 AND 25
使用清單當做搜尋條件 ( 使用 IN 關鍵字 ) USE Northwind SELECT companyname,country From suppliers WHERE country IN ('Japan','Italy','UK','Australia')
使用彙總函數 SELECT SUM(Quantity) as ' 訂購總數 ', COUNT(Quantity) as ' 訂單筆數 ', AVG(Quantity) as ' 平均數量 ', MIN(Quantity) as ' 單筆訂購最小值 ', MAX(Quantity) as ' 單筆訂購最大值 ' FROM Northwind.dbo.[Order Details] WHERE ProductID=51
列出前 N 筆資料 SELECT TOP (5) EmployeeID,count(EmployeeID) 訂單數量 FROM northwind.dbo.Orders GROUP BY EmployeeID ORDER BY 訂單數量 DESC
關連多個資料表 SELECT a.EmployeeID, LastName, FirstName, OrderDate FROM Employees a LEFT JOIN Orders b ON a.EmployeeID = b.EmployeeID
使用 SELECT INTO SELECT * INTO TT FROM ( SELECT companyname,country From suppliers WHERE country IN ('Japan','Italy','UK','Australia') ) TT1
使用 Truncate 與 Drop TRUNCATE TABLE TT DROPTABLETT