MySQL包含Where/Group By/having/Order by的语句顺序为:
SELECTcolumn_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
WHERE子句用于过滤记录。
WHERE子句仅用于提取满足指定条件的那些记录。
HAVING子句添加到SQL,因为WHERE不能与聚合函数一起使用。
GROUP BY语句将具有相同值的行分组为摘要行,例如“查找每个国家/地区的客户数量”。
GROUP BY语句通常与聚合函数(COUNT,MAX,MIN,SUM,AVG)一起使用,以将结果集按一列或多列分组。
ORDER BY关键字用于按升序或降序对结果集进行排序。
默认情况下,ORDER BY关键字以升序对记录进行排序。 要按降序对记录进行排序,请使用DESC关键字。
例子:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders # 选取行列,对需要重命名的行列重命名
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
# 满足两边的employeeID互相匹配
WHERE LastName ='Davolio' OR LastName ='Fuller' #附加条件
GROUP BY LastName#按照last name来分组显示
HAVING COUNT(Orders.OrderID) >25;#显示数量大于25的
现在我们来分别比较不同代码显示的结果
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders # 选取行列,对需要重命名的行列重命名
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
GROUP BY LastName#按照last name来分组显示
结果为:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders # 选取行列,对需要重命名的行列重命名
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
# 满足两边的employeeID互相匹配
GROUP BY LastName#按照last name来分组显示
HAVING COUNT(Orders.OrderID) >25;#显示数量大于25的
结果为:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders # 选取行列,对需要重命名的行列重命名
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
# 满足两边的employeeID互相匹配
WHERE LastName ='Davolio' OR LastName ='Fuller' #附加条件
GROUP BY LastName#按照last name来分组显示
HAVING COUNT(Orders.OrderID) >25;#显示数量大于25的
结果为:
ORDER语句对结果的变化: