设为首页 收藏本站
查看: 1015|回复: 0

[经验分享] 关于Oracle的一些学习简单知识

[复制链接]

尚未签到

发表于 2018-9-12 12:37:19 | 显示全部楼层 |阅读模式
  -*和列名哪个好?
  ---Oracle9之前,列名好,之后一样
  ---查询员工信息:员工号 姓名 月薪 年薪
  select empno ,ename,sal,sal*12 2 form emp;
  ----c命令
  别名有没有双引号是有区别?
  如果别名有空格则需要“”,如果没有则不需要。
  ----查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入
  select empno,ename,sal,sal*12,comm,sal*12+comm
  关于空值的问题null?
  1、包含空值的表达式都为null
  2、null!=null
  nvl(a,b)当A的值为空则返回b
  ---查询奖金为null的员工
  select * from emp where comm is null
  distinct :去掉重复的记录,作用于所有的列
  尽量用列名来代替*
  SQL语言不明确区分大小写
  空值是无效的,未指定的,不是空格也不是0
  包含空值的数学表达式都是空值,关键字不能缩写
  连接符
  “||”可以用来合成列
  字符串
  日期和字符串只能在单引号中出现
  查询员工信息
  ******的薪水是******
  spool c:\11.txt
  spool off 相当于录屏功能。
  对于日期的数据格式敏感
  ---默认的日期格式是 DD-MON-RR
  查询17-11月-81入职的员工
  select * from emp where hiredate='17-11月-81'
  --查询参数设置
  v$打头的数据字典:参数设置,性能相关
  更改日期数据格式:alter session set NLS_DATE_FORMATE="DD-MON-RR"
  and:
  1、含边界
  2、小值在前,大指在后
  in:在集合中(not in不在集合中)
  结论是:如果集合中含有null,不能使用not in操作符,可以使用in
  like :模糊查询
  ---查询名字中含有下划线的员工
  ---转义字符
  ----排序
  ----查询员工信息,按照月薪排序
  select * from emp oder by desc;
  ----order by后面+列名 表达式 别名 序号
  ----查询员工信息按照奖金排序
  select * from emp order by comm
  ------设置页面大小
  set pagesize 20
  ------如何怎么null排到最后 nulls last
  1、管理员登陆
  sqlplus sys/你的密码   sysdba
  2、解锁
  alter user scott  account unlock;
  改密码

  alter user scoot>  单行函数
  只对一行进行变换,每行只会返回一个结果
  -----字符函数
  -----大小写
  select lower(‘hello world’)转小写
  initcat首字母大写
  length字符数 lengthb字节数
  instr在木传中查找字串的位置,找到返回下标 (从1开始)找不到返回0
  lpad左填充rpad右填充
  trim去掉前后指定的字符
  replace替换
  数字函数
  round函数:四舍五入
  trunc 截断
  modp
  ----monh 出售放入月数
  隐式转换的前提:被转换的对象是可以被转换的
  ----to_char转换日期转换
  ----通用函数
  nvl2(a,b,c)当a=null时,返回c,否则返回b
  nullif(a,b)当a=b时,返回null,否则返回a
  COALESCE:从左到右,找到第一个不为null的值
  -----条件表达式
  ----涨工资:总裁1000,经理800,其他400
  select ename,job,sal涨前的工资 case  job when‘PERSIDENT’ THEN SAL+1000,
  select ename,job,sal涨前的工资 decode(‘job’ ‘presdent’ sal+1000
  default )
  -----分组函数
  组函数会自动滤空
  count看的是一行
  NVL是无法忽略空值的
  -----分组:group by
  在select中必须在group by中
  -----having过滤分组
  不能在where中使用组函数
  能在having能使用组函数。
  group by的增强rollup
  group by rollup
  sqlplus支持报表功能
  ------多表查询
  笛卡尔积 列数相加,行数相乘
  至少有n-1个连接条件(n是表的个数)
  在实际运行环境中我们应该避免使用笛卡尔积全集
  Equijoin等值连接:查询员工信息:员工号,姓名,月薪,部门名称
  不等值连接:查询员工信息:员工号 姓名 月薪
  外连接
  左外连接:当 where e.deptno=d.deptno不成立时,等号左边的表达式的表的信息仍然被包含写法:where e.deptno=d.deptno(+)
  右外连接:当 where e.deptno=d.deptno不成立时,等号右边的表达式的表的信息仍然被包含写法:where e.deptno(+)=d.deptno
  自连接:通过的表的别名将同一张表视为多张表,然后使用对应的连接操作
  层次查询connect
  -----子查询:问题不能一步求解
  定义子查询:子查询(内查询)在主查询前一次完成
  子查询的结果被主查询使用
  select   * from emp where sal>(select sal from emp where ename='scott')
  注意问题:
  1、采用合理的书写风格
  2、需要把子查询放在括号里面
  3、可以在主查询的where select from having子句后面可以放子查询
  4、不可以在主查询的group by后面放子查询
  5、强调在from后面子查询
  6、一般在查询中用order by;但在top-N分析中必须使用order by
  7、主查询和子查询可以不是同一张表,只要子查询返回的结果主查询可以使用即可
  8、一般来讲先执行子查询,在执行主查询;但相关查询除外
  9、单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
  ----在select后面的子查询必须是单行子查询
  select ename ,job,(select sal from  emp  where empno=7893);
  ----强调在form后面放置子查询
  ----查询员工的姓名和薪水
  select * from( select ename,sal from emp)
  -----多行子查询
  in:在集合中
  ----查询部门名称为sales和accounting的员工信息
  select * from  emp  where deptno(select deptno fromd ept where dname=‘sales’ or dname=‘accounting’)
  any:和集合的任意值比较
  -----查询工资比20号部门任意一个员工的工资高
  select * from emp where sal > any(select sal from emp where deptno=20)
  all:和集合的所有值比较
  select * from emp where sal> all(select sal from emp where deptno=20)
  ------多行子查询中的空值
  rownum必须只能=
  -----相关子查询:将主查询的某个值,作为参数传递给子查询
  组函数wm_concat行转列
  3、集合运算
  union/union all
  MINUS
  注意的问题:
  1、参与运算的各个集合必须列数相同,且类型一致
  2、最终的而结果采用第一个集合的表头作为表头
  3、如果要排序,必须在每个集合后面使用相同的order by
  4、可以使用括号执行的顺序
  处理数据
  SQL的类型:
  1、DML(data manipulation lanaguage )数据操作语言:insert,update,selected,delecte
  2、DDL:数据定义语言createtable ,droptable,altertable,truncatetable
  3、DCL:数据控制语言:commit rollback
  ----隐式插入空值
  ----显示插入空值
  -----如何一次插入多条数据
  select中的列必须和insert中的列相对应。
  delete和trancate区别:
  1、delete逐条删除,trancate先摧毁表在冲击啊
  2、delete会产生碎片,trancate不会
  3、delete不会释放空间,trancate不会
  4、delete可以被闪回,trancate不会被闪回
  ----Oracle中的事务
  1、起始标志:DML语句(自动开启)
  2、结束标志:提交: 显示提交 commit
  饮食提交 DDL正常退出
  回滚:显示回滚:rollback
  隐式回滚:掉电 ,宕机,非正常退出
  事物的隔离级别
  oracle的隔离级别有3个,标准的是两个,readonly是oracle自己实现的
  -----oracle的回收站
  purge recyclebin;回收站清空
  其他数据库对象
  视图 从表中抽取的逻辑上相关的数据集合
  视图不能提高查询效率的,要提高视图的效率只能优化SQL语句。
  视图建立在已存在的表上,这些已存在的表称为是视图的基表
  不通过视图操作组函数,group by,order by
  序列:可供多个数据提供唯一数值的数据库对象。
  序列的不连续:
  1、cache值,停电
  2、序列是公有对象
  3、回滚rollback
  索引:提高查询效率
  oracle中的索引
  1、b树索引
  2、位图索引
  PLSQL
  给员工涨工资
  jdbc:
  result rs=“select empno,jop from emp”;
  while (rs.next())
  {
  int eno=rs.getInt("empno");
  }
  PLSQL打印hello world
  declare
  -----说明部分 变量声明
  begin
  -----程序包
  dbms_output.put_line('Hello world');
  end;
  /
  打开输出开关
  set serveroutput on
  指在SQL命令语言中加入了过程处理语句,使SQL语言具有过程处理能力
  IF语句
  IF条件THEN语句
  ELSIF语句THEN语句;
  ELSE 语句;
  END IF;
  set serveroutput on
  accept num :=#
  declare
  pnum:=#
  begin
  if pnum=0 then dbms_
  -----存储过程
  调用存储过程
  1、exec sayHello();
  2、begin
  sayHell0();
  end;
  /
  in和out
  一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。
  但过程和函数都可以通过
  ------触发器可用于
  数据的确认
  实施复杂的安全性检查
  跟踪数据操作


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-573362-1-1.html 上篇帖子: redhat6.4 for oracle10g-J2EE 下篇帖子: Oracle数据库优化技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表