内容发布更新时间 : 2024/11/2 19:19:16星期一 下面是文章的全部内容请认真阅读。
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
数学函数