资源描述:
《sql常见面试题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、五.数据库部分1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。select*fromemployeeorderbydeptiddesc,salaryasc2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序创建表:mysql>createtableemployee921(idintprimarykeyauto_increment,namevarchar(50),salarybigint,deptidint);插入实验数据:mysql>insertintoemployee921values(null,'zs',100
2、0,1),(null,'ls',1100,1),(null,'ww',1100,1),(null,'zl',900,1),(null,'zl',1000,2),(null,'zl',900,2),(null,'zl',1000,2),(null,'zl',1100,2);编写sql语句:()selectavg(salary)fromemployee921groupbydeptid;()mysql>selectemployee921.id,employee921.name,employee921.salary,employee921.deptidtidfr
3、omemployee921wheresalary>(selectavg(salary)fromemployee921wheredeptid=tid)orderbysalary效率低的一个语句,仅供学习参考使用(在groupby之后不能使用where,只能使用having,在groupby之前可以使用where,即表示对过滤后的结果分组):mysql>selectemployee921.id,employee921.name,employee921.salary,employee921.deptidtidfromemployee921wheresalary
4、>(selectavg(salary)fromemployee921groupbydeptidhavingdeptid=tid);()selectcount(*),tidfrom(selectemployee921.id,employee921.name,employee921.salary,employee921.deptidtidfromemployee921wheresalary>(selectavg(salary)fromemployee921wheredeptid=tid))astgroupbytid;另外一种方式:关联查询selecta.en
5、ame,a.salary,a.deptidfromempa,(selectdeptd,avg(salary)avgsalfromempgroupbydeptid)bwherea.deptid=b.deptidanda.salary>b.avgsal;3、存储过程与触发器必须讲,经常被面试到?createprocedureinsert_Student(_namevarchar(50),_ageint,out_idint)begininsertintostudentvalue(null,_name,_age);selectmax(stuId)into_idf
6、romstudent;end;callinsert_Student('wfz',23,@id);select@id;mysql>createtriggerupdate_StudentBEFOREupdateonstudentFOREACHROW->select*fromstudent;触发器不允许返回结果createtriggerupdate_StudentBEFOREupdateonstudentFOREACHROWinsertintostudentvalue(null,'zxx',28);mysql的触发器目前不能对当前表进行操作createtrig
7、gerupdate_StudentBEFOREupdateonstudentFOREACHROWdeletefromarticleswhereid=8;这个例子不是很好,最好是用删除一个用户时,顺带删除该用户的所有帖子这里要注意使用OLD.id触发器用处还是很多的,比如校内网、开心网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目。因为触发器效率高。而UCH没有用触发器,效率和数据处理能力都很低。存储过程的实验步骤:mysql>delimiter
8、mysql>createprocedureinsert
9、Article_Procedure(pTitlevarchar(50),pBid