oracle笔记2

更新时间:2024-04-08 14:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Oracle笔记 第二天

一. 伪列 ( rowid , rownum )

1. 概念 : 数据库表里实际不存在的,无法通过select * 查询到的字段.

2. Rowid : 是一条记录在数据库里的唯一标识 , 是通过对记录所在空间的物理地址计算 得到.

3. Rownum : 数据库服务器会自动为每次出现在查询结果里的记录进行编号,从1开始. --- 请打印表里的前5行数据

Select * from employees where rownum<=5 ; --- 请打印表里的第6到第10行数据

Select * from employees where rownum between 6 and 10; [error]

注意: rownum必须从1开始使用, < <= >=1 =1 between 1 and ...

二. 子查询

1. 子查询结果为单行单列( 一个值 )

--- 请打印工资高于平均工资的员工信息

1) select avg(salary) from employees ; -----> result 2) select * from employees where salary > result ;

3) select * from employees where salary > (select avg(salary) from employees );

--- 请打印各部门工资最高的员工信息

*** 通过为表起别名的形式,可以区分不同的查询

--- 请打印工资不是最低两位的员工信息

--- 按工资进行排名,排名从1开始,工资相同排名相同(如果两人并列第1则没有第2名, 从第三名继续排)

2. 子查询的结果是多行多列( 虚拟表 ) , 针对虚拟表做二次查询

--- 请打印工资最高的五名员工信息

Select * from employees where rownum<=5 order by salary desc ; error

Select * from ( select * from employees order by salary desc) where rownum<=5;

3. 数据分页 ---- 对满足要求的结果数据分段显示 , 需要子查询和rownum配合完成

--- 请打印工资最高的第6到第10位员工信息

数据分页实现步骤:

1) 对数据按要求进行处理

2) 提取前xxx行数据,同时添加一个rn字段(rownum) 3) 根据rn的值提权 第xxx行到 第***行

4. 查询结果是一列多行(多个值) --- 使用在条件判断里时通过in完成 --- 请打印与’Taylor’在同一部门工作的员工信息

1) select department_id from employees where last_name=’Taylor’; 2) select * from employees where department_id in ( result ) ;

三. 表连接

1. 概念

当结果数据来自于多张表时,根据一定的条件将多张表的相关记录合并成一行,显 示给用户.

--- 请打印员工的详细信息,以及他所在的部门名称

2. 表连接的分类 --- 内连接 外连接 自连接 多表连接

1) 内连接 : 根据条件将满足要求的记录合并显示, 连接过程中使用关键字 inner join , 其中inner可以省略 , 连接条件用on给定 , 其他条件继续使用where

--- 请打印60部门的员工详细信息,以及他所在的部门名称 Select e.* , d.*

From employees e inner join departments d On e.department_id = d.department_id Where e.department_id = 60 ;

--- 请打印各部门名称以及部门人数 ( 只打印人数大于2的部门 ) A. 表连接 B.分组 C. Having Select d.department_name , count(*) From employees e join departments d On e.department_id = d.department_id Group by d.department_name Having count(*)>2 ;

2) 外连接 : 可以处理连接条件为null的记录

A. 左外连接 -- [重点] , 以左表为主(记录全部出现), 右表辅助(以空行占位) 使用关键字 left outer join , 其中outer可以省 , 条件用on给定 B. 右外连接 -- 以右表为主 right outer join

C. 全外连接 -- 不分左右,全部显示,谁缺谁补 , full outer join

--- 请打印所有员工的姓名,以及他所在部门的名称 左外:

Select e.last_name,e.department_id,d.department_id,d.department_name From employees e left join departments d On e.department_id = d.department_id ; 右外:

Select e.last_name,e.department_id,d.department_id,d.department_name From departments d right join employees e On e.department_id = d.department_id ; 全外:

Select e.last_name,e.department_id,d.department_id,d.department_name From employees e full join departments d On e.department_id = d.department_id ;

3) 多表连接 --- 语法

--- 请打印所有员工的姓名,所在部门的名称,以及所在的城市 Select e.last_name, d.department_name , lo.city From employees e left join departments d On e.department_id = d.department_id Left join locations lo

On d.location_id = lo.location_id ;

4) 自连接 --- 通过为一张表定义两个别名的方式,模拟表连接查询 --- 请打印员工的姓名 以及 他的上司的姓名

本文来源:https://www.bwwdw.com/article/fxpr.html

Top