数据库考点

一、查询语句执行顺序

  查询语句执行顺序from->where->group by->having->select->order by

  当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
--执行where子句查找符合条件的数据;
--使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。

--在返回集字段要么包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
--having 子句中的每一个元素也必须出现在select列表中。(如2题)有些数据库例外,如oracle.
--having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
--having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。

二、例题

1、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序。 

create table emp(
id int primary key auto_increment,
name varchar(50),
salary bigint,
deptin int
);
insert into emp values(null,‘zs‘,1000,1),(null,‘ls‘,1100,1),(null,‘ww‘,1100,1),(null,‘zl‘,900,1),
(null,‘zs2‘,1000,2),(null,‘ls2‘,900,2),(null,‘ww2‘,1000,2),(null,‘zl2‘,900,2);

错误写法:salary不能放在having子句中!
select deptin, count(*) from emp group by deptin having salary>avg(salary) order by deptin;

正确写法:

select emp.deptin, count(*) from emp, (select deptin,avg(salary) avg from emp group by deptin) temp
where emp.deptin=temp.deptin and salary>avg
group by emp.deptin order by emp.deptin;

三、存储过程和触发器

四、数据库三范式

五、数据库优化

六、union和union all的区别

七、分页

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。