0913 Oracle 查询
一、多表查询
在日后的开发之中,我们不知道数据量的情况,应该先看一下有多少条记录
二、笛卡尔积
表示多少张表的数据乘积,但这种查询结果不是我们所希望的,最简单的方式是采用关联字段形式来去掉。从emp表和dept表之间存在的deptno的关联字段开始,当在查询中,不同的表中有相同的字段名称时,访问这些字段必须加上表名称。
如果表名称很长,我们可以在进行多表查询的时候给表起一个别名,通过别名.字段的方式进行查询。
三、左右连接
(+)=:(+)放在了=的左边,表示右连接
=(+):(+)放在了=的右边,表示左连接
如果发现优秀需要的数据没有显示出来,就使用此符号更改连接方向。这种符号是oracle独有的,其他数据库不能使用。
四、SQL:1999语法
另外一套用于表连接的操作。
交叉连接(cross join):用于产生笛卡尔积
自然连接(natural join):自动找到匹配的相关字段,消除笛卡尔积
JOIN...USING子句:用户自己指定一个消除笛卡尔积的关联字段
JOIN...ON子句:用户自己指定一个可以消除笛卡尔积的关联条件
五、统计函数和分组查询
统计函数
count():查询表中的数据记录;
avg():求平均值;
sum():求和;
max():求最大值;
min():求最小值;
分组查询
分组条件:
当数据重复的时候分组才有意义。
--按照部门编号分组,求出每个部门的人数,平均工资
select count(*), trunc(AVG(sal), 2) FROM emp GROUP by deptno
--按照职位分组,求出每个职位的最高和最低工资
select count(*), MAX(sal), MIN(sal) FROM emp GROUP by job
分组函数可以在没有分组的时候单独使用,可是却不能出现其他的查询字段;
如果正在进行分组,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现。
如果要对分组后的数据再次进行过滤率,则使用HAVING子句完成。
六、子查询
子查询=简单查询+限定查询+多表查询+统计查询的综合体;多表查询性能差,用子查询来替代,子查询就是在一个查询之中嵌套了其他的若干查询。
有复杂统计的地方,大部分都需要子查询。
IN操作符:用于指定一个子查询的判断范围
ANY操作符:与每一个内容相匹配
=ANY:功能与IN是完全一样的
>ANY:比子查询中返回记录最小的还要大
<ANY:比子查询中返回记录最大的还要小
ALL操作符:与每一个内容相匹配
>ALL:比子查询中返回记录最大的还要大
<ALL:比子查询中返回记录最小的还要小
七、FROM中的子查询