一SELECT語句的完整語法為 SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe
*|[table
]field
[AS alias
][
[table
]field
[AS alias
][
…]]}
FROM tableexpression[
…][IN externaldatabase]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
說明
用中括號([])括起來的部分表示是可選的
用大括號({})括起來的部分是表示必須從中選擇其中的一個
FROM子句
FROM子句指定了SELECT語句中字段的來源
FROM子句後面是包含一個或多個的表達式(由逗號分開)
其中的表達式可為單一表名稱
已保存的查詢或由 INNER JOIN
LEFT JOIN 或 RIGHT JOIN 得到的復合結果
如果表或查詢存儲在外部數據庫
在IN 子句之後指明其完整路徑
例
下列SQL語句返回所有有定單的客戶
SELECT OrderID
Customer
customerID
FROM Orders Customers
WHERE Orders
CustomerID=Customers
CustomeersID
ALL
DISTINCT
DISTINCTROW
TOP謂詞
(
) ALL 返回滿足SQL語句條件的所有記錄
如果沒有指明這個謂詞
默認為ALL
例
SELECT ALL FirstName
LastName
FROM Employees
(
) DISTINCT 如果有多個記錄的選擇字段的數據相同
只返回一個
(
) DISTINCTROW 如果有重復的記錄
只返回一個
(
) TOP顯示查詢頭尾若干記錄
也可返回記錄的百分比
這是要用 TOP N PERCENT子句(其中N 表示百分比)
例
返回
%定貨額最大的定單
SELECT TOP
PERCENT*
FROM [ Order Details]
ORDER BY UnitPrice*Quantity*(
Discount) DESC
用 AS 子句為字段取別名
如果想為返回的列取一個新的標題
或者
經過對字段的計算或總結之後
產生了一個新的值
希望把它放到一個新的列裡顯示
則用AS保留
例
返回FirstName字段取別名為NickName
SELECT FirstName AS NickName
LastName
City
FROM Employees
例
返回新的一列顯示庫存價值
SELECT ProductName
UnitPrice
UnitsInStock
UnitPrice*UnitsInStock AS valueInStock
FROM Products
二 WHERE 子句指定查詢條件 比較運算符
比較運算符 含義
= 等於
> 大於
< 小於
>= 大於等於
<= 小於等於
<> 不等於
!> 不大於
!< 不小於
例
返回
年
月的定單
SELECT OrderID
CustomerID
OrderDate
FROM Orders
WHERE OrderDate>#
/
/
# AND OrderDate<#
/
/
#
注意
Mcirosoft JET SQL 中
日期用
#
定界
日期也可以用Datevalue()函數來代替
在比較字符型的數據時
要加上單引號
尾空格在比較中被忽略
例
WHERE OrderDate>#
#
也可以表示為
WHERE OrderDate>Datevalue(
/
/
)
使用 NOT 表達式求反
例
查看
年
月
日以後的定單
WHERE Not OrderDate<=#
/
/
#
范圍(BETWEEN 和 NOT BETWEEN)
BETWEEN …AND…運算符指定了要搜索的一個閉區間
例
返回
年
月到
年
月的定單
WHERE OrderDate Between #
/
/
# And #
/
/
#
列表(IN
NOT IN)
IN 運算符用來匹配列表中的任何一個值
IN子句可以代替用OR子句連接的一連串的條件
例
要找出住在 London
Paris或Berlin的所有客戶
SELECT CustomerID
CompanyName
ContactName
City
FROM Customers
WHERE City In(
London
Paris
Berlin
)
模式匹配(LIKE)
LIKE運算符檢驗一個包含字符串數據的字段值是否匹配一指定模式
LIKE運算符裡使用的通配符
通配符 含義
? 任何一個單一的字符
* 任意長度的字符
#
~
之間的單一數字
[字符列表] 在字符列表裡的任一值
[!字符列表] 不在字符列表裡的任一值
指定字符范圍
兩邊的值分別為其上下限
例
返回郵政編碼在(
)
到(
)
之間的客戶
SELECT CustomerID
CompanyName
City
Phone
FROM Customers
WHERE Phone Like
(
)
####
LIKE運算符的一些樣式及含義
樣式 含義 不符合
LIKE
A*
A後跟任意長度的字符 Bc
c
LIKE
[*]
*
LIKE
?
與
之間有任意一個字符
wer
LIKE
##
kd
LIKE
[a
z]
a
z間的任意一個字符
%
LIKE
[!
]
非
間的任意一個字符
LIKE
[[]
*
三 用ORDER BY子句排序結果 ORDER子句按一個或多個(最多
個)字段排序查詢結果
可以是升序(ASC)也可以是降序(DESC)
缺省是升序
ORDER子句通常放在SQL語句的最後
ORDER子句中定義了多個字段
則按照字段的先後順序排序
例
SELECT ProductName
UnitPrice
UnitInStock
FROM Products
ORDER BY UnitInStock DESC
UnitPrice DESC
ProductName
ORDER BY 子句中可以用字段在選擇列表中的位置號代替字段名
可以混合字段名和位置號
例
下面的語句產生與上列相同的效果
SELECT ProductName
UnitPrice
UnitInStock
FROM Products
ORDER BY
DESC
DESC
四 運用連接關系實現多表查詢 例
找出同一個城市中供應商和客戶的名字
SELECT Customers
CompanyName
Suppliers
ComPany
Name
FROM Customers
Suppliers
WHERE Customers
City=Suppliers
City
例
找出產品庫存量大於同一種產品的定單的數量的產品和定單
SELECT ProductName
OrderID
UnitInStock
Quantity
FROM Products
[Order Deails]
WHERE Product
productID=[Order Details]
ProductID
AND UnitsInStock>Quantity
另一種方法是用 Microsof JET SQL 獨有的 JNNER JOIN
語法
FROM table
INNER JOIN table
ON table
field
comparision table
field
其中comparision 就是前面WHERE子句用到的比較運算符
SELECT FirstName
lastName
OrderID
CustomerID
OrderDate
FROM Employees
INNER JOIN Orders ON Employees
EmployeeID=Orders
EmployeeID
注意
INNER JOIN不能連接Memo OLE Object Single Double 數據類型字段
在一個JOIN語句中連接多個ON子句
語法
SELECT fields
FROM table
INNER JOIN table
ON table
field
compopr table
field
AND
ON table
field
compopr table
field
OR
ON table
field
compopr table
field
也可以
SELECT fields
FROM table
INNER JOIN
(table
INNER JOIN [( ]table
[INNER JOER] [( ]tablex[INNER JOIN]
ON table
field
compopr table
field
ON table
field
compopr table
field
ON table
field
compopr table
field
外部連接返回更多記錄
在結果中保留不匹配的記錄
不管存不存在滿足條件的記錄都要返回另一側的所有記錄
FROM table [LEFT|RIGHT]JOIN table
ON table
field
comparision table
field
用左連接來建立外部連接
在表達式的左邊的表會顯示其所有的數據
例
不管有沒有定貨量
返回所有商品
SELECT ProductName
OrderID
FROM Products
LEFT JOIN Orders ON Products
PrductsID=Orders
ProductID
From:http://tw.wingwit.com/Article/program/Oracle/201311/16954.html