标准模板

这套标准模板确定了先后顺序

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
字段
FROM

WHERE
对原本在表中就有得列进行判断
GROUP BY
子段
HAVING
分组后,出现得新列进行判断
ORDER BY
排序

其中 Where可以不加,Having,与Order by也可以不加

Group By

类似排序,只不过是把相同得组进行排序,组与组之间进行排序

例1:

  • 求所有部门的人得个数,包括没有部门得人
1
2
3
4
5
6
SELECT	
COUNT(*), department_id
FROM
employees
GROUP BY
department_id

例1输出结果

count(*) department_id
1 null
1 10
2 20

由例可知 在select语句中deparment_id 与Group by中得完全相同,可以取别名。Group by 也可以用别名进行判断

Where

在分组前进行筛选,是在表中的列

例2:

  • 求所有部门的人的个数,不包含为部门为空的人
1
2
3
4
5
6
7
8
SELECT	
COUNT(*), department_id
FROM
employees
WHERE
department_id IS NOT NULL
GROUP BY
department_id

例2输出结果

count(*) department_id
1 10
2 20
6 30

Having

在分组之后进行比较,也就是对原本表所没有的字段进行筛选。

例3:

  • 求所有部门(部门为空,忽略不计)中最低工资不低于5000的人个数.

  • SELECT    
        COUNT(*), MIN(salary),department_id 
    FROM
        employees
    WHERE
        department_id IS NOT NULL
    GROUP BY
        department_id
    HAVING
        MIN(salary) >= 5000
    <!--3-->
    

例4输出结果

COUNT(*) min(salary) department_id
3 17000 90
1 10000 70
2 8300 110