where 关键字:作为检索条件,在生成临时表前起作用,进行筛选;
having 关键字:同样作为检索条件,但是是在生成临时表之后,进行筛选;
在下面数据表中:
使用SQL 语句:select emp_no,first_name from employees where gender='M';
执行的时候,SQL先找出所有符合gender='M'的行,再显示对应的emp_no,first_name;
而此时如果使用SQL语句:select emp_no,first_name from employees having gender='M';就会显示出错,
因为此时,SQL先执行的是select emp_no,first_name from employees 这个语句,生成如下所示的临时表
然后,再去查找该临时表中符合having gender='M'这个条件的字段予以显示,但是很明显,这个临时表并不存在该字段,所以出错。