1查询的方式:
1.1嵌套查询——多表-纵(语句效果)纵(结果存放效果)
1.1.1:分类
1.1.1.1:逻辑分类
1.1.1.1.1:相关子查询:外部查询返回一行,子查询执行一次(子查询字段来自外部的返回列)
1.1.1.1.2:非相关子查询:子查询一次性执行完后,返回给外部查询
1.1.1.2:语句位置分类
1.1.1.2.1:嵌套查询——查询出的结果为下一查询语句的表
1.1.1.2.2:条件查询——where、having
select * from emp a where sal = (select max(sal) from emp b where b.deptno=a.deptno);
1.1.1.2.3:计算列查询——子查询为某列
--查询各部门的人数及最高工资 select deptno,dname, (select count(*) from emp where emp.deptno=dept.deptno ) 人数, (select max(sal) from emp where emp.deptno=dept.deptno ) 最高工资 from dept
1.1.1.2.
1.2:笛卡尔乘积=>连接——多表-横横
1.2.1:交叉联接=笛卡尔乘积
1.2.2:内联接——关系运算符来匹配表
1.2.2.1:相等联接+不相等联接
1.2.2.2:自联接
1.2.3:外联接——显示部分无法匹配的表
1.2.3.1左外联接+右外联接+全外联接
1.3:投影
1.4:选择
1.5:同表(列数一样、对应列数据类型相似)操作——多表-横纵
1.5.1:并 union
1.5.2:交
1.5.3:差
2.1查询筛选关键字
2.1.1
in——返回多个结果select Name from Course where CourseID in(select CourseID from exam where SustainedOn+'2003-03-10');
2.1.2:exists——子查询是否有返回记录。
select * from dept where not exists( select * from emp where emp.deptno=dept.deptno ) ·子查询用的是=,所以能够用到索引(前提是emp.deptno上有索引)。 ·如果有多行数据返回,exists只会查找其中任意一条,而不会遍历。
2.1.3:any——子查询返回的所有记录至少有一条满足。数值型=Max
2.1.4 :all——子查询返回的所有记录是否满足。数值型=min
2.1.5:as——
2.1.6:计算列——数据不存在数据库中,从数据库中构造、计算而得。
——在select语句选择返回列的地方,插入非数据库字段时其文字作为新增字段的值
2.1.7:distinct
2.1.8:null——遇见null,就跟null混。
*nvl(TRUE,FALSE);
3查询语句执行顺序
3.1
from
——>where——在统计前过滤不满足条件的记录
——>group by——对过滤所得结果集,分组统计
——>having——对统计结果过滤
——>order by对最总结果排序
3.2
3.3
3.4
3.5
3.6