Oracle学习文档

preview
需积分: 0 23 下载量 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
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源