【Oracle】子查询、伪列、分页查询、表连接

子查询、伪列、分页查询、表连接

①. 子查询
子查询可代替表、属性值
	
①子查询结果是1行1列
	例:查询工资最高的员工信息
	select * from employees where salary = (select max(salary) from employees);
②子查询结果是n行1列
	例:查询和“king”一个姓的并且在同一部门的员工的信息
	select * from employees where department_id in(select department_id from employees where last_name = ‘king’);
③子查询结果是n行n列
	例:查询工资前五位到前十位之间的员工信息
select * from (select employee_id, first_name, last_name,rownum as rn from (select * from employees order by salary desc)) where rn >= 5 and rn <= 10
②. 伪列、分页查询
伪列:
rowid			行的物理地址,不存在于任何表,可查询
rownum			对查询满足条件的结果数据进行编号(从1开始)
用法:
 		select rowid,rownum,其他字段 from 表;
分页:
	利用子查询,将查询所有表数据再加上序列(rownum)作为一个临时表

例如:
①查询薪资从第五到第十位的员工信息
	**先按工资降序排序,在加上序号字段形成临时表
select * from (select employees_id, first_name, last_name, salary, rownum as rn from (select * from employees order by salary desc)) where rn >= 5 and rn <= 10

②对表加序号
  select employees.*, rownum as rn from employees;
③. 表连接
将多张表连接为一张表进行处理(放在from后)

1.内连接
	关键词:…(inner)join … on  		 inner可以省略
	语法:表1 (inner)join 表2 on 表1.xxx = 表2.xxx
特点:①合并表1存在且表2也与之对应存在的数据②不保留表1存在且在表2中对应不存在的元组数据(与外连接对比)
2.外连接
	①左外连
		关键词:left (outer) join … on    	outer可以省略
		语法:表1 left join 表2 on 表1.xxx = 表2.xxx
		特点:合并表1和表2,并且会保留表1存在且表2对应不存在的元组,并对其补充为空
	②右外连
		语法:表1 right join 表2 on 条件
3.扩展
	如果有两张以上的表进行连接时,先连接两个后成为一个表,再连接下一个,依次连接
posted @ 2020-09-08 19:29  JWnMing  阅读(227)  评论(0编辑  收藏  举报