0913 Oracle 查询

一、多表查询

0913 Oracle 查询

在日后的开发之中,我们不知道数据量的情况,应该先看一下有多少条记录

0913 Oracle 查询

二、笛卡尔积

表示多少张表的数据乘积,但这种查询结果不是我们所希望的,最简单的方式是采用关联字段形式来去掉。从emp表和dept表之间存在的deptno的关联字段开始,当在查询中,不同的表中有相同的字段名称时,访问这些字段必须加上表名称。

0913 Oracle 查询

如果表名称很长,我们可以在进行多表查询的时候给表起一个别名,通过别名.字段的方式进行查询。

0913 Oracle 查询

三、左右连接

(+)=:(+)放在了=的左边,表示右连接 

=(+):(+)放在了=的右边,表示左连接

如果发现优秀需要的数据没有显示出来,就使用此符号更改连接方向。这种符号是oracle独有的,其他数据库不能使用。

四、SQL:1999语法

另外一套用于表连接的操作。

交叉连接(cross join):用于产生笛卡尔积

0913 Oracle 查询

自然连接(natural join):自动找到匹配的相关字段,消除笛卡尔积

0913 Oracle 查询

JOIN...USING子句:用户自己指定一个消除笛卡尔积的关联字段

0913 Oracle 查询

JOIN...ON子句:用户自己指定一个可以消除笛卡尔积的关联条件

0913 Oracle 查询

五、统计函数和分组查询

统计函数

count():查询表中的数据记录;

avg():求平均值;

sum():求和;

max():求最大值;

min():求最小值;

分组查询

分组条件:0913 Oracle 查询

当数据重复的时候分组才有意义。

--按照部门编号分组,求出每个部门的人数,平均工资
select count(*), trunc(AVG(sal), 2) FROM emp GROUP by deptno
--按照职位分组,求出每个职位的最高和最低工资
select count(*), MAX(sal), MIN(sal) FROM emp GROUP by job

分组函数可以在没有分组的时候单独使用,可是却不能出现其他的查询字段;

0913 Oracle 查询

如果正在进行分组,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现。

0913 Oracle 查询

如果要对分组后的数据再次进行过滤率,则使用HAVING子句完成。

0913 Oracle 查询

0913 Oracle 查询

0913 Oracle 查询

六、子查询

子查询=简单查询+限定查询+多表查询+统计查询的综合体;多表查询性能差,用子查询来替代,子查询就是在一个查询之中嵌套了其他的若干查询。

有复杂统计的地方,大部分都需要子查询。0913 Oracle 查询

IN操作符:用于指定一个子查询的判断范围

0913 Oracle 查询

ANY操作符:与每一个内容相匹配

=ANY:功能与IN是完全一样的

0913 Oracle 查询

>ANY:比子查询中返回记录最小的还要大

0913 Oracle 查询

<ANY:比子查询中返回记录最大的还要小

0913 Oracle 查询

ALL操作符:与每一个内容相匹配

>ALL:比子查询中返回记录最大的还要大

0913 Oracle 查询

<ALL:比子查询中返回记录最小的还要小

0913 Oracle 查询

七、FROM中的子查询

0913 Oracle 查询