日期:2014-05-16 浏览次数:20521 次
employee:
eid,ename,salary,deptid;
select * from employee order by deptid desc,salary
创建表:
mysql> create table employee921(id int primary key auto_increment,name varchar(5
0),salary bigint,deptid int);
插入实验数据:
mysql> insert into employee921 values(null,'zs',1000,1),(null,'ls',1100,1),(null
,'ww',1100,1),(null,'zl',900,1) ,(null,'zl',1000,2), (null,'zl',900,2) ,(null,'z
l',1000,2) , (null,'zl',1100,2);
编写sql语句:
()select avg(salary) from employee921 group by deptid;
()mysql> select employee921.id,employee921.name,employee921.salary,employee921.dep
tid tid from employee921 where salary > (select avg(salary) from employee921 where deptid = tid);
效率低的一个语句,仅供学习参考使用(在group by之后不能使用where,只能使用having,在group by之前可以使用where,即表示对过滤后的结果分组):
mysql> select employee921.id,employee921.name,employee921.salary,employee921.dep
tid tid from employee921 where salary > (select avg(salary) from employee921 group by deptid having deptid = tid);
()select count(*) ,tid
from (
select employee921.id,employee921.name,employee921.salary,employee921.deptid tid
from employee921
where salary >
(select avg(salary) from employee921 where deptid = tid)
) as t
group by tid ;
另外一种方式:关联查询
select a.ename,a.salary,a.deptid
from emp a,
(select deptd,avg(salary) avgsal from emp group by deptid ) b
where a.deptid=b.deptid and a.salary>b.avgsal;
create procedure insert_Student (_name varchar(50),_age int ,out _id int)
begin
insert into student value(null,_name,_age);
select max(stuId) into _id from student;
end;
call insert_Student('wfz',23,@id);
select @id;
mysql> create trigger update_Student BEFORE update on student FOR EACH ROW
-> select * from student;
触发器不允许返回结果
create trigger update_Student BEFORE update on student FOR EACH ROW
insert into student value(null,'zxx',28);
mysql的触发器目前不能对当前表进行操作
create trigger update