本文共 7973 字,大约阅读时间需要 26 分钟。
oracle
1.进入Oracle数据库,下面的命令是连接远端的oracle数据库的方式*(注意scott是数据库的一个开放用户账号。密码是自定义的,我是root。好像我自己的管理员账号是id/id)
(5560端口是直接图形化显示oracle的普通用户的命令行形式,本质就是下面sqlplus的图形网页版(http: //192. 168.37.128(远端oracle的ip):5560/isqlplus/) )/1158端口 如果本地接连数据库的话: sqlplus scott/root 就连接上本地的安装的oracle数据库服务器了。 sqlplus sys/id(我自己的管理员密码奥!) 就连接上本地的安装的oracle数据库服务器管理员账号。数据文件:是数据库的物理存储单元;oracle数据是存储在表空间中的,实质是表空间中的数据文件内的。一个表空间中可以有一个或者多个数据文件,一个数据文件只能属于一个表空间,且一旦数据文件加入表空间后,就不能删除这个数据文件了,除非删除所属的表空间。 表空间:是oracle数据库对应物理数据库上的数据文件(ORA或者DBF文件)的逻辑(虚拟的)映射。一个数据库在逻辑上被划分为一到若干个表空间。每个表空间由同一个磁盘上的一个或者多个数据文件组成的。 oracle-----用户(如scott)------表空间
select * from emp;(注意,下图查询出的结果,显示的样式上面有修改过。结果是一样的)
首先明确:null是无效的,未指定的,不可预知的值,所以怎么能操作呢;null不是空格或者0奥!
在排序order by 字段名;中,如果有null值,则oracle中null最大奥!记住,但可以通过 nulls last来让null在最后,排序那边有案例演示。like关键字,有两个字符注意:%(表示任意长度的任意字符串)、_(表示一个字符的任意字符串)
(1)order by 字段名 默认是升序; desc是降序。
(2)SELECT ename,sal,sal*12 年薪 FROM emp ORDER BY 3; order by后面是列的顺序号。前面见到了nvl滤空函数、concat连接函数;
1.获取字符串中指定长度字符串
2.字符串的大小写转换 3.查找字符串中字符的位置 4.对字符串的填充 5.字符串中字符的替换mysql中查看当前时间:select now();
oracle中查看当前时间:select sysdata from dual 1.可以通过to_char将时间转为指定字符串格式 2.日期是可以相加减数字的,日期和日期之间不能加,只能减,因为加是无意义的。 2.1oracle中日期的范围比较可以通过日期转为指定个数的字符串,通过字符串的日期范围来比较日期的范围。因为oracle中数据类型会隐式自动转换的,但比较的话,必须是同样格式的比较,因为同样格式的,转换的话才能还是同样格式的,这样才好比较 3.计算当前月的最后一天 日期其他函数:(了解即可) 4. 日期函数next_day:表示当前时间的下一个星期几的日期SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh(也可以加24):mi:ss"今天是"day') "日期" from dual;
什么是通用函数?——这些函数可以适用于任何数据类型,同时适用于null
1.nvl(字段,0)/(字段,‘xxx’)表示该字段为null的话,则为0,不为空不变——也叫滤空函数。 2.nvl2(a,b,c)表示当a为null时,返回c,否则返回b。 3.nullif(a,b)判断两个值是否相同,相同为空,否则返回第一个a; 4.coalesce函数即在sql语句中使用if-then-else完成条件判断逻辑
(2.1)case表达式:sql99的语法,类似basic,比较繁琐
(2.2)decode函数:oracle自己的语法,类似java,比较jian简单1 select ename,job,sal before, 2 case job when 'president' then sal+1000 3 when 'manager' then sal+800 4 else sal+400 5 end after 6 from emp; ================================= ENAME JOB BEFORE AFTER---------- --------- ---------- ----------SMITH CLERK 800 1200ALLEN SALESMAN 1600 2000WARD SALESMAN 1250 1650JONES MANAGER 2975 3375MARTIN SALESMAN 1250 1650BLAKE MANAGER 2850 3250CLARK MANAGER 2450 2850SCOTT ANALYST 3000 3400KING PRESIDENT 5000 5400TURNER SALESMAN 1500 1900ADAMS CLERK 1100 1500JAMES CLERK 950 1350FORD ANALYST 3000 3400MILLER CLERK 1300 1700sun 10000 10400
这个例子里面用到了组函数、条件语句等语句完成了sql的逻辑操作,感觉比在java中完成这样的逻辑要简单一点。
第一种 sql语句通用的条件 第二种——oracle自己的条件函数什么叫多行函数?实际也叫分组函数,其作用于一组数据,并对一组数据只返回一个值奥!!!。
(1)如max、count、avg、min、sum; 注意!!!,多行函数输出结果是一个值 (2)注意!! 组函数会自动滤空,就是为null的不参与操作,但是利用nvl滤空函数,可以让组函数不会过滤掉null的部分。因为nvl已经将null转为非空了。 基于常见的上面几个函数,下面分析分组函数 排序、分组、内外连接、分页这几个最基本的也最核心。所有包含在select语句中,但是未包含分组函数中的列,都必须包含于group by子句的后面奥!!!group by子句后面包含的列,前面select语句中可以没有
如:实验:表示按照部门中不同的职位统计员工工资的总和,
实验:多条件排序——按照部门号升序排列,然后同部门中薪水按照升序再排列。
和where类似,就是将满足条件的记录过滤出来
实验: 已经分组后的记录,又按照一定条件进行过滤——下面是查询出不同部分的平均薪水,然后又过滤出大于2000的记录 having和where类似,都是过滤一些条件的。区别是where后面不能是组函数的表达式,而having可以是组函数的条件过滤1.笛卡尔积:列数相加,行数相乘。
2.多表查询就是通过连接条件,从笛卡尔积全表中选出正确的记录。连接条件个数至少是N-1个,N表示表的个数。 如:select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno ; 从上面语句就发现(1)首先是从表emp 和 dept 两个表中查询;即from emp e,dept d(2)两个表,连接条件至少2-1个,即where e.deptno=d.deptno;(3)最后查询的字段有哪些,自己需要什么就什么;2.不等值连接查询
查询员工表中员工薪水在哪个等级: 3.外连接 效果(作用):将指定表中某些不成立的字段,仍然包含在最后的结果中 这样的sql语句书写过程:首先从表开始 from emp e,dept d,然后从连接条件开始(两张表至少一个条件2-1) 即where e.deptno=d.deptno 外连接:左右连接也是多表连接,即也是多表的笛卡尔积后,筛选出满足一定条件后的记录。 4.自连接:缺点是不适合大表,因为两张相同表,笛卡尔积就是平方个记录中根据连接条件查询出满足连接条件的记录(结果)。作用: 就是减少有关联的查询语句的书写,不用分开,直接组合在一条语句上。
实际上,子查询就类似于查询的嵌套,但是注意子查询在主查询之前一次执行完成,因为子查询的结果被主查询使用 子查询分类: 单行子查询(子查询语句返回结果是单行的)、多行子查询(子查询语句返回结果是多行的)(3)子查询语句在having后面: 首先要知道having和where区别:能否使用组函数,组函数是作用于一组数据,最终并只返回一个值。
分析下面语句的特点: 1)首先条件筛选为啥用having,而不用where?因为条件中内容是组函数(多行函数:就是作用于一组数据,并对一组数据只返回一个值奥) 2)select 后面的显示字段中有组函数的时候,其他的显示字段必须要在分组group by中,否则出错 3) (4)子查询可以放在from关键在后面,由于from后面通常是查询的表,实际上就是一个集合,所以子查询如果结果是一个集合的话,就可以放在from关键字的后面,表示select查询的目标。 (5)子查询和主查询可以不是同一张表,只要子查询的结果主查询中能用就可以。 (6)不同类型子查询,使用不同的操作符:多行操作符any的使用: any是后面集合中的内容任意一个比较。重在比较
多行操作符all的使用: all是后面集合中的内容所有的比较。重在比较就类似数学上两个集合的操作:交集、并集、差集操作 (集合运算越多,效率越低,不是非常建议使用)
插入操作:
(1) 和mysql中插入语句相同:insert into 表名(字段,字段,字段) values(字段对应的内容,内容,内容); (2)可以将字段内容部分用地址符来表示,这样可以灵活取值。 (3)插入数据的第三种方式:可以批量插入数据,不一定要values关键字,直接替换为select语句,但是子查询语句中字段要和插入语句中字段一样。 更新操作 更新操作和mysql中差不多,很相似。同时注意更新的条件,否则就更新表中所有数据奥! 删除操作oracle中事务是默认自动开启的,那么是从什么时候开始的呢?
起始标志:第一条DML语句(数据操作语言的语句:增删改查)。 结束标志:可以显示commit 提交 或者 rollback 回滚。 中间可以试着保存点:savepoint a ; 回滚到保存点:rollback to savepoint a;上面都是一些基本的dml操作语言,下面开始数据操作语言的了解。
(1)表空间是oracle数据库的逻辑单元。一个数据库下可以建立多个表空间,一个表空间可以建立多个用户、一个用户下可以建立多张表 (2)oracle数据库和其他数据库的区别在于:表和其他的数据库对象都是存储在用户下的。练习:
1,查询出员工中薪水前三名 oracle中伪列rownum,显示每一列的行号。行号一旦设置就行号就不变了,即使排序记录位置变了,对应记录的行号值没变,也会随排序位置移动的。 2.查找出员工薪水大于本部门平均薪水的员工转载地址:http://shdxi.baihongyu.com/