-- 相关子查询:子查询不可以独立运行,并且先运行外查询再运行子查询-- 优点:简单,功能强大-- 缺点:理解较难-- 查询本部门最高工资的员工SELECT deptno,ename,max(sal)from emp GROUPBY deptno
-- 括号里面的语句不能单独运行,必须先运行外层查询,才可以进行里面的查询SELECT*from emp e1 where sal in(SELECTmax(sal)from emp e2 where e1.deptno=e2.deptno)
索引
提高查询速度
BTREE(B+TREE) 和 HASH两种算法
索引会提高查询的速度,但是会降低添加,更新,删除的速度(不仅操作数据库表,也要操作索引)
-- 查看索引 默认 主键和外键是索引showINDEXfrom emp;SELECT*from emp WHERE empno=1;SELECT*from emp WHERE ename='湛山';-- 创建索引CREATEindex index_emp_ename on emp(ename)-- 查找速率很增快,要有数据量的支持SELECT*from emp WHERE ename='湛山';-- 删除索引dropindex index_emp_ename on emp;
-- 定义最简单的存储过程 无返回值createprocedure myproc1(in name varchar(20))beginif name isnullor name =''thenselect*from emp;elseselect*from emp where ename like CONCAT("%",name,"%");endif;end-- 运行存储过程call myproc1("AR");call myproc1("");-- 删除存储过程dropPROCEDURE myproc1
-- 定义存储过程,有返回值 createprocedure myproc2(in name varchar(20),out num int(4))beginif name isnullor name =''thenselect*from emp;elseselect*from emp where ename like CONCAT("%",name,"%");endif;-- 返回数据得条数select found_rows()into num;end-- 调用存储过程call myproc2("AR",@num);-- 获取返回值 一定要带上@select@num