Oracle数据库笔记之子查询
来源:互联网 发布:淘宝商家版登录 编辑:程序博客网 时间:2024/04/28 18:40
1.子查询返回的结果是一个值 --单行子查询
使用 = > < <= >= <> between...and...
查询与scott同一个职位的员工信息
select *
from emp
where job=(select job from emp where ename='SCOTT');
查询与smith同一个部门的员工信息
select *
from emp
where deptno=(select deptno from emp where ename='SMITH');
查询比Ford工资高的员工信息
select *
from emp
where sal>(select sal from emp where ename='FORD');
查询比ADAMS入职晚的员工信息
select * from emp
where hiredate>(select hiredate from emp where ename='ADAMS');
2.子查询返回的结果是多个值 --多行子查询
使用in
not in
查询与FORD同一部门或与CLARK同一部门的员工信息
select * from emp
where deptno in (select deptno from emp where ename='FORD' or ename='CLARK');
查询与CLARK和SMITH不同工作的员工信息
select * from emp
where job not in (select job from emp where ename='CLARK' or ename='SMITH');
any --任何一个
all --全部
查询比部门30中工资高的员工信息
select * from emp
where sal > any (select sal from emp where deptno=30);
select * from emp
where sal > (select min(sal) from emp where deptno=30);
查询比部门30中工资都高的员工信息
select * from emp
where sal > all (select sal from emp where deptno=30);
select * from emp
where sal > (select max(sal) from emp where deptno=30);
查询与Smith同一个部门,并且工作相同的员工信息
select * from emp
where deptno=(select deptno from emp where ename='SMITH')
and job=(select job from emp where ename='SMITH');
select * from emp
where (deptno,job)=(select deptno,job from emp where ename='SMITH') ;
将子查询作为临时表和其他表连接
注意:要为当前子查询和子查询中的字段起别名
查询每个部门工资最高的员工信息
select * from emp e,(select max(sal) as max_sal,deptno dno from emp group by deptno) t
where e.sal=t.max_sal and e.deptno=t.dno;
查询每个部门最早入职的员工信息
select * from emp e,(select min(hiredate) min_hiredate,deptno dno from emp group by deptno) t
where t.min_hiredate=e.hiredate and t.dno=e.deptno;
查询每个部门的员工数,部门名称,部门地址
select num,dname,loc from dept d,(select count(*) num,deptno dno from emp group by deptno) t
where t.dno=d.deptno;
分页查询:
不同数据库的处理方式不同
mysql ------limit关键字
sqlserver ------top关键字
oracle ------rownum伪列
从m到n
1.确定查询条件
2.设置n
3.设置m
分页查询的语法
select b.*
from (select t.*,rownum as num
from (select * from 表名 where 条件) t
where rownum <=n) b
where num>m;
查询员工表中前六条数据
select * from emp where rownum<=6;
查询员工表中第3—7条数据
select * from emp where rownum>= 3 and rownum<=7;--错误
select * from emp where rownum between 3 and 7; --错误
查询员工表中名字带s的第2-4名员工信息
select e.*
from (select t.*,rownum as num
from (select * from emp where ename like '%S%') t
where rownum <=4) e
where num>=2;
select t.*
from (select rownum num,emp.* from emp where ename like '%S%' and rownum<=4) t
where num>=2;
使用 = > < <= >= <> between...and...
查询与scott同一个职位的员工信息
select *
from emp
where job=(select job from emp where ename='SCOTT');
查询与smith同一个部门的员工信息
select *
from emp
where deptno=(select deptno from emp where ename='SMITH');
查询比Ford工资高的员工信息
select *
from emp
where sal>(select sal from emp where ename='FORD');
查询比ADAMS入职晚的员工信息
select * from emp
where hiredate>(select hiredate from emp where ename='ADAMS');
2.子查询返回的结果是多个值 --多行子查询
使用in
not in
查询与FORD同一部门或与CLARK同一部门的员工信息
select * from emp
where deptno in (select deptno from emp where ename='FORD' or ename='CLARK');
查询与CLARK和SMITH不同工作的员工信息
select * from emp
where job not in (select job from emp where ename='CLARK' or ename='SMITH');
any --任何一个
all --全部
查询比部门30中工资高的员工信息
select * from emp
where sal > any (select sal from emp where deptno=30);
select * from emp
where sal > (select min(sal) from emp where deptno=30);
查询比部门30中工资都高的员工信息
select * from emp
where sal > all (select sal from emp where deptno=30);
select * from emp
where sal > (select max(sal) from emp where deptno=30);
查询与Smith同一个部门,并且工作相同的员工信息
select * from emp
where deptno=(select deptno from emp where ename='SMITH')
and job=(select job from emp where ename='SMITH');
select * from emp
where (deptno,job)=(select deptno,job from emp where ename='SMITH') ;
将子查询作为临时表和其他表连接
注意:要为当前子查询和子查询中的字段起别名
查询每个部门工资最高的员工信息
select * from emp e,(select max(sal) as max_sal,deptno dno from emp group by deptno) t
where e.sal=t.max_sal and e.deptno=t.dno;
查询每个部门最早入职的员工信息
select * from emp e,(select min(hiredate) min_hiredate,deptno dno from emp group by deptno) t
where t.min_hiredate=e.hiredate and t.dno=e.deptno;
查询每个部门的员工数,部门名称,部门地址
select num,dname,loc from dept d,(select count(*) num,deptno dno from emp group by deptno) t
where t.dno=d.deptno;
分页查询:
不同数据库的处理方式不同
mysql ------limit关键字
sqlserver ------top关键字
oracle ------rownum伪列
从m到n
1.确定查询条件
2.设置n
3.设置m
分页查询的语法
select b.*
from (select t.*,rownum as num
from (select * from 表名 where 条件) t
where rownum <=n) b
where num>m;
查询员工表中前六条数据
select * from emp where rownum<=6;
查询员工表中第3—7条数据
select * from emp where rownum>= 3 and rownum<=7;--错误
select * from emp where rownum between 3 and 7; --错误
查询员工表中名字带s的第2-4名员工信息
select e.*
from (select t.*,rownum as num
from (select * from emp where ename like '%S%') t
where rownum <=4) e
where num>=2;
select t.*
from (select rownum num,emp.* from emp where ename like '%S%' and rownum<=4) t
where num>=2;
阅读全文
0 0
- Oracle数据库笔记之子查询
- oracle数据库之子查询
- Oracle数据库之子查询
- Oracle笔记之子查询
- Oracle数据库的查询之子查询(六)
- Oracle之子查询
- Oracle之子查询
- Oracle之子查询
- oracle之子查询常用
- Oracle之子查询
- SQL数据库之子查询
- oracle强化练习之子查询
- oracle SQL语句之子查询
- 10-Oracle入门之子查询
- 前端学数据库之子查询
- sql2000学习笔记之子查询
- sql笔记整理之子查询
- ORACLE多表查询之子查询
- 编程之术--关于数据结构与算法的理解
- uikit——Auto Layout——Semantic Content
- migrate快速学习
- 项目电路设计
- linux学习之旅(三)& 删除tips
- Oracle数据库笔记之子查询
- Codeforces 831D Office Keys(思维or二分)
- 使用Object.prototype上的原生toString()方法判断数据类型
- java冒泡排序
- 设计模式的分类
- 编程实现字符串中子串的查找
- 选择器
- UVA548Tree
- KMP算法详解