上次我们介绍了:适合初学者的MySQL学习笔记之SELECT语句使用详解,本次我们介绍一些适合初学者的MySQL学习笔记之ORDER BY子句的使用,接下来就让我们一起来了解一下这部分内容吧。
用ORDER BY子句排序结果
ORDER BY子句按一个或多个(最多16个)字段排序查询结果,可以是升序(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 1 DESC , 2 DESC,3
运用连接关系实现多表查询
例:找出同一个城市中供应商和客户的名字
- 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 table1 INNER JOIN table2
- ON table1.field1 comparision table2.field2
其中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 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
外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。
- FROM table [LEFT|RIGHT]JOIN table2
- ON table1.field1comparision table.field2
用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据
例:不管有没有定货量,返回所有商品
- SELECT ProductName ,OrderID
- FROM Products
- LEFT JOIN Orders ON Products.PrductsID=Orders.ProductID
右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。
例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。
空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。
- SELECT *
- FROM talbe1
- LEFT JOIN table2 ON table1.a=table2.c
分组和总结查询结果
在SQL的语法里,GROUP BY和HAVING子句用来对数据进行汇总。GROUP BY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。
GROUP BY子句的语法:
- SELECT fidldlist
- FROM table
- WHERE criteria
- [GROUP BY groupfieldlist [HAVING groupcriteria]]
注意:Microsoft Jet数据库 Jet 不能对备注或OLE对象字段分组。GROUP BY字段中的Null值以备分组但是不能被省略。 在任何SQL合计函数中不计算Null值。 GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。
例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。
- SELECT Title ,Count(Title) as Total
- FROM Employees
- WHERE Region = ‘WA’
- GROUP BY Title
- HAVING Count(Title)>1
关于适合初学者的MySQL学习笔记之ORDER BY子句使用方法就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】