GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
过滤分组:
事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
分组和排序:
SELECT子句的顺序:
员工表:
工资等级表:
部门表:
利用子查询进行过滤:
现在查找职业为CLERK的员工的部门地址:
不是4行,重复的没有算进去。
可见,在WHERE子句中使用子查询能够编写出功能很强并且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
作为计算字段使用子查询:
外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
创建联结:
自联结:
现在不采用子查询的方式:
自然联结:
无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结(前一章中介绍的内部联结)返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。
外部联结:
左外连接:
右外连接:
使用带聚集函数的联结:
包含获取取消重复的行:
UNION从查询结果集中自动去除了重复的行。这是UNION的默认行为,但是如果需要,可以改变它。事实上,如果想返回所有匹配行,可使用UNION ALL而不是UNION。
对组合查询结果排序:在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。