Oracle的查询

Oracle的简介
        1;Oracle10G不支持win7操作系统,而11G支持所有操作系统(安装完毕后自带Oracle sql Developer);
                Oracle的登陆:sqlplus scott/tiger(sqlplus   用户名/密码)
                Oracle客户机作用:使用jdbc:oracle:ori:@localhost:1521:orcl连接数据库时,需要安装客户机(集群,性能)
                                            而使用jdbc:oracle:thin:@localhost:1521:orcl连接数据库时,只需要Oracle的jar包就可以了;
        2;tomcat6以后已经支持集群(fail over 失败迁移 load balance 负载均衡);
            -------------linux安装Oracle数据库;
        3;Oracle数据库自动开启事物,提交事物时需要commit操作,如果想回滚数据,使用rollback命令即可;

Oracle的基本查询
        sql优化:1,尽量使用列名代替*;
                        2,Oracle数据库where条件解析顺序从右向左;
                        3,当where和having都可以,优先使用where;
                        4,理论上,当子查询和多表查询都可以,一般要使用多表查询;
                        5,尽量不要使用集合运算;
        sql语句的空值:1,包含null的算数表达式值都为null;
                                  2,在sql语句中,null != null(is null 或者 is not null);
                                  3,如果集合中含有null,不是使用not in,但可以使用in;
                                  4,再有null值得排序时,升序没有问题,降序时有问题,需要加 nulls last;
                                  5,多行函数对于null值会自动虑空;
                                  6,
        命令行中sql语句写错了:
                                使用c命令,和ed命令,推荐使用ed命令;
        命令行的块注释:     行注释:--   清屏:host clear 设置行宽:set linesize 120 设置列宽 :col 列名 for a8(字符数);设置数字: col sal for 9999;
        查看当前用户下的表:select * from tab
        在Oracle的sql语句中支持算数表达式的, 也支持括号:select ename ,sal*12 from emp;
        如何处理sql语句中的空值:使用Oracle的虑空函数nvl(a,b),nvl2()
        distinct消除重复:作用于所有的列;
        连接符的使用||:就是拼接成自己想要的字符串 如:select ename||'的薪水是'||sal   别名 from emp;
         
Oracle的过滤及排序
        过滤的where条件注意:字符串大小写敏感(MySQL对字符串大小写不敏感),日期对格式敏感;where是紧跟在from后面;
        在sql的条件表达式中可以使用比较运算符及操作符比较运算符(between.....and...,in,not in,like,is null);在使用like模糊查询时注意两个符号_和%(对于有特殊字符的字段:使用转移字符escape '\');
         
        排序order by + 列名,表达式,别名,序号;
        多个列的排序:先按第一个列排序,然后在按照第二列排序;
         

Oracle的单行函数
        字符函数:LOWER,UPPER,INITCAP,CONCAT,SUBSTR,LENGTH/LENGTHB,INSTR,LPAD/RPAD,TRIM,REPLACE;
        数字函数:round(四舍五入),trunc(截断),mod(求宇)
        日期函数:计算员工的工龄(sysdate-hiredate)天,日期可以相减,不可以相加;
                            months_between,add_months,next_day(每个星期一自动备份数据===27,分布式数据库),last_day,round,trunc;
        转换函数:显示类型转换:字符串,日期,数字之间的转换;
        通用函数:NVL(expr1,expr2),NVL2(expr1,expr2,expr3)当值为null值时,返回expr3的值,否则返回expr2的值;
        条件表达式:给不同员工涨工资,作用在sql语句中使用if-then-else,实现方式case和decode
                             
Oracle的多行函数
        count ,sum,avg,max,min;
        分组数据:求各部门的平均工资;
        注意:在select列表中所有未包含在组函数中的列都应该包含在group by子句中,而包含在group by子句中的列不必要包含在select列表中;
        过滤分组信息使用having,如求各部门平均工资大于2000的信息;
        where与having的区别:where的子句中不能使用组函数,而having可以使用

Oracle的多表查询
        多表查询要消除笛卡尔积;
        连接类型:等值连接,不等值连接,
        外连接:左外连接,右外连接,
        自连接:通过标的别名,将一张表视为多张表;(自连接不适用于操作大数据的表,因为其笛卡尔积很大。就使用层次查询)
        层次查询:  from emp e  connect by prior e.empno = e.mgr  start with e.empo=任意一个值或者 mgr is null  并提供一个伪列 level;


Oracle的子查询
        子查询:解决一步不能解决的问题,如查询比谁的工资高的信息;就是查询语句的嵌套;
        注意:1,子查询语句的括号不要丢了;
                    2,采用合理的书写风格;
                    3,可以主查询的where,select,from,having后面放置子查询,不能再group by放置子查询;
                    4,单独强调from后面的子查询;
                    5,主查询和子查询可以不是同一张表;
                    6,一般不再子查询中使用order by ;但在top-n分析问题时,必须使用order by;
                    7,一般先执行子查询,在执行主查询;但相关子查询除外;
                    8,单行子查询只能使用单行操作符,多行子查询只能使用多行操作符(in,any,all);
                    9,子查询的null值;
                    解决sql错误的最好的方法:谷歌;

Oracle的集合运算
                操作的对象是集合:并集 union,union all ,交集 intersect ,差集 minus;
                使用集合运算注意的问题:1,参与运算的各个集合必须列数相同,类型相同;
                                                          2,采用第一个集合的表头作为最后的表头;
                                                          3,如果排序,必须在每个集合后使用相同的order by;
                在命令框中打印sql执行的时间命令: set timing on;
                在使用rownum注意两点:rownum永远按照默认的顺序生成;并且rownum只能使用<,<=,不能使用>,>=(如何实现分页,首先将rownum查出来,作为一张表的一列,让其不是行列属性,就可以使用>和>=);

Oracle的相关子查询
                将主查询的某个值作为一个参数传给子查询,如查询薪水大于本部门的平均薪水的员工信息;


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值