--工资级别表 create table SALGRADE ( GRADE NUMBER(10), LOSAL NUMBER(10,2), HISAL NUMBER(10,2) ) insert into SALGRADE values(1,0,100); insert into SALGRADE values(2,100,200); insert into SALGRADE values(3,200,500); insert into SALGRADE values(4,500,1000); insert into SALGRADE values(5,1000,2000); insert into SALGRADE values(6,2000,3000); insert into SALGRADE values(6,3000,5000); insert into SALGRADE values(6,5000,8000); insert into SALGRADE values(6,8000,10000); --给emp添加MGR(管理者号)列 alter table emp add MGR NUMBER(10); select * from emp for update; select ename,sal*12 from emp; select ename as 姓名,sal*12 as 年收入 from emp; select ename as "姓名",sal*12 as "年收入" from emp; select ename,sal,comm,sal+comm from emp; --使用NVL函数处理NULL值 select ename,sal,comm,sal+nvl(comm,0) as "月收入" from emp; --使用NVL2函数处理NULL值 select ename,nvl2(comm,sal+comm,sal) from emp; select * from emp; --连接字符串 select ename||' is a '||job as "Employee Detail" from emp; --使用where子句 select ename,sal from emp where sal>100; select job,sal from emp where ename='SCOTT'; select job,sal from emp where lower(ename) = 'scott'; select ename,sal,hiredate from emp where hiredate>'01-1月-82'; select ename,sal,hiredate from emp where hiredate>to_date('1982-01-01','YYYY-MM-DD'); select ename,sal,hiredate,job from emp where sal between 100 and 200; --显示首字符为S的所有雇员名及其工资 select ename,sal from emp where ename like 'S%'; --显示第三个字符为大写A的所有雇员名及其工资 select ename,sal from emp where ename like '__A%'; --显示雇员名包含"_"的雇员信息(其中ESCAPE后的字符a为转义符 select ename,sal from emp where ename like '%a_%' ESCAPE 'a'; select * from emp for update; select ename,sal from emp where sal in(800,1250); select ename,sal from emp where job is null; --显示补助非空的雇员信息 select ename,sal,comm from emp where comm is not null; --当执行升序排序时,如果被排序列包含NULL值,那么NULL会显示在最后面。 select ename,sal,comm from emp where deptno=3 order by comm; --当执行降序排序时,如果被排序列存在NULL值,那么NULL会显示在最前面。 select ename,sal,comm from emp where deptno=3 order by comm desc; --使用非选择列表列进行排序 select ename from emp order by sal desc; --使用别名排序 select ename,sal*12 as "全年工资" from emp where deptno=3 order by "全年工资" desc; --使用列位置编号排序 --另外当使用UNION,UNION ALL,INTERSECT,MINUS等集合操作符合并查询结查时,如果选择列表中的列名不同,并且希望进行排序,那么必须使用列位置。 select ename,sal*12 "全年工资" from emp where deptno=3 order by 2 desc; select * from emp; --使用特定格式插入日期值 insert into emp(empno,ename,sal,hiredate,comm,job,deptno) values(1356,'MARY',30.2,to_date('1983-10-20','YYYY-MM-DD'),10.2,'CLERK',5); --使用DEFAULT提供数据 select * from dept; insert into dept values(60,'MARKET',DEFAULT); SELECT * FROM dept WHERE deptno=60; --使用子查询插入数据 select * from employee; select * from emp; create table employee as select * from emp where 1=2; insert into employee(empno,ename,sal,deptno) select empno,ename,sal,deptno from emp where deptno=3; --使用子查询执行直接装载 --当要装载大批量数据时,采用第二种方法装载数据的速度远远优于第一种方法。 insert /*++APPEND*/ into employee(empno,ename,sal,deptno) select empno,ename,sal,deptno from emp where deptno=3; --使用多表插入数据 create table dept10 as select * from emp where 1=2; create table dept20 as select * from emp where 1=2; create table dept30 as select * from emp where 1=2; create table clerk as select * from emp where 1=2; create table other as select * from emp where 1=2; select * from dept10; select * from dept20; select * from dept30; select * from clerk; select * from other; delete dept10; delete dept20; delete dept30; delete clerk; delete other; select * from emp for update; --使用ALL操作符执行多表插入 insert all when deptno=1 then into dept10 when deptno=2 then into dept20 when deptno=3 then into dept30 when job='CLERK' then into clerk else into other select * from emp; --使用FIRST操作符执行多表插入 --当使用FIRST操作符执行多表插入时,如果数据已经满足了先前条件,并且已经被插入到某表,那么该行数据在后续插入中将不会被再次使用。 insert first when deptno=1 then into dept10 when deptno=2 then into dept20 when deptno=3 then into dept30 when job='CLERK' then into clerk else into other select * from emp; select * from emp; --更新日期列数据 update emp set hiredate=to_date('1984/01/01','YYYY/MM/DD') where empno=7788; --使用DEFAULT选项更新数据 select job from emp where ename='SCOTT'; update emp set job=DEFAULT where ename='SCOTT'; --修改表字段,设置默认值 alter table emp modify (job NVARCHAR2(255) default 'JOB'); --使用子查询更新数据 --更新关联数据 update emp set(job,sal,comm) = ( select job,sal,comm from emp where ename='FAT') where ename='SCOTT'; --使用子查询更新数据 --复制表数据 select * from employee; update employee set deptno = (select deptno from emp where empno=7788) where job = (select job from emp where empno=7788); --删除数据 delete from emp where ename='SMITH'; select * from emp; --使用TRUNCATE TABLE截断表 --使用TRUNCATE TABLE语句不仅会删除表的所有数据,而且还会释放表段所占用的空间。 --注意,DELETE语句的操作可以回退,但TRUNCATE TABLE语句的操作不能回退。 truncate table employee; --使用子查询删除数据 delete from emp where deptno = (select deptno from dept where dname='SALES'); select * from dept; select * from emp; --删除主表数据的注意事项 delete from dept where deptno=10; --设置保存点 savepint a; exec dbms_transaction.savepoint('a'); --取消部分事务 rollback to a; exec dbms_transaction.rollback_savepoint('a'); --取消全部事务 rollback; exec dbms_transaction.rollback; --只读事务 --设置只读事务 --当使用只读事务时,可以确保用户取得特定时间点的数据。 --只读事务是指只允许执行查询操作,而不允许执行任何DML操作的事务。 set TRANSACTION READ ONLY; exec dbms_transaction.read_only; --顺序事务 --设置顺序事务 --顺序事务使得用户可以取得特定时间点的数据,并且允许DML操作,可以使用顺序事务。 set TRANSACTION ISOLATION LEVEL SERIALIZABLE; --取得总计行数 select count(*) from emp; --在count函数中还可以引用表达式,因为分组函数会忽略NULL行,所以使用count(表达式)会显示NOT NULL的总计行数。 select count(comm) from emp; --取得方差和标准偏差 select variance(sal),stddev(sal) from emp; --取消重得值 select count(distinct deptno) AS distinct_dept from emp; select count(deptno) AS dept from emp; select * from emp; select distinct deptno AS distinct_dept from emp; select deptno AS distinct_dept from emp; --使用GROUP BY进行单列分组 select deptno,avg(sal),max(sal) from emp group by deptno; --使用GROUP BY进行多列分组 select deptno,job,avg(sal),max(sal) from emp group by deptno,job; --使用HAVING子句限制分组显示结果 select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<100; --使用ROLLUP操作符 --下面显示每部门每岗位的平均工资、每部门的平均工资、所有雇员平均工资 select deptno,job,avg(sal) from emp group by rollup(deptno,job); --使用CUBE操作符 --下面以显示每部门每岗位平均工资、部门平均工资、岗位平均工资、所有雇员平均工资为例 select deptno,job,avg(sal) from emp group by cube(deptno,job); --使用GROUPING函数 --GROUPING函数用于确定统计结果是否用到了特定列。 --如果函数返回0,则表示统计结果使用了该列,如果函数返回1,则表示统计结果未使用该列。 select deptno,job,avg(sal),grouping(deptno),grouping(job) from emp group by cube(deptno,job); --GROUPING SETS --使用GROUPING SETS操作符可以合并多个分组的结果。 --显示部门平均工资 select deptno,avg(sal) from emp group by deptno; --显示岗位平均工资 select job,avg(sal) from emp group by job; --显示部门平均工资和岗位平均工资 select deptno,job,avg(sal) from emp group by grouping sets(deptno,job); --使用相等连接执行主从查询 --下面显示所有雇员的名称、工资及其所在的部门名称为例,说明使用相等连接的方法。 select e.ename,e.sal,d.dname from emp e,dept d where e.deptno = d.deptno; --使用AND指定其他条件 select d.dname,e.ename,e.sal from emp e,dept d where e.deptno=d.deptno and d.deptno=1; --不等连接 select * from salgrade; --显示所有雇员的名称、工资及其工资级别 select a.ename,a.sal,b.grade from emp a,salgrade b where a.sal between b.losal and b.hisal; --连接查询-自连接 select * from emp for update; --显示EMPP雇员的上级领导 select manager.ename from emp manager,emp worker where worker.mgr = manager.empno and worker.ename = 'EMPP'; select * from dept; --内连接 select a.dname,b.ename from dept a,emp b where a.deptno=b.deptno and a.deptno=1; select a.dname,b.ename from dept a inner join emp b on a.deptno = b.deptno and a.deptno=1; --如果主表的主键列和从表的外部键列名称相同,那么还可以使用NATURAL JOIN关键字自动执行内连接操作 select dname,ename from dept natural join emp; --左外连接 select a.dname,b.ename from dept a left join emp b on a.deptno = b.deptno and a.deptno = 1; select a.dname,b.ename from dept a right join emp b on a.deptno = b.deptno and a.deptno=1; --完全外连接 select a.dname,b.ename from dept a full join emp b on a.deptno = b.deptno and a.deptno=1; --使用(+)操作符 --左外连接 select a.dname,b.ename from dept a,emp b where a.deptno = b.deptno(+) and b.deptno(+) = 1; --右外连接 select a.dname,b.ename from dept a,emp b where a.deptno(+) = b.deptno and a.deptno(+) = 1; --单行子查询 select ename,sal,deptno from emp where deptno= (select deptno from emp where ename = 'SCOTT'); select ename,sal,deptno from emp where deptno in (select deptno from emp); --在多行子查询中使用IN操作符 select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno = 1); --在多行子查询中使用ALL操作符 select ename,sal,deptno from emp where sal>all (select sal from emp where deptno = 5); --在多行子查询中使用ANY操作符 select ename,sal,deptno from emp where sal>any (select sal from emp where deptno = 5); select * from emp; --多列子查询 select ename,job,sal,deptno from emp where (deptno,job)= (select deptno,job from emp where ename='EMPP'); --成对比较 select ename,sal,comm,deptno from emp where (sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where deptno=3); --非成对比较示例 select ename,sal,comm,deptno from emp where sal in(select sal from emp where deptno=3) and nvl(comm,-1) in (select nvl(comm,-1) from emp where deptno=3); --相关子查询 --相关子查询是指需要引用主查询表列的子查询语句,相关子查询是通过EXISTS谓词来实现的 select ename,job,sal,deptno from emp where exists (select 1 from dept where dept.deptno = emp.deptno and dept.loc = 'NEW YORK'); select * from dept for update; --在FROM子句中使用子查询 --当在FROM子句中使用子查询时,该子查询会被作为视图对待,因此也被称为内嵌视图 --显示高于部门平均工资的雇员为例 select ename,job,sal from emp, (select deptno,avg(sal) avgsal from emp group by deptno) dept where emp.deptno = dept.deptno and sal > dept.avgsal; --在DML语句中使用子查询 --在INSERT语句中使用子查询 create table EMPL ( id NUMBER(10), name varchar2(20), title varchar2(100), salary number(10,2), EMPNO NUMBER(10), HIREDATE TIMESTAMP(6), COMM NUMBER(10,2), JOB NVARCHAR2(255), DEPTNO NUMBER(10) ) insert into empl(id,name,title,salary) select empno,ename,job,sal from emp; select * from empl; --在UPDATE语句中使用子查询 --当在UPDATE语句中使用子查询时,既可以在WHERE子句中引用子查询(返回未知条件值),也可以在SET子句中使用子查询(修改列数据) --将SCOTT同岗位的雇员工资和补助更新为与SCOTT的工资和补助完全相同为例 update emp set(sal,comm) = (select sal,comm from emp where ename='SCOTT') where job=(select job from emp where ename='SCOTT'); select * from emp for update; --在DELETE语句中使用子查询 delete from emp where deptno= (select deptno from dept where dname='SALES'); select * from dept; --在DDL语句中使用子查询 --在CREATE TABLE语句中使用子查询 create table new_emp(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp; select * from new_emp; --在CREATE VIEW语句中使用子查询 create or replace view dept_10 as select empno,ename,job,sal,deptno from emp where deptno=1 order by empno; select * from dept_10; --在CREATE MATERIALIZED VIEW语句中使用子查询 create MATERIALIZED VIEW summary_emp as select deptno,job,avg(sal) avgsal,sum(sal) sumsal from emp group by cube(deptno,job); --UNION --用于获取两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行,并且会以第一列的结果进行排序。 select ename,sal,job from emp where sal>100 union select ename,sal,job from emp where job='JOB'; select * from emp; --UNION ALL --UNION ALL操作符用于获取两个结果集的并集。 --但与UNION操作符不同,该操作符不会取消重复值,而且也不会以任何列进行排序。 select ename,sal,job from emp where sal>100 union all select ename,sal,job from emp where job='JOB'; --INTERSECT --INTERSECT操作符用于获取两个结果集的交集。 --当使用该操作符时,只会显示同时存在于两个结果集中的数据,并且会以第一列进行排序。 select ename,sal,job from emp where sal>100 intersect select ename,sal,job from emp where job='JOB'; --MINUS --MINUS操作符用于获取两个结果集的差集。 --当使用该操作符时,只会显示在第一个结果集中存在,在第二个结果集中不存在的数据,并且会以第一列进行排序。 select ename,sal,job from emp where sal>100 minus select ename,sal,job from emp where job='JOB'; select * from emp for update; --其他复杂查询 --层次查询 --下面以显示除"CLERK"外所有其他雇员的上下级关系为例,说明使用层次查询的方法。 select LPAD(' ',3*(LEVEL-1))||ename ename, LPAD(' ',3*(LEVEL-1))||job job from emp where job<>'CLERK' start with mgr is NULL connect by mgr=PRIOR empno; --使用CASE表达式 select ename,sal, CASE when sal>100 then 3 when sal>20 then 2 else 1 end grade from emp where deptno=10; update emp set sal=1000 where empno=8; --查看当前数据 select ename,sal from emp where ename='FAT'; --查看历史数据 select ename,sal from emp as of timestamp to_timestamp('2010-10-26 10:48:00','YYYY-MM-DD HH24:MI:SS') where ename='FAT' --使用WITH子句重用子查询 --显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(两次使用相同子查询) select dname,sum(sal) as dept_total from emp,dept where emp.deptno=dept.deptno group by dname having sum(sal) > (select sum(sal)*1/3 from emp,dept where emp.deptno = dept.deptno ); --显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(使用WITH子句重用子查询) with summary as ( select dname,sum(sal) as dept_total from emp,dept where emp.deptno=dept.deptno group by dname ) select dname,dept_total from summary where dept_total> (select sum(dept_total)*1/3 from summary);
相关推荐
在“精通Oracle10编程SQL(4)使用SQL语句.sql”中,你会学习到如何执行基本的SQL查询,如SELECT语句用于获取数据,INSERT语句用于插入新记录,UPDATE用于修改现有记录,以及DELETE用于删除记录。此外,还将涉及JOIN...
精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记
本资源“精通Oracle 10g SQL和PL SQL.zip”提供了全面的学习指南,帮助用户从基础到高级进阶,掌握这两个重要组件的精髓。 SQL(Structured Query Language)是用于管理关系数据库的标准语言,它允许用户创建、查询...
通过学习《精通Oracle 10g SQL和PL/SQL》,读者不仅可以掌握SQL和PL/SQL的基础知识,而且还可以掌握SQL高级特征(正则表达式、Flashback查询、MERGE语句、SQL:1999连接)和PL/SQL高级特征(记录类型、集合类型、对象...
本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...
OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...
通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...
Oracle PLSQL编程是数据库管理与开发中的核心技术,尤其在企业级应用系统中广泛使用。PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一个过程化语言,它结合了SQL的查询功能和传统的...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作能力和PL(过程化语言)的程序设计特性,是Oracle数据库系统中的核心组件之一。《精通Oracle PL/SQL》这本书深入探讨了这个语言的...
### Oracle监听执行SQL语句详解 #### 一、Oracle监听执行概述 在Oracle数据库管理与维护过程中,有时候我们需要了解应用程序正在执行哪些SQL语句,这不仅有助于性能优化,还可以帮助我们诊断潜在的问题。通过监听...
Oracle SQL不仅支持标准SQL语句,还提供了许多扩展功能,使其成为处理复杂数据查询的强大工具。 ### 《精通Oracle SQL 第2版》书籍概述 《精通Oracle SQL 第2版》是一本全面介绍Oracle SQL的高级指南,适合已经...
8. 数据库性能调优:识别和解决SQL语句中的性能瓶颈,使用Oracle的自动工作负载存储库(AWR)和其他性能监控工具。 9. 异常处理:使用Oracle SQL的异常处理机制来管理程序中可能出现的错误。 10. 使用Oracle特有的...
《精通Oracle10g SQL/PL编程》是一本专为数据库开发者和管理员设计的专业书籍,旨在深入探讨Oracle10g数据库管理系统中的SQL和PL/SQL编程技术。这本书以通俗易懂的方式,为初学者提供了全面的学习路径,同时也为有...
4. **性能调优**:Oracle SQL的性能调优是DBA的必备技能,本书会讲解如何通过 Explain Plan 分析查询执行计划,使用绑定变量,以及调整SQL语句和数据库参数来提高性能。 5. **事务与并发控制**:在多用户环境中,...
还会涵盖SQL优化器的工作原理和使用技巧,帮助读者理解如何编写高效的SQL语句。 4. **事务处理和并发控制**:介绍Oracle数据库的事务管理,包括ACID属性、锁定机制和并发控制策略,如行级锁定和多版本并发控制。 5...
本教程的"精通Oracle10编程"部分,将深入讲解如何使用PL/SQL进行数据库交互,包括变量声明、流程控制、异常处理和游标等基本概念。 在PL/SQL编程中,了解SQL DML语句(INSERT、UPDATE、DELETE)是基础,它们用于...
本篇文章将详细探讨如何利用工具实现SQL Server自动生成SQL语句并转换到Oracle。 首先,标题中的"sqlserver自动生成sql语句工具"指的是可以分析SQL Server数据库结构和数据,自动生成对应的SQL创建语句的软件。这种...
本教程《精通Oracle10g PL_SQL编程》旨在帮助学习者深入理解并熟练掌握Oracle 10g中的PL/SQL编程技术。 1. PL/SQL基础 - PL/SQL的结构:包括声明部分、执行部分和异常处理部分。 - 变量和常量:定义、声明及使用...
Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...
在《精通Oracle10编程》这本书中,读者将学习如何使用PL/SQL编写高级数据库应用程序,涵盖从基础语法到高级特性的全方位内容。书中的实例和练习将帮助读者深入理解这些概念,并提升实际操作技能。通过阅读这本书,...