適合初學(xué)者的MySQL學(xué)習(xí)筆記之ORDER BY子句使用詳解
上次我們介紹了:適合初學(xué)者的MySQL學(xué)習(xí)筆記之SELECT語(yǔ)句使用詳解,本次我們介紹一些適合初學(xué)者的MySQL學(xué)習(xí)筆記之ORDER BY子句的使用,接下來(lái)就讓我們一起來(lái)了解一下這部分內(nèi)容吧。
用ORDER BY子句排序結(jié)果
ORDER BY子句按一個(gè)或多個(gè)(最多16個(gè))字段排序查詢結(jié)果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL語(yǔ)句的***。 ORDER子句中定義了多個(gè)字段,則按照字段的先后順序排序。
例:
- SELECT ProductName,UnitPrice, UnitInStock
- FROM Products
- ORDER BY UnitInStock DESC , UnitPrice DESC, ProductName
ORDER BY 子句中可以用字段在選擇列表中的位置號(hào)代替字段名,可以混合字段名和位置號(hào)。
例:下面的語(yǔ)句產(chǎn)生與上列相同的效果。
- SELECT ProductName,UnitPrice, UnitInStock
- FROM Products
- ORDER BY 1 DESC , 2 DESC,3
運(yùn)用連接關(guān)系實(shí)現(xiàn)多表查詢
例:找出同一個(gè)城市中供應(yīng)商和客戶的名字
- SELECT Customers.CompanyName, Suppliers.ComPany.Name
- FROM Customers, Suppliers
- WHERE Customers.City=Suppliers.City
例:找出產(chǎn)品庫(kù)存量大于同一種產(chǎn)品的定單的數(shù)量的產(chǎn)品和定單
- SELECT ProductName,OrderID, UnitInStock, Quantity
- FROM Products, [Order Deails]
- WHERE Product.productID=[Order Details].ProductID
- AND UnitsInStock>Quantity
另一種方法是用 Microsof JET SQL 獨(dú)有的JNNER JOIN
語(yǔ)法:
- FROM table1 INNER JOIN table2
- ON table1.field1 comparision table2.field2
其中comparision 就是前面WHERE子句用到的比較運(yùn)算符。
- SELECT FirstName,lastName,OrderID,CustomerID,OrderDate
- FROM Employees
- INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
注意:
INNER JOIN不能連接Memo OLE Object Single Double 數(shù)據(jù)類型字段。
在一個(gè)JOIN語(yǔ)句中連接多個(gè)ON子句,語(yǔ)法:
- SELECT fields
- FROM table1 INNER JOIN table2
- ON table1.field1 compopr table2.field1 AND
- ON table1.field2 compopr table2.field2 OR
- ON table1.field3 compopr table2.field3
也可以
- SELECT fields
- FROM table1 INNER JOIN
- (table2 INNER JOIN [( ]table3
- [INNER JOER] [( ]tablex[INNER JOIN]
- ON table1.field1 compopr table2.field1
- ON table1.field2 compopr table2.field2
- ON table1.field3 compopr table2.field3
外部連接返回更多記錄,在結(jié)果中保留不匹配的記錄,不管存不存在滿足條件的記錄都要返回另一側(cè)的所有記錄。
- FROM table [LEFT|RIGHT]JOIN table2
- ON table1.field1comparision table.field2
用左連接來(lái)建立外部連接,在表達(dá)式的左邊的表會(huì)顯示其所有的數(shù)據(jù)
例:不管有沒(méi)有定貨量,返回所有商品
- SELECT ProductName ,OrderID
- FROM Products
- LEFT JOIN Orders ON Products.PrductsID=Orders.ProductID
右連接與左連接的差別在于:不管左側(cè)表里有沒(méi)有匹配的記錄,它都從左側(cè)表中返回所有記錄。
例:如果想了解客戶的信息,并統(tǒng)計(jì)各個(gè)地區(qū)的客戶分布,這時(shí)可以用一個(gè)右連接,即使某個(gè)地區(qū)沒(méi)有客戶,也要返回客戶信息。
空值不會(huì)相互匹配,可以通過(guò)外連接才能測(cè)試被連接的某個(gè)表的字段是否有空值。
- SELECT *
- FROM talbe1
- LEFT JOIN table2 ON table1.a=table2.c
分組和總結(jié)查詢結(jié)果
在SQL的語(yǔ)法里,GROUP BY和HAVING子句用來(lái)對(duì)數(shù)據(jù)進(jìn)行匯總。GROUP BY子句指明了按照哪幾個(gè)字段來(lái)分組,而將記錄分組后,用HAVING子句過(guò)濾這些記錄。
GROUP BY子句的語(yǔ)法:
- SELECT fidldlist
- FROM table
- WHERE criteria
- [GROUP BY groupfieldlist [HAVING groupcriteria]]
注意:Microsoft Jet數(shù)據(jù)庫(kù) Jet 不能對(duì)備注或OLE對(duì)象字段分組。GROUP BY字段中的Null值以備分組但是不能被省略。 在任何SQL合計(jì)函數(shù)中不計(jì)算Null值。 GROUP BY子句后最多可以帶有十個(gè)字段,排序優(yōu)先級(jí)按從左到右的順序排列。
例:在‘WA’地區(qū)的雇員表中按頭銜分組后,找出具有同等頭銜的雇員數(shù)目大于1人的所有頭銜。
- SELECT Title ,Count(Title) as Total
- FROM Employees
- WHERE Region = ‘WA’
- GROUP BY Title
- HAVING Count(Title)>1
關(guān)于適合初學(xué)者的MySQL學(xué)習(xí)筆記之ORDER BY子句使用方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






