Oracle学习文档
需积分: 0 35 浏览量
更新于2008-09-08
收藏 167KB PDF 举报
根据提供的文档内容,我们可以归纳总结出以下几个重要的Oracle数据库学习知识点:
### 1. SQL 查询技巧
#### 1.1 统计每个部门员工的数量
- **语法**: `SELECT dept_id, COUNT(*) FROM s_emp GROUP BY dept_id;`
- **解释**: 这条SQL语句用于统计`s_emp`表中每个部门的员工数量。`COUNT(*)`函数用于计算每一组中的行数,`GROUP BY`子句则指定了按照哪个字段进行分组。
#### 1.2 统计员工数量大于一定值的部门
- **语法**: `SELECT dept_id, COUNT(*) FROM s_emp GROUP BY dept_id HAVING COUNT(*) > 1;`
- **解释**: 与前一条SQL类似,但增加了`HAVING COUNT(*) > 1`条件,只返回那些员工数量大于1的部门。
#### 1.3 统计高薪员工所在部门
- **语法**: `SELECT e.first_name, salary, d.name FROM s_emp e, s_dept d WHERE e.dept_id = d.id AND salary > 1200;`
- **解释**: 这条SQL语句连接了`s_emp`和`s_dept`两个表,并筛选出工资超过1200的员工及其所在部门名称。
### 2. 删除重复记录的方法
#### 2.1 使用临时表删除重复数据
- **步骤**:
- 创建一个临时表,包含原始表中的唯一记录。
- 清空原始表。
- 将临时表重命名为原始表的名字。
- **示例**:
- `CREATE TABLE temp_emp AS SELECT DISTINCT * FROM employee;`
- `TRUNCATE TABLE employee;`
- `RENAME temp_emp TO employee;`
#### 2.2 使用ROWID删除重复记录
- **语法**: `DELETE FROM employee WHERE rowid NOT IN (SELECT MAX(t1.rowid) FROM employee t1 GROUP BY t1.emp_id, t1.emp_name, t1.salary);`
- **解释**: 该SQL语句利用ROWID属性,找出每组数据中的最大ROWID,然后删除不匹配这些ROWID的所有记录,从而达到删除重复记录的目的。
### 3. TOP N 查询
- **语法**:
- `SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE ROWNUM <= 3;`
- **解释**: 先按照薪水降序排列所有记录,然后选取前3条记录。
### 4. 分页查询
- **语法**:
- 查询第1-5条记录: `SELECT * FROM (SELECT rownum num, s_emp.* FROM s_emp) WHERE num >= 1 AND num <= 5;`
- 按照工资排序并分页: `SELECT salary, first_name FROM (SELECT s.*, rownum rm FROM (SELECT * FROM s_emp ORDER BY salary DESC) s) WHERE rm BETWEEN 6 AND 10;`
- **解释**: 使用ROWNUM进行分页查询,先对数据进行排序,再通过嵌套查询的方式实现分页。
### 5. 多表查询练习
#### 5.1 查询选修“数据库原理”的学生学号和姓名
- **语法**: `SELECT stu.sno, stu.sname FROM Student stu WHERE (SELECT COUNT(*) FROM sc WHERE sno = stu.sno AND cno = (SELECT cno FROM Course WHERE cname = '数据库原理')) != 0;`
- **解释**: 使用子查询的方式,首先找到课程名为“数据库原理”的课程编号,然后在选课表`sc`中找到对应的学生编号,最后从学生表中获取学生的学号和姓名。
#### 5.2 查询“周星驰”同学选修的课程名字
- **语法**: `SELECT cname FROM Course WHERE cno IN (SELECT cno FROM sc WHERE sno = (SELECT sno FROM Student WHERE sname = '周星驰'));`
- **解释**: 首先找到“周星驰”的学号,然后通过选课表`sc`找到他所选课程的编号,最后从课程表中获取课程名称。
#### 5.3 查询选修了5门课程的学生学号和姓名
- **语法**: `SELECT stu.sno, stu.sname FROM student stu WHERE (SELECT COUNT(*) FROM sc WHERE sno = stu.sno) = 5;`
- **解释**: 使用子查询的方式,计算每位学生在选课表`sc`中记录的数量,筛选出数量等于5的学生信息。
### 6. 外连接查询
- **语法**: `SELECT c.cityno, c.cityname, c.stateno, s.statename FROM city c, state s WHERE c.stateno = s.stateno (+) ORDER BY (c.cityno);`
- **解释**: 使用外连接(`stateno (+)`表示左外连接)来合并两个表,即使左侧表的某些记录在右侧表中没有匹配项也会被包含进来。这里的查询结果包含了城市表中的所有记录以及相应省份的信息,如果没有匹配省份,则省份信息为空。
summerbat
- 粉丝: 1
- 资源: 1
最新资源
- MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度 关键词:碳捕集 电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度》完全复现
- 关键词:微网 优化调度 深度强化学习 A3C 需求响应 编程语言:python平台 主题:基于改进A3C算法的微网优化调度与需求响应管理 内容简介: 代码主要做的是基于深度强化学习的微网
- cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型,Cruise混动仿真模型,混联混动汽车动力性经济性仿真 关于模型 1.本模型是基于IMMD架构搭载的混联混动仿真模型,关于IMMD架
- C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- Rhino(犀牛)插件ladybug-tools-1-8-0
- 三相10Kw光伏并网逆变器 包含全套理图 PCB 源代码
- MATLAB代码:考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型 关键词:碳捕集 综合能源系统 电转气P2G 热电联产 低碳调度 参考文档:Modeling and Optimiza
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程
- 基于mpx+vue+node.js的双端网盘系统的设计与实现源代码全套技术资料.zip