DESCRIBE --描述准备好的查询
===================SELECT========================
select 列名(字段名),* ,distinct,表达式,函数(包括聚合函数),别名,伪列,子查询,常量
from 表,视图,子查询,别名
where 条件表达式,模糊条件,子查询,join
group by 列名(字段名)
having 条件表达式、聚合函数
order by 列名(字段名),表达式
聚合函数包括max() min() avg() count() sum() ;
--模糊查询 between ... and ... select * from emp where sal between 1000 and 5000;
--is null 或者 is not null select * from emp where comm is null;
--in 或者 not in select * from emp where deptno in (10,20);相当于select * from emp where deptno = 10 or deptno=20;
--like + 通配符 % --表示任意多个字符/ _ --表示单个字符
select * from emp where job like 'S[^A-Za-z]%';
select * from student where sname like 'S_';
--having 和 where条件区别:
(1)where 子句是对表中的记录进行筛选,而having是对结果集进行筛选
(2)where 子句后面不能接聚合函数,而having后面可以接聚合函数
(3)where 子句不一定要和group by 一起使用,但是having必须和group by 一起使用
--oracle中的分析函数(排位函数)
rank():相同的值排位相同,但是序号会随之跳跃
row_number():相同的值排位不相同,序号是连续的
dense_rank():相同的值排位相同,序号是连续的
如:select empno,ename,job,sal,rank()/row_number()/dense_rank() over(order by sal desc) as AAA from emp;
--自身连接
select sname from s where sno in (select sc1.snofrom sc sc1,sc sc2where sc1.sno = sc2.sno and sc1.cno = 1 and sc2.cno = 2)
总结做select题目的一个思路:
(1)看题目中要我们显示(列出,查询)什么内容,那么select后面就接什么内容
(2)看select子句后面出现的内容来自哪些表,或者视图,那么from子句后面就接哪些表或视图
(3)如果是多张表查询,首先考虑是否需要将表之间的关系关联(隐士条件),然后再来考虑显示条件(题目中明显的告诉我们的条件)
(4)看select子句后面是否出现了聚合函数,如果出现了聚合函数,还有其他字段不在聚合函数里面,那么这个时候就需要将没有出现在聚合函数里面的字段全部放到group by子句中
(5)是否需要对结果集再次进行筛选,如果需要,使用having子句
(6)如果需要排序使用order by ,desc表示降序, asc表示升序(默认)
(7)如果一个题目比较复杂,一眼看不出如何操作。那么建议大家采用子查询分步骤去做。子查询可以出现在select,from ,where 子句中
(8)如果所需要的信息出自同一张表同一个字段的值进行比较,而我们无法通过同一个字段来表述,那么建议大家采用自身连接查询