Oracle - SQL小宝典 下载本文

内容发布更新时间 : 2024/12/25 21:33:06星期一 下面是文章的全部内容请认真阅读。

select empno,ename,job from emp where job>’clerk’ and sal<=2000;

排序查询: (order by 指定查询结果的排序方式) select empno,ename,job from emp where job<=’clerk’ order by job asc,sal desc;

分组查询:

分组查询是指将查询结果按照字段分组。

Where 检查每条记录是否符合条件,having检查分组后的各组是否满足条件,having语句只能配合group by 语句使用。 Select empno,ename,job,sal from emp group by job,empno,ename,sal where sal<=2000;

--在没有分组函数的时候 --相当于distinct 的功能 select job from emp group by job; select distinct job from emp;

--有分组函数的时候 --分组统计的功能 统计每种工作的工资总额是多少?? select job,sum(sal) from emp group by job; --行之间的数据相加 select sum(sal) from emp; --公司的工资总额

字段运算查询:

可以利用几种基本的算术运算符来查询数据。 Select empno,ename,sal,mgr,sal+mgr from emp;

利用算术运算符仅仅适合多个数值型字段或字段与数字之间的运算。

1.1.2. 多表查询

所谓多表查询是相对单表而言的,指从多个数据表中查询数据。

无条件查询:

无条件多表查询是将各表的记录以“笛卡尔”积的方式组合起来。

如scott.dept表共有4条记录,scott.emp表共有14条记录,其“笛卡尔”积将有4*14=56条记录。 select ename,dname from emp,dept;

等值多表查询:

等值多表查询将按照等值条件查询多个数据表中相关联的数据。要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型、宽度和取值范围。

92年的语法: Select empno,ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno and ename=’张三’;

99年的语法: Select empno,ename,emp.deptno,dname from emp join dept on emp.deptno=dept.deptno where ename=’张三’;

非等值查询: Select empno,ename,deptno,dname from emp,dept where emp.deptno!=dept.deptno and emp.deptno!=10;

1.1.3. 嵌套查询

在select查询语句里可以嵌入select查询语句,称为嵌套查询。有些书上将内嵌的select语句称为子查询,子查询形成的结果又成为父查询的条件。

子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。子查询中不能有order by分组语句。

简单嵌套查询: Select empno,ename,job,sal from emp where sal>=(select sal from emp where ename=’ward’);

上面的查询等价于两步: 1) 执行select sal from emp where ename=’ward’ 得出 sal=1250; 2) 执行 select empno,ename,job,sal from emp where sal>=1250;

带in的嵌套查询 Select empno,ename,job,sal from emp where sal in (select sal from emp where ename=’ward’);

带any的嵌套查询 Select empno,ename,job,sal from emp where sal > any (select sal from scott.emp where JOB=’MANAGER’);

带any的查询过程等价于两步的执行过程。

(1) 执行“select sal from emp where job=’MANAGER’”,其结果为

2975,2850,2450.

(2) 父查询执行下列语句。

Select empno,ename,job sal from emp where sal>2975 or sal>2850 or sal>2450

带some的嵌套查询: Select empno,ename,job,sal from emp where sal = some(select sal from scott.emp where JOB=’MANAGER’); 带some的嵌套查询与any的步骤相同。

(1)执行“select sal from emp where job=’MANAGER’”,其结果为

2975,2850,2450. (2)父查询执行下列语句。

Select empno,ename,job sal from emp where sal=2975 or sal=2850 or sal=2450

注:带any的嵌套查询和some的嵌套查询功能是一样的。早期的sql仅仅允许使用any,后来的版本为了和英语的any相区分,引入了some,同时还保留了any关键词。

带all的嵌套查询: Select empno,ename,job,sal from emp where sal > all(select sal from scott.emp where JOB=’MANAGER’);

带all的嵌套查询和some查询步骤相同。

执行过程:

(1)执行“select sal from emp where job=’MANAGER’”,其结果为

2975,2850,2450.

(2)父查询执行下列语句。

Select empno,ename,job sal from emp where sal>2975 and sal>2850 and sal>2450

带exists的嵌套查询: Select empno,ename,job,sal from emp,dept where exists (select * from emp where emp.deptno=dept.deptno);

并操作的嵌套查询:(集合中的并集操作,即属于集合A 或集合B的元素) Select deptno from emp union select deptno from dept;

交操作的嵌套查询:(集合中的交集,即属于集合A且属于集合B的元素) Select deptno from emp intersect select deptno from dept;

差操作的嵌套查询 (集合中的差集,即属于集合A而不属于集合B的元素) Select deptno from emp minus select deptno from dept;

分页查询 select * from (select rownum as num,emp.* from emp) where num >= 9 and num <= 12;

1.1.4. 函数查询

1

数学函数