Oracle数据库 总结
来源:互联网 发布:java培训多少 编辑:程序博客网 时间:2024/06/02 03:06
SELECT * FROM TABLE;
SELECT DISTINCT COLUMN FROM TABLE;
SELECT * FROM emp WHERE empno IN(1, 2, 3);
- 在IN之中使用NULL——现在没有任何的影响,
- 在NOT NULL之中使用NULL——不满足的原因是数据库自身的保护机制,避免大数据所带来的问题。
SELECT * FROM emp WHRER ename LIKE “A%”;
“_”:匹配任意一个字符, “%”:匹配0个、1个或多个任意字符。
SELECT * FROM emp ORDER BY sal ASC(默认); \ DEAS;
在数据量大的时候绝对不要采用多表查询,而且就算是数据量小,也别用多表查询。
COUNT(*):会实际的统计出表的数据量;
COUNT(字段):如果统计的字段上不包含有null,那么与COUNT(*)结果相同;如果统计的字段上包含有null,null不参与统计;
COUNT(DISTINCT 字段):消除掉重复数据后的统计
执行顺序:
SELECT [DISTINCT] *| 列名称 [别名 ] , 列名称 [别名 ] ,.... | 统计函数 ? 5、确定查询列FROM FROM 数据表 [别名 ] ,数据表 [别名 ]... ? 1、数据来源[WHERE 条件 (s)]? 2、过滤数据行[GROUP BY 分组字段,分组字段 ,...] ? 3、执行分组操作[HAVING 分组后过滤] 4、针对分组后的数据过滤[ORDER BY 字段[ASC | DESC], 字段[ASC | DESC],...] 6、数据排序
SELECT job, AVG(sal), MAX(sal), MIN(sal), COUNT(*)
FROM emp
GROUP BY job;
提示:关于统计查询的几个重要说明,
以上的代码只是根据基础语法实现了统计的操作,但是在整个操作之中还会存在有三个显示:
1. 限制一:统计函数单独使用时(没有GROUP By字句)只能够出现统计函数,不能够出现吉他字段
2. 限制二:使用统计查询时(存在GROUP BY 字句),SELECT子句之中之允许出现统计函数与字段,
3. 限制三:统计函数在分组之中可以嵌套使用,但是嵌套之后的统计查询之中,SELECT子句中不循序再出现任何的字段,包括分组字段。
WHERE子句:是在分组前使用,而且不能够使用统计函数进行验证,经过WHERE筛选后的数据才可以分组;
HAVING子句:必须结合GROUP BY 子句一起出现,是在分组后的过滤,可以使用统计函数。
关于子查询的时候,给出一些参考方式,供选择(95%的问题都可以解决):
子查询返回单行单列:HAVING、WHERE子查询返回多行单列:WHERE子查询返回多行多列:FROM
子查询返回单行列
要求统计出所有高于公司平均工资的全部雇员信息SELECT AVG(sal)FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);
子查询返回单行多列(了解)
SELECT * FROM emp WHERE (hiredate, sal)=(SELECT MIN(hiredate), MIN(sal) FROM emp);SELECT * FROM emp WHERE (sal,job)=(SELECT sal, job FROM emp WHERE name='SCOTT')AND ename <> 'SCOTT';
子查询返回多行单列 IN
SELECT * FROM emp WHERE sal IN(SELECT sal FROM emp WHERE job='MANAGER');SELECT * FROM emp WHERE sal NOT IN (SELECT sal FROM emp WHERE job='MANAGER');
此时 有一个需要注意的小问题了:在使用 NOT IN的时候子查询之中必须不能包含 null ,否则不会有任何数据返回。
- =ANY: 此功能与IN操作完全一样
- >ANY: 比子查询的最小值要大
实现方法一:利用多表查询
SELECT d.deptno, d.dname, d.loc, COUNT(e.empno), AVG(e.sal)FROM emp e, dept dWHERE e.deptno(+)= d.deptnoGROUP BY d.deptno, d.dname, d.loc;
实现方法二:采用子查询完成
SELECT d.deptno, d.dname, d.loc, temp.cout, temp,avgFROM dept d,(SELECT deptno, COUNT(empno), AVG(sal) FROM empGROUP BY deptno)tempWHERE d.deptno=temp.deptno(+);
- LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
Oracle 伪列ROWNUM ROWID
约束
CONSTRAINT uk_email UNIQUE(email)
CONSTRAINT pk_mid PRIMARY KEY(mid)
CONSTRAINT ck_age CHECK(age BETTWEEN 0 AND 250)
一般不这么用,在程序里检查
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid)
序列:Oracle实现序列
CREATE SEQUENCE 序列名称
* 取得序列下一个增长数据(每次调用序列值都增长制定的步长):序列.nextval
* 取得序列当前数据(每次调用序列值都不会增长):序列.currval
在使用currval之前一定要首先使用nextval 不然会报错 CURRVAL尚未在此会话中定义
实际上当用户每次进行数据增长控制的时候,LAST_NUMBER 都表示已经处理完的一批序列内容,
当当前序列的数值等于了LAST_NUMBER数据时,那么会自动再增加指定个”CACHE” 大小的序列
但是有序数据有存在缓存的问题,所以当数据库重新启动之后,那么所操作的序列就可能出现调好的情况。
如果想要避免调好的问题出现,那么最简单的做法是取消缓存,使用NOCACHE表示
* INSERT INTO matab(mid, title) VALUES(myseq.nextval, ‘JAVA’);
了解就行
增加表约束ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束名称)[选项]ALTER TABLE member ADD CONSTRAINT pk_mid PRIMARY KEY(mid)删除约束ALTER TABLE 表名称 DROP CONSTRAINT 约束名称ALTER TABLE member DROP CONSTRAINT pk_mid
视图不是真实数据,而是真实数据的映射。 不要做查询以外的操作
- Oracle数据库学习总结
- oracle数据库总结练习
- Oracle数据库学习总结
- Oracle总结数据库
- Oracle数据库学习总结
- oracle数据库总结大全
- Oracle 数据库优化总结
- Oracle数据库语法总结
- oracle数据库 总结
- oracle数据库学习总结
- oracle数据库学习总结
- Oracle数据库服务总结
- Oracle数据库总结
- Oracle数据库体系结构总结
- Oracle数据库SQL总结
- Oracle数据库优化总结
- oracle 数据库方面总结
- Oracle数据库基础总结
- Xgboost推导及分析
- 数据结构与算法C++描述(7)---堆栈及其在“火车车厢重排问题”中的应用
- Android_dex详解
- 图片无限轮播框架Banner的使用
- 518抽奖软件源码之:使得除零异常可被捕获(VC++)
- Oracle数据库 总结
- JavaScript This指向
- 2015中国科技专利调查样本
- 队列优化多重背包
- java-随机点名器(Random )
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- Qt 学习 前言
- Activity生命周期(下)
- 蓝桥杯--古堡算式