oracle常用sql查询语句部分
- 格式:doc
- 大小:1.09 MB
- 文档页数:27
oracle版本查询语句Oracle是一种非常流行的关系型数据库管理系统,它是许多企业和组织选择的数据管理解决方案。
在Oracle中,有时需要查询数据库版本来确认建立数据库与应用程序之间的兼容性。
下面是Oracle版本查询语句的中文版本:SELECT * FROM V$VERSION上述查询语句是Oracle中用于查询版本信息的标准查询语句,它可以返回包括Oracle数据库版本号和其他有关数据库的版本信息。
在执行查询前,需要以系统管理员身份登录Oracle数据库,使用system或sys等具有管理员权限的用户进行登录。
完整的查询语句如下:1.以管理员身份登录Oracle数据库。
2.在Oracle SQL Developer 或者SQL*Plus中打开SQL命令行窗口。
3.在SQL命令行窗口中输入以下查询语句:4.在查询结果中,您可以看到所有Oracle数据库的版本信息。
5.如果您只需要查看主版本号和次版本号,可以使用以下查询语句:SELECT banner FROM v$version WHERE rownum = 1;6.这将返回类似“Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production”这样的信息字符串,其中11.2.0.4是版本号的主版本号和次版本号。
除此之外,还有其他的一些查询Oracle版本的方法:这可以返回包括Oracle数据库版本号和其他版本信息的详细列表。
这可以返回包括Oracle数据库实例信息的列表,例如实例名称和启动时间。
其中还可以查看数据库的版本信息,如下所示:这将返回版本信息字符串,例如“11.2.0.4.0”。
注意事项:需要注意的是,在使用以上查询语句进行Oracle版本查询时,需要以系统管理员身份登录Oracle数据库。
否则,可能无法执行查询或无法访问需要的信息。
此外,在执行查询前,请确保您对Oracle数据库的版本信息有一些基本的了解。
oracle中group by用法摘要:1.Oracle 中Group By 概述2.Group By 的基本语法3.Group By 的常见用法1.按某一列分组2.按多列分组3.使用聚合函数4.使用rollup 和cube5.使用having 子句4.Group By 的高级用法1.去除重复记录2.分组排序3.结合其他SQL 语句5.Group By 在实际应用中的案例正文:在Oracle 数据库中,Group By 是一个非常重要的SQL 语句组成部分,它可以帮助我们对查询结果进行分组和汇总。
本文将详细介绍Oracle 中Group By 的用法,包括基本语法、常见用法、高级用法以及在实际应用中的案例。
1.Oracle 中Group By 概述Group By 是SQL 语句中用于对查询结果进行分组和汇总的关键字。
通过使用Group By,我们可以将查询结果按照某一列或多个列进行分组,并对每组数据进行汇总。
2.Group By 的基本语法在Oracle 中,Group By 的基本语法如下:```sqlSELECT column1, column2, aggregate_function(column)FROM table_nameWHERE conditionGROUP BY column1, column2ORDER BY column1, column2;```其中,`aggregate_function` 可以是`COUNT`、`SUM`、`AVG`、`MAX`、`MIN` 等聚合函数,`column1` 和`column2` 是需要分组的列,`condition` 是查询条件,`ORDER BY` 子句用于对分组后的结果进行排序。
3.Group By 的常见用法接下来,我们将介绍Group By 的常见用法:3.1 按某一列分组```sqlSELECT department, COUNT(employee_id)FROM employeesGROUP BY department;```上述语句将按照`department` 列对`employees` 表进行分组,并计算每个部门的员工数量。
Oracle常⽤SQL命令创建表空间1.创建默认表空间WLP_DATCREATE TABLESPACE "MYSPACE" DATAFILE'D:\oracle\oradata\orcl\data/WLP_DAT.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 32MLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;2.创建临时表空间WLP_TEMP(⽤于缓存,可以不建)ALTER TABLESPACE "TEMP" ADD TEMPFILE'D:\oracle\oradata\orcl\data/WLP_TEMP.dbf' SIZE 32m REUSE autoextend on next 32m;创建⽤户并授权1CREATE USER "WLPING" PROFILE "DEFAULT"2 IDENTIFIED BY "123456"3DEFAULT TABLESPACE "MYSPACE" //默认指定表空间4TEMPORARY TABLESPACE "TEMP" //指定缓存表空间5 ACCOUNT UNLOCK; //⽤户⾮锁定67GRANT EXECUTE ON dbms_comparison TO "WLPING";8GRANT UNLIMITED TABLESPACE TO "XIR_MD";9GRANT "CONNECT" TO "XIR_MD";10GRANT "RESOURCE" TO "XIR_MD";1112-- GRANT DBA TO XIR_MD;PROFILE:Oracle系统中的profile可以⽤来对⽤户所能使⽤的数据库资源进⾏限制,使⽤Create Profile命令创建⼀个Profile,⽤它来实现对数据库资源的限制使⽤,如果把该profile分配给⽤户,则该⽤户所能使⽤的数据库资源都在该profile的限制之内。
oracle中select使用总结Oracle是一种常用的数据库管理系统,它具有强大的查询功能。
在Oracle中,SELECT是用于从数据库中检索数据的关键字。
通过SELECT语句,可以从一个或多个表中选择一部分或全部列的数据,并按照特定的条件进行过滤和排序。
SELECT语句的基本语法如下:```SELECT列名1,列名2,...FROM表名WHERE条件;```下面是一些SELECT语句的常用用法总结:1.检索表中的全部数据:```SELECT*FROM表名;```这个语句会返回表中所有的行和列,"*"表示所有列。
2.检索指定列的数据:```SELECT列名1,列名2,...FROM表名;```在SELECT后面列出需要检索的列名,多个列名之间用逗号分隔。
3.检索数据并去除重复行:```SELECTDISTINCT列名FROM表名;```DISTINCT关键字用于去除查询结果中的重复行。
4.对数据进行排序:```SELECT列名FROM表名ORDERBY列名ASC(升序)/DESC(降序);```ORDERBY关键字用于对查询结果进行排序,默认为升序。
5.对数据进行条件过滤:```SELECT列名FROM表名WHERE条件;```WHERE关键字用于添加条件表达式,只有满足条件的数据才会被返回。
6.对数据进行模糊查询:```SELECT列名FROM表名WHERE列名LIKE'关键字';```LIKE关键字用于进行模糊查询,通常与通配符配合使用,%表示任意字符,_表示单个字符。
7.对数据进行分组:```SELECT列名1,列名2,...FROM表名GROUPBY列名;```GROUPBY关键字用于按照指定的列对结果进行分组。
8.对分组后的数据进行条件过滤:```SELECT列名1,列名2,...FROM表名GROUPBY列名HAVING条件;```HAVING关键字用于对分组后的结果进行条件过滤。
oracle sql测试用例Oracle SQL测试用例在数据库开发和维护过程中,测试是一个非常重要的环节。
通过编写和执行测试用例,可以验证数据库的功能和性能是否符合预期,发现潜在的问题和错误,保证系统的稳定性和可靠性。
本文将以Oracle SQL测试用例为标题,介绍一些常见的测试场景和用例。
一、查询语句测试用例1. 简单查询:编写一个简单的SELECT语句,查询表中的数据。
验证查询结果是否正确,包括数据的准确性、完整性和顺序等。
2. 条件查询:编写带有WHERE子句的SELECT语句,测试不同的条件,如等于、大于、小于、范围等。
验证查询结果是否符合预期。
3. 排序查询:编写带有ORDER BY子句的SELECT语句,测试不同的排序规则,如升序、降序、多字段排序等。
验证查询结果是否按照预期排序。
4. 分组查询:编写带有GROUP BY子句的SELECT语句,测试不同的分组条件,如按照某个字段分组、按照多个字段分组等。
验证查询结果是否正确分组,并计算正确的聚合函数值。
5. 连接查询:编写带有JOIN子句的SELECT语句,测试不同的连接方式,如内连接、外连接、自连接等。
验证查询结果是否正确关联两个或多个表的数据。
二、数据操作测试用例1. 插入数据:编写INSERT语句,向表中插入一条或多条数据。
验证数据是否成功插入,并且表的主键、唯一约束等是否生效。
2. 更新数据:编写UPDATE语句,修改表中的数据。
验证数据是否成功更新,并且更新后的数据是否符合预期。
3. 删除数据:编写DELETE语句,删除表中的数据。
验证数据是否成功删除,并且删除后的数据是否符合预期。
4. 事务处理:编写一系列的SQL语句,测试事务的处理能力。
验证在事务提交或回滚后,数据是否成功处理和恢复。
三、性能测试用例1. 单表查询性能:测试在不同的数据量下,查询单个表的性能。
验证查询的响应时间是否符合预期,并且查询的效率是否会随着数据量的增加而下降。
oracle数据库like查询语句Oracle数据库是一种关系型数据库管理系统,具有强大的查询功能。
其中,like查询语句是一种常用的模糊查询语句,用户可以根据指定的模式搜索匹配的数据。
本文将一步一步回答有关Oracle数据库like查询语句的问题,以帮助读者更好地理解如何使用和优化这种查询语句。
第一步:了解like查询语句的基本语法和用法在Oracle数据库中,like查询语句用于根据指定的模式匹配字符串。
其基本语法如下:SELECT column_listFROM table_nameWHERE column_name LIKE pattern;其中,column_list表示要查询的列,table_name表示要查询的表,column_name表示要查询的列名,pattern表示要匹配的模式。
模式可以包含通配符,如表示匹配0个或多个字符,_ 表示匹配一个字符。
举个例子,假设我们有一个名为customers的表,其中有一个名为name 的列,我们可以使用如下的like查询语句来查找名字以"A"开头的顾客:SELECT *FROM customersWHERE name LIKE 'A';第二步:学习如何使用通配符通配符是like查询语句的重要组成部分,可以帮助我们更具体地指定要匹配的模式。
Oracle数据库支持两种通配符:和_。
表示匹配0个或多个字符,可以放在模式的起始、中间或结尾位置。
例如,要查找所有以"A"结尾的顾客,可以使用如下的like查询语句:SELECT *FROM customersWHERE name LIKE 'A';_表示匹配一个字符,可以放在模式的任意位置。
例如,要查找名字中第二个字母为"M"的顾客,可以使用如下的like查询语句:SELECT *FROM customersWHERE name LIKE '_M';需要注意的是,通配符在like查询语句中是区分大小写的。
oracle查询语句汇总与分类查询语句实例,⽆结果集的--对oracle 查询的学习--select <*,column [alias],...>--from tble [where condition(s)]--[group by group_by_expression]--[order by column[desc|asc] ]--emp表describe emp;select*from emp;--dept表describe dept;select*from dept;--基本查询select*from dept;select empno, ename, job from emp;--通过distinct删除重复值select job from emp;select distinct job from emp;--distinct 限制的是后⾯所有列组合出现的重复值,这⾥是job和deptbo组合为键值的来判别不同select distinct job, deptno from emp;--算术表达式select empno, ename , sal ,sal*12 year_salary from emp;--别名的使⽤select empno as id , ename name , sal "Salary" ,sal*12 "Annual Salary" from emp;--连接表达式select ename ||' 的职位是 '|| job from emp;--处理null 如果不处理null,null+任意值还是等于nullselect ename , sal ,comm , sal+comm total_salary from emp;select ename , sal,comm, sal+nvl(comm,0) total_salary from emp;--对⽇历列的处理,默认的显⽰格式是DD-MON-RR==>两位⽇-⽉明-两位年--可以使⽤to_char()对⽇期格式化select ename , hiredate from emp;select ename ,to_char(hiredate,'YYYY-MM-DD') from emp;--to_date对字符串转化为date类,以⽅便⽐较⽇期⼤⼩select ename, sal, hiredate from emp where hiredate>to_date('1982-01-01','YYYY-MM-DD');--限制查询-- where的使⽤select ename , sal from emp where sal<2000;select ename, job from emp where job ='SALESMAN';--可以通过to_date()函数转换为date类型⽐较的select ename, hiredate, job from emp where hiredate>'01-1⽉-82';select ename, sal, job from emp where sal between1500and3000;--[1500,3000] 闭区间--这⾥的集合使⽤的是括号;select ename, sal, job from emp where ename in ('FORD','SCOTT');--名字中第⼆个字是Aselect ename, sal, job from emp where ename like'_A%';--转义符,通过escape声明转义符,转义符可以是任意字符串--insert into emp (empno,ename) values(5566,'JOHN_SMITH');select ename, empno from emp where ename like'%\_%'escape'\';--查询某个空值,如果使⽤comm==null会发现没有结果select ename, sal, comm from emp where comm is null;--and or notselect ename, sal, job from emp where sal>1000and job ='CLERK';--order by asc desc null的值被默认为最⼤的select ename, sal from emp order by sal asc;--使⽤union并集查询时如果列名不同则使⽤位置排序select empno, ename, sal from emp order by1;--多列排序select empno, ename, job, sal from emp order by job asc, sal desc;--分组查询select count(ename) num from emp ;--出现null的值的话不计算在内的select avg(sal) avg_sal,sum(sal) sum_sal from emp;select max(sal) max_salaary, min(sal) min_salary from emp;--单列分组:查询按部分分组select deptno,avg(sal) avg_salary, sum(sal), max(sal), min(sal) from emp group by deptno order by deptno;--多列分组:按部门和职位分组select deptno, job, avg(sal) avg_salary, max(sal) max_salary from emp group by deptno, job order by deptno,job;--rollup()函数,按⾏⼩计,把分组计算后的结果,再根据⾏列统计每⾏的信息select deptno, job, avg(sal) avg_salary from emp group by rollup(deptno,job);select deptno, job, avg(sal) avg_salary from emp group by cube(deptno,job);--cube()函数,对每⾏每列进⾏⼩计CLERK MANAGER PRESIDENT ANALYST SALESMAN total101300245050002916 (1300+2450+5000)/320950297530002175 (950+2975+3000)/330950285014001566 (950+2850+1400)/310372758500030001400是总的表的平均值2073--这⾥的2073不等于total的平均值,每个total可以这么理解total=(a+b+(c+d)/2+e)/4 (c+d)/2相当于两⼈在同⼀组中的平均值-- a,b,c,d,e分别是员⼯的薪⽔,c和d是相同岗位和部门的员⼯,那么tatal就不是这五个员⼯薪⽔的平均值了;--having限制分组结果select deptno, max(sal) max_sal from emp group by deptno having max(sal)>4000;--连接查询--笛卡⼉积:两个表直接相乘select emp.ename, dept.dname from emp, dept;--等值连接select emp.ename, emp.job,dept.dname, dept.loc from emp,dept where emp.deptno=dept.deptno;--⾃连接通过别名虚拟成两个表select e.empno, e.ename, manager.empno, manager.ename from emp e, emp manager where e.mgr = manager.empno;--内连接:返回满⾜条件的记录外连接:还返回不满⾜条件的记录select e.ename, d.dname from emp e inner join dept d on(e.deptno = d.deptno);--左连接select e.ename, d.dname from emp e left join dept d on(e.deptno = d.deptno);--右连接select e.ename, d.dname from emp e right join dept d on(e.deptno = d.deptno);--全连接: 不同于笛卡⼉积,是左连接和右连接的并集select e.ename, d.dname from emp e full join dept d on(e.deptno = d.deptno);--⼦查询--单⾏单列⼦查询select ename, job from emp where job=(select job from emp where ename='SCOTT');--多⾏单列⼦查询使⽤in,any(>any:b⽐其中⼀个⼤就ok),all (其中的所有数据都满⾜)-- 查询和salesman在同⼀个部门,却不是SALESMAN的职位select ename, deptno from emp where deptno in(select deptno from emp where job='SALESMAN') and job !='SALESMAN';-- 查询⽐salesman最低⼯资⾼的所有⼈信息select ename, sal, deptno from emp where sal >any(select sal from emp where job='SALESMAN') and job!='SALESMAN';--多⾏多列⼦查询--查询和scott相同部门和职位的员⼯select ename, job, deptno from emp where (job, deptno ) in (select job, deptno from emp where ename='SCOTT');--⾏内视图:把⼦查询当视图--查询薪⽔⽐本部门平均薪⽔⾼的员⼯语句⼀使⽤⼦查询,语句⼆:使⽤视图⽐较容易理解,先查询出每个部门的平均值,再⽤原语句和结果⽐较select ename, sal, deptno from emp e where sal>(select avg(sal) from emp x where x.deptno = e.deptno) order by deptno;select ename, sal, deptno from emp e (select deptno, avg(sal) avg_sal from emp group by deptno) xwhere e.deptno = x.deptno and e.sal>x.avg_sal order by deptno;--exists语句只要⼦查询语句有结果,那么这条主查询语句就有结果获取有员⼯的部门信息select deptno, dname, loc from dept where exists (select*from emp where emp.deptno = dept.deptno);--集合查询 select statement1 [union|union all|intersect|minus] select statemens2 并集交集差集--职位是manager但是薪⽔低于2500 语句⼀使⽤交集,⼆使⽤差集select ename, job, sal from emp where job='MANAGER'intersect select ename, job, sal from emp where sal<2500;select ename, job, sal from emp where job='MANAGER' minus select ename, job, sal from emp where sal>2500;SQL>--select <*,column [alias],...>SQL>--from tble [where condition(s)]SQL>--[group by group_by_expression]SQL>--[order by column[desc|asc] ]SQL>SQL>--emp表SQL> describe emp;名称是否为空? 类型----------------------------------------------------- -------- ------------------------------------EMPNO NOT NULL NUMBER(4)ENAME VARCHAR2(10)JOB VARCHAR2(9)MGR NUMBER(4)HIREDATE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NUMBER(2)SQL>select*from emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------7369 SMITH CLERK 790217-12⽉-80800207499 ALLEN SALESMAN 769820-2⽉-811600300307521 WARD SALESMAN 769822-2⽉-811250500307566 JONES MANAGER 783902-4⽉-812975207654 MARTIN SALESMAN 769828-9⽉-8112501400307698 BLAKE MANAGER 783901-5⽉-812850307782 CLARK MANAGER 783909-6⽉-812450107788 SCOTT ANALYST 756619-4⽉-873000207839 KING PRESIDENT 17-11⽉-815000107844 TURNER SALESMAN 769808-9⽉-8115000307876 ADAMS CLERK 778823-5⽉-871100207900 JAMES CLERK 769803-12⽉-81950307902 FORD ANALYST 756603-12⽉-813000207934 MILLER CLERK 778223-1⽉-821300105566 JOHN_SMITH已选择15⾏。
oracle数据库模糊查询语句全文共四篇示例,供读者参考第一篇示例:Oracle数据库是一种广泛使用的关系型数据库管理系统,它支持使用SQL语言进行数据查询和操作。
在实际业务场景中,经常会遇到需要进行模糊查询的情况,以便更快地找到需要的数据。
模糊查询是一种能够匹配模式而非确定性的查询方法,在关键字不确定或者查询结果需要包含多种可能性时非常有用。
在Oracle数据库中,模糊查询主要通过使用LIKE关键字来实现。
通过使用通配符和LIKE关键字结合,可以实现更加灵活和强大的模糊查询功能。
接下来我们将详细介绍如何在Oracle数据库中使用模糊查询语句。
通配符是一种特殊字符,用于在模糊查询中匹配模式。
在Oracle 数据库中,主要有两种通配符:百分号(%)和下划线(_)。
百分号用于匹配任意字符(包括零个字符),而下划线用于匹配单个字符。
通过在查询语句中使用这些通配符,可以实现针对不确定字符的模糊匹配。
下面是一个简单的例子,演示如何在Oracle数据库中使用LIKE关键字进行模糊查询。
假设我们有一个名为“employees”的表,其中包含员工姓名信息。
我们想要查找所有名字包含“John”的员工信息,可以使用如下查询语句:```sqlSELECT * FROM employees WHERE name LIKE '%John%';```在上面的查询语句中,`%`是通配符,表示可以匹配0个或多个任意字符。
这条查询语句会返回所有名字中包含“John”的员工信息。
如果想要查找名字以“John”开头的员工信息,可以使用如下查询语句:类似地,如果要查找名字以“John”结尾的员工信息,可以使用如下查询语句:除了使用`%`通配符外,还可以结合使用下划线来进行更精确的模糊匹配。
如果想要查找名字为“John”且名字总长度为5的员工信息,可以使用如下查询语句:通过使用不同的组合方式,可以实现各种各样的模糊查询。
oracle分页sql语句分页查询是在大数据量的情况下,为了提高查询效率和减少内存占用,将结果分批次展示给用户的一种常用技术。
在Oracle数据库中,我们可以使用ROWNUM和ROW_NUMBER函数来实现分页查询。
1. 使用ROWNUM实现分页查询ROWNUM是Oracle中的伪列,它会为查询结果集中的每一行赋予一个唯一的行号。
我们可以利用ROWNUM来实现分页查询的功能。
```sqlSELECT *FROM (SELECT t.*, ROWNUM AS rnFROM table_name tWHERE conditionsORDER BY order_column)WHERE rn BETWEEN start_row AND end_row;```其中,table_name是要查询的表名,conditions是查询条件,order_column是排序列,start_row和end_row是要查询的行范围。
2. 使用ROW_NUMBER函数实现分页查询ROW_NUMBER函数是Oracle提供的窗口函数之一,它可以为查询结果集中的每一行赋予一个唯一的序号。
我们可以利用ROW_NUMBER函数来实现分页查询的功能。
```sqlSELECT *FROM (SELECT t.*, ROW_NUMBER() OVER(ORDER BY order_column) AS rnFROM table_name tWHERE conditions)WHERE rn BETWEEN start_row AND end_row;```其中,table_name是要查询的表名,conditions是查询条件,order_column是排序列,start_row和end_row是要查询的行范围。
3. 使用OFFSET-FETCH语法实现分页查询Oracle 12c及以上版本引入了OFFSET-FETCH语法,可以更简洁地实现分页查询的功能。
Oracle查询语句 select * from scott.emp ;
1.--dense_rank()分析函数(查找每个部门工资最高前三名员工信息) select * from (select deptno,ename,sal,dense_rank() over(partition by deptno order by sal desc) a from scott.emp) where a<=3 order by deptno asc,sal desc ; 结果:
--rank()分析函数(运行结果与上语句相同) select * from (select deptno,ename,sal,rank() over(partition by deptno order by sal desc) a from scott.emp ) where a<=3 order by deptno asc,sal desc ; 结果:
--row_number()分析函数(运行结果与上相同) select * from(select deptno,ename,sal,row_number() over(partition by deptno order by sal desc) a from scott.emp) where a<=3 order by deptno asc,sal desc ;
--rows unbounded preceding 分析函数(显示各部门的积累工资总和) select deptno,sal,sum(sal) over(order by deptno asc rows unbounded preceding) 积累工资总和 from scott.emp ; 结果: --rows 整数值 preceding(显示每最后4条记录的汇总值) select deptno,sal,sum(sal) over(order by deptno rows 3 preceding) 每4汇总值 from scott.emp ; 结果:
--rows between 1 preceding and 1 following(统计3条记录的汇总值【当前记录居中】) select deptno,ename,sal,sum(sal) over(order by deptno rows between 1 preceding and 1 following) 汇总值 from scott.emp ; 结果:
--ratio_to_report(显示员工工资及占该部门总工资的比例) select deptno,sal,ratio_to_report(sal) over(partition by deptno) 比例 from scott.emp ; 结果:
--查看所有用户 select * from dba_users ; select count(*) from dba_users ; select * from all_users ; select * from user_users ; select * from dba_roles ;
--查看用户系统权限 select * from dba_sys_privs ; select * from user_users ;
--查看用户对象或角色权限 select * from dba_tab_privs ; select * from all_tab_privs ; select * from user_tab_privs ;
--查看用户或角色所拥有的角色 select * from dba_role_privs ; select * from user_role_privs ; -- rownum:查询10至12信息 select * from scott.emp a where rownum<=3 and a.empno not in(select b.empno from scott.emp b where rownum<=9); 结果:
--not exists;查询emp表在dept表中没有的数据 select * from scott.emp a where not exists(select * from scott.dept b where a.empno=b.deptno) ; 结果:
--rowid;查询重复数据信息 select * from scott.emp a where a.rowid>(select min(x.rowid) from scott.emp x where x.empno=a.empno);
--根据rowid来分页(一万条数据,查询10000至9980时间大概在0.03秒左右) select * from scott.emp where rowid in(select rid from(select rownum rn,rid from(select rowid rid,empno from scott.emp order by empno desc) where rownum<10)where rn>=1)order by empno desc ; 结果: --根据分析函数分页(一万条数据,查询10000至9980时间大概在1.01秒左右) select * from(select a.*,row_number() over(order by empno desc) rk from scott.emp a ) where rk<10 and rk>=1; 结果:
--rownum分页(一万条数据,查询10000至9980时间大概在0.01秒左右) select * from(select t.*,rownum rn from(select * from scott.emp order by empno desc)t where rownum<10) where rn>=1;
select * from(select a.*,rownum rn from (select * from scott.emp) a where rownum<=10) where rn>=5 ;
--left outer join:左连接 select a.*,b.* from scott.emp a left outer join scott.dept b on a.deptno=b.deptno ;
--right outer join:右连接 select a.*,b.* from scott.emp a right outer join scott.dept b on a.deptno=b.deptno ; --inner join select a.*,b.* from scott.emp a inner join scott.dept b on a.deptno=b.deptno ;
--full join select a.*,b.* from scott.emp a full join scott.dept b on a.deptno=b.deptno ;
select a.*,b.* from scott.emp a,scott.dept b where a.deptno(+)=b.deptno ;
select distinct ename,sal from scott.emp a group by sal having ;
select * from scott.dept ; select * from scott.emp ;
--case when then end (交叉报表) select ename,sal,case deptno when 10 then '会计部' when 20 then '研究部' when 30 then '销售部' else '其他部门' end 部门 from scott.emp ; 结果:
select ename,sal,case when sal>0 and sal<1500 then '一级工资' when sal>=1500 and sal<3000 then '二级工资' when sal>=3000 and sal<4500 then '三级工资' else '四级工资' end 工资等级 from scott.emp order by sal desc ; 结果:
--交叉报表是使用分组函数与case结构一起实现 select 姓名,sum(case 课程 when '数学' then 分数 end)数学,sum(case 课程 when '历史' then 分数 end)历史 from 学生 group by 姓名 ;
--decode 函数 select 姓名,sum(decode(课程,'数学',分数,null))数学,sum(decode(课程,'语文',分数,null))语文,sum(decode(课程,'历史','分数',null))历史 from 学生 group by 姓名 ;
--level。。。。connect by(层次查询) select level,emp.* from scott.emp connect by prior empno = mgr order by level ; 结果: