ORACLE下查询操作
针对数据库操作最多的就是数据查询,这里分享一个我常用的方法,看到需求后,先确定查询范围,就是需要查询哪些表;之后确定查询条件;最后写出查询的字段。
ORACLE中之前说过有两个伪列ROWID和ROWNUM,用来标识唯一的一条记录。
1.基本查询
对数据查询最简单的也就是单表查询了,查询使用的语法是:
| SELECT [COLS] FROM [TABLE] [WHERE][CONDITION] |
平常查询时,一定会有条件,也就是使用到where关键字,之后接条件,这里的条件可以看之前的一篇文章【查询基础】。
这里针对单表查询,介绍一下分页的逻辑,oracle中没有mysql中的关键字limit,所以oracle中数据分页查询需要借助ROWNUM,具体如下:
| -- 通用的分页SQL SELECT * FROM -- 具体分页SQL实例 |
2.连接查询
以下均以两张表连接查询为例
2.1 内连接
查询两张表符合条件的记录的交集
| select * from emp,dept where emp.deptno=dept.deptno; select * from emp inner join dept on emp.deptno=dept.deptno; |
2.2 左外连接
将符合条件的左表中的所有数据查询出来,关联着右表中的数据,有则关联显示数据,无则显示null,两种写法
| select e.name,d.name from emp e left join dept d on条件 或者是 select e.ename,d.name from emp e,dept d |
不可以在使用外连接的情况下使用in关键字
2.3 右外连接
将符合条件的右表中的所有数据查询出来,关联着左表中的数据,有则关联显示数据,无则显示null,两种写法
| select e.name,d.name from dept d right join emp e on条件; 或者是 select e.ename,d.name from emp e,dept d |
2.4 自连接
就是给自己取个别名,然后当作两个表连接,自连接中可以使用外连接。
3.子查询
3.1 基础子查询
子查询可以简单的理解为一个查询的结果,作为另一个查询的条件,注意在子查询中不能使用order by关键字,排序必须在父查询中进行。如果子查询返回的结果是多行,而其父查询中使用的是比较运算符,将会出现错误。当内部select语句给外部的select语句返回一行或多行,在父查询中可以使用in,any,all等关键字。如下例子:
| select deptno,sal from emp where (deptno,sal) in (select deptno,min(sal) from emp group by deptno); |
3.2 关联子查询
关联子查询指的是子查询引用与父查询相关的一列或多列,子查询需借助父查询,父查询也需借助子查询。此关联子查询可用exists关键字来实现如下例子:
| -- 直接写关联子查询 select empno,ename,sal,deptno from emp outers |
3.3 子查询应用
一般子查询经常用在from关键字和where关键字之后,如下两个例子:
| -- 在where之后用 select * from emp where sal>(select avg(sal) from emp) -- 在from之后用 select ename,dname from |