SQL語句的基本語法
發(fā)布日期:2022-02-05 10:03 | 文章來源:站長之家
尹紅寫的,實在忍不主貼在這里做為查看資料.
因為原文是在word里面寫的,段落有點亂.
一.Select語句的完整語法為:
Select[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}
FROMtableexpression[,…][INexternaldatabase]
[Where…]
[GROUPBY…]
[HAVING…]
[ORDERBY…]
[WITHOWNERACCESSOPTION]
說明:
用中括號([])括起來的部分表示是可選的,用大括號({})括起來的部分是表示必須從中選擇其中的一個。 一.1FROM子句
FROM子句指定了Select語句中字段的來源。FROM子句后面是包含一個或多個的表達式(由逗號分開),其中的表達式可為單一表名稱、已保存的查詢或由INNERJOIN、LEFTJOIN或RIGHTJOIN得到的復合結果。如果表或查詢存儲在外部數(shù)據庫,在IN子句之后指明其完整路徑。
例:下列SQL語句返回所有有定單的客戶:
SelectOrderID,Customer.customerID
FROMOrdersCustomers
WhereOrders.CustomerID=Customers.CustomeersID 一.2ALL、DISTINCT、DISTINCTROW、TOP謂詞
(1)ALL返回滿足SQL語句條件的所有記錄。如果沒有指明這個謂詞,默認為ALL。
例:SelectALLFirstName,LastName
FROMEmployees
(2)DISTINCT如果有多個記錄的選擇字段的數(shù)據相同,只返回一個。
(3)DISTINCTROW如果有重復的記錄,只返回一個
(4)TOP顯示查詢頭尾若干記錄。也可返回記錄的百分比,這是要用TOPNPERCENT子句(其中N表示百分比)
例:返回5%定貨額最大的定單
SelectTOP5PERCENT*
FROM[OrderDetails]
ORDERBYUnitPrice*Quantity*(1-Discount)DESC 一.3用AS子句為字段取別名
如果想為返回的列取一個新的標題,或者,經過對字段的計算或總結之后,產生了一個新的值,希望把它放到一個新的列里顯示,則用AS保留。
例:返回FirstName字段取別名為NickName
SelectFirstNameASNickName,LastName,City
FROMEmployees
例:返回新的一列顯示庫存價值
SelectProductName,UnitPrice,UnitsInStock,UnitPrice*UnitsInStockASvalueInStock
FROMProducts 二.Where子句指定查詢條件 二.1比較運算符
比較運算符含義
=等于
>大于
<小于
>=大于等于
<=小于等于
<>不等于
!>不大于
!<不小于
例:返回96年1月的定單
SelectOrderID,CustomerID,OrderDate
FROMOrders
WhereOrderDate>#1/1/96#ANDOrderDate<#1/30/96#
注意:
McirosoftJETSQL中,日期用‘#'定界。日期也可以用Datevalue()函數(shù)來代替。在比較字符型的數(shù)據時,要加上單引號'',尾空格在比較中被忽略。
例:
WhereOrderDate>#96-1-1#
也可以表示為:
WhereOrderDate>Datevalue(‘1/1/96')
使用NOT表達式求反。
例:查看96年1月1日以后的定單
WhereNotOrderDate<=#1/1/96# 二.2范圍(BETWEEN和NOTBETWEEN)
BETWEEN…AND…運算符指定了要搜索的一個閉區(qū)間。
例:返回96年1月到96年2月的定單。
WhereOrderDateBetween#1/1/96#And#2/1/96# 二.3列表(IN,NOTIN)
IN運算符用來匹配列表中的任何一個值。IN子句可以代替用OR子句連接的一連串的條件。
例:要找出住在London、Paris或Berlin的所有客戶
SelectCustomerID,CompanyName,ContactName,City
FROMCustomers
WhereCityIn(‘London','Paris','Berlin') 二.4模式匹配(LIKE)
LIKE運算符檢驗一個包含字符串數(shù)據的字段值是否匹配一指定模式。
LIKE運算符里使用的通配符
通配符含義
?任何一個單一的字符
*任意長度的字符
#0~9之間的單一數(shù)字
[字符列表]在字符列表里的任一值
[!字符列表]不在字符列表里的任一值
-指定字符范圍,兩邊的值分別為其上下限
例:返回郵政編碼在(171)555-0000到(171)555-9999之間的客戶
SelectCustomerID,CompanyName,City,Phone
FROMCustomers
WherePhoneLike‘(171)555-####'
LIKE運算符的一些樣式及含義
樣式含義不符合
LIKE‘A*'A后跟任意長度的字符Bc,c255
LIKE'5
'5*5555
LIKE'5?5'5與5之間有任意一個字符55,5wer5
LIKE'5##5'5235,50055kd5,5346
LIKE'[a-z]'a-z間的任意一個字符5,%
LIKE'[!0-9]'非0-9間的任意一個字符0,1
LIKE'[[]'1,* 三.用ORDERBY子句排序結果
ORDER子句按一個或多個(最多16個)字段排序查詢結果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL語句的最后。
ORDER子句中定義了多個字段,則按照字段的先后順序排序。
例:
SelectProductName,UnitPrice,UnitInStock
FROMProducts
ORDERBYUnitInStockDESC,UnitPriceDESC,ProductName
ORDERBY子句中可以用字段在選擇列表中的位置號代替字段名,可以混合字段名和位置號。
例:下面的語句產生與上列相同的效果。
SelectProductName,UnitPrice,UnitInStock
FROMProducts
ORDERBY1DESC,2DESC,3 四.運用連接關系實現(xiàn)多表查詢
例:找出同一個城市中供應商和客戶的名字
SelectCustomers.CompanyName,Suppliers.ComPany.Name
FROMCustomers,Suppliers
WhereCustomers.City=Suppliers.City
例:找出產品庫存量大于同一種產品的定單的數(shù)量的產品和定單
SelectProductName,OrderID,UnitInStock,Quantity
FROMProducts,[OrderDeails]
WhereProduct.productID=[OrderDetails].ProductID
ANDUnitsInStock>Quantity
另一種方法是用MicrosofJETSQL獨有的JNNERJOIN
語法:
FROMtable1INNERJOINtable2
ONtable1.field1comparisiontable2.field2
其中comparision就是前面Where子句用到的比較運算符。
SelectFirstName,lastName,OrderID,CustomerID,OrderDate
FROMEmployees
INNERJOINOrdersONEmployees.EmployeeID=Orders.EmployeeID
注意:
INNERJOIN不能連接MemoOLEObjectSingleDouble數(shù)據類型字段。
在一個JOIN語句中連接多個ON子句
語法:
Selectfields
FROMtable1INNERJOINtable2
ONtable1.field1compoprtable2.field1AND
ONtable1.field2compoprtable2.field2OR
ONtable1.field3compoprtable2.field3
也可以
Selectfields
FROMtable1INNERJOIN
(table2INNERJOIN[(]table3
[INNERJOER][(]tablex[INNERJOIN]
ONtable1.field1compoprtable2.field1
ONtable1.field2compoprtable2.field2
ONtable1.field3compoprtable2.field3
外部連接返回更多記錄,在結果中保留不匹配的記錄,不管存不存在滿足條件的記錄都要返回另一側的所有記錄。
FROMtable[LEFT|RIGHT]JOINtable2
ONtable1.field1comparisiontable.field2
用左連接來建立外部連接,在表達式的左邊的表會顯示其所有的數(shù)據
例:不管有沒有定貨量,返回所有商品
SelectProductName,OrderID
FROMProducts
LEFTJOINOrdersONProducts.PrductsID=Orders.ProductID
右連接與左連接的差別在于:不管左側表里有沒有匹配的記錄,它都從左側表中返回所有記錄。
例:如果想了解客戶的信息,并統(tǒng)計各個地區(qū)的客戶分布,這時可以用一個右連接,即使某個地區(qū)沒有客戶,也要返回客戶信息。
空值不會相互匹配,可以通過外連接才能測試被連接的某個表的字段是否有空值。
Select*
FROMtalbe1
LEFTJOINtable2ONtable1.a=table2.c 四.1連接查詢中使用Iif函數(shù)實現(xiàn)以0值顯示空值
Iif表達式:Iif(IsNull(Amount,0,Amout)
例:無論定貨大于或小于¥50,都要返回一個標志。
Iif([Amount]>50,?Bigorder?,?Smallorder?) 五分組和總結查詢結果
在SQL的語法里,GROUPBY和HAVING子句用來對數(shù)據進行匯總。GROUPBY子句指明了按照哪幾個字段來分組,而將記錄分組后,用HAVING子句過濾這些記錄。
GROUPBY子句的語法
Selectfidldlist
FROMtable
Wherecriteria
[GROUPBYgroupfieldlist[HAVINGgroupcriteria]]
注:MicrosoftJet數(shù)據庫Jet不能對備注或OLE對象字段分組。
GROUPBY字段中的Null值以備分組但是不能被省略。
在任何SQL合計函數(shù)中不計算Null值。
GROUPBY子句后最多可以帶有十個字段,排序優(yōu)先級按從左到右的順序排列。
例:在‘WA'地區(qū)的雇員表中按頭銜分組后,找出具有同等頭銜的雇員數(shù)目大于1人的所有頭銜。
SelectTitle,Count(Title)asTotal
FROMEmployees
WhereRegion=‘WA'
GROUPBYTitle
HAVINGCount(Title)>1
JETSQL中的聚積函數(shù)
聚集函數(shù)意義
SUM()求和
AVG()平均值
COUNT()表達式中記錄的數(shù)目
COUNT(*)計算記錄的數(shù)目
MAX最大值
MIN最小值
var方差
STDEV標準誤差
FIRST第一個值
LAST最后一個值 六用Parameters聲明創(chuàng)建參數(shù)查詢
Parameters聲明的語法:
PARAMETERSnamedatatype[,namedatatype[,…]]
其中name是參數(shù)的標志符,可以通過標志符引用參數(shù).
Datatype說明參數(shù)的數(shù)據類型.
使用時要把PARAMETERS聲明置于任何其他語句之前.
例:
PARAMETERS[Lowprice]Currency,[Beginningdate]datatime
SelectOrderID,OrderAmount
FROMOrders
WhereOrderAMount>[lowprice]
ANDOrderDate>=[Beginningdate] 七功能查詢
所謂功能查詢,實際上是一種操作查詢,它可以對數(shù)據庫進行快速高效的操作.它以選擇查詢?yōu)槟康?挑選出符合條件的數(shù)據,再對數(shù)據進行批處理.功能查詢包括更新查詢,刪除查詢,添加查詢,和生成表查詢.
七.1更新查詢
Update子句可以同時更改一個或多個表中的數(shù)據.它也可以同時更改多個字段的值.
更新查詢語法:
Update表名
SET新值
Where準則
例:英國客戶的定貨量增加5%,貨運量增加3%
UpdateOEDERS
SETOrderAmount=OrderAmount*1.1
,Freight=Freight*1.03
WhereShipCountry=‘UK' 七.2刪除查詢
Delete子句可以使用戶刪除大量的過時的或冗于的數(shù)據.
注:刪除查詢的對象是整個記錄.
Delete子句的語法:
Delete[表名.*]
FROM來源表
Where準則
例:要刪除所有94年前的定單
Delete*
FROMOrders
WhereOrderData<#94-1-1# 七.3追加查詢
Insert子句可以將一個或一組記錄追加到一個或多個表的尾部.
INTO子句指定接受新記錄的表
valueS關鍵字指定新記錄所包含的數(shù)據值.
Insert子句的語法:
INSETRINTO目的表或查詢(字段1,字段2,…)
valueS(數(shù)值1,數(shù)值2,…)
例:增加一個客戶
InsertINTOEmployees(FirstName,LastName,title)
valueS(‘Harry','Washington','Trainee') 七.4生成表查詢
可以一次性地把所有滿足條件的記錄拷貝到一張新表中.通常制作記錄的備份或副本或作為報表的基礎.
SelectINTO子句用來創(chuàng)建生成表查詢語法:
Select字段1,字段2,…
INTO新表[IN外部數(shù)據庫]
FROM來源數(shù)據庫
Where準則
例:為定單制作一個存檔備份
Select*
INTOOrdersArchive
FROMOrders 八聯(lián)合查詢
UNION運算可以把多個查詢的結果合并到一個結果集里顯示.
UNION運算的一般語法:
[表]查詢1UNION[ALL]查詢2UNION…
例:返回巴西所有供給商和客戶的名字和城市
SelectCompanyName,City
FROMSuppliers
WhereCountry=‘Brazil'
UNION
SelectCompanyName,City
FROMCustomers
WhereCountry=‘Brazil'
注:
缺省的情況下,UNION子句不返回重復的記錄.如果想顯示所有記錄,可以加ALL選項
UNION運算要求查詢具有相同數(shù)目的字段.但是,字段數(shù)據類型不必相同.
每一個查詢參數(shù)中可以使用GROUPBY子句或HAVING子句進行分組.要想以指定的順序來顯示返回的數(shù)據,可以在最后一個查詢的尾部使用OREERBY子句. 九交*查詢
交*查詢可以對數(shù)據進行總和,平均,計數(shù)或其他總和計算法的計算,這些數(shù)據通過兩種信息進行分組:一個顯示在表的左部,另一個顯示在表的頂部.
MicrosoftJetSQL用TRANSFROM語句創(chuàng)建交*表查詢語法:
TRANSFORMaggfunction
Select語句
GROUPBY子句
PIVOTpivotfield[IN(value1[,value2[,…]])]
Aggfounction指SQL聚積函數(shù),
Select語句選擇作為標題的的字段,
GROUPBY分組
說明:
Pivotfield在查詢結果集中創(chuàng)建列標題時用的字段或表達式,用可選的IN子句限制它的取值.
value代表創(chuàng)建列標題的固定值.
例:顯示在1996年里每一季度每一位員工所接的定單的數(shù)目:
TRANSFORMCount(OrderID)
SelectFirstName&''&LastNameASFullName
FROMEmployeesINNERJOINOrders
ONEmployees.EmployeeID=Orders.EmployeeID
WhereDatePart(“yyyy”,OrderDate)=‘1996'
GROUPBYFirstName&''&LastName
ORDERBYFirstName&''&LastName
POVOTDatePart(“q”,OrderDate)&'季度' 十.子查詢
子查詢可以理解為套查詢.子查詢是一個Select語句. 十.1表達式的值與子查詢返回的單一值做比較
語法:
表達式comparision[ANY|ALL|SOME](子查詢)
說明:
ANY和SOME謂詞是同義詞,與比較運算符(=,<,>,<>,<=,>=)一起使用.返回一個布爾值True或False.ANY的意思是,表達式與子查詢返回的一系列的值逐一比較,只要其中的一次比較產生True結果,ANY測試的返回True值(既Where子句的結果),對應于該表達式的當前記錄將進入主查詢的結果中.ALL測試則要求表達式與子查詢返回的一系列的值的比較都產生True結果,才回返回True值.
例:主查詢返回單價比任何一個折扣大于等于25%的產品的單價要高的所有產品
Select*FROMProducts
WhereUnitPrice>ANY
(SelectUnitPriceFROM[OrderDetails]WhereDiscount>0.25) 十.2檢查表達式的值是否匹配子查詢返回的一組值的某個值
語法:
[NOT]IN(子查詢)
例:返回庫存價值大于等于1000的產品.
SelectProductNameFROMProducts
WhereProductIDIN
(SelectPrdoctIDFROM[OrderDEtails]
WhereUnitPrice*Quantity>=1000) 十.2檢測子查詢是否返回任何記錄
語法:
[NOT]EXISTS(子查詢)
例:用EXISTS檢索英國的客戶
SelectComPanyName,ContactName
FROMOrders
WhereEXISTS
(Select*
FROMCustomers
WhereCountry=‘UK'AND
Customers.CustomerID=Orders.CustomerID)
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
相關文章
上一篇:
分頁 SQLServer存儲過程
下一篇:
關注官方微信