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

[经验分享] oracle学习第一天

[复制链接]

尚未签到

发表于 2018-9-13 13:04:40 | 显示全部楼层 |阅读模式
  sqlplus
  其他的图形化工具
  =====================
  使用的用户:
  用户名:scott
  密码:tiger
  登录:
  sqlplusscott/tiger
  退出:
  exit
  查看当前用户有哪些表:
  select*fromtab;
  =====================
  显示当前用户
  SQL>showuser
  USER为"SYS"
  切换用户
  SQL>connectscott/tiger
  已连接。
  命令可以使用缩写
  conn[ect]user
  执行上一条sql语句
  /
  设置行宽
  setlinesize150默认为80
  设置页面大小(一页显示的数据)
  setpagesize100默认为14
  显示参数的值
  show参数名
  如:
  showlinesize
  永久保存配置
  修改glogin.sql文件。
  注释:
  单行注释:--
  多行注释:/**/
  查看表结构
  SQL>descdept
  ====================================
  SCOTT用户的表:
  dept表:
  deptno编号
  dname
  loc位置
  emp表:
  empno员工编号
  ename
  job
  mgr上级主管的员工编号
  hiredate入职时间
  sal薪水
  comm奖金
  deptno所属的部门编号-->引用dept.deptno
  ====================================
  清屏:
  Windows中:hostcls
  Linux中:hostclear
  设置某列的宽度:
  columnjobformata15或coljobfora15
  columnSALformat9999或colsalfor9999
  格式:
  col[umn]列名for[mat]格式
  对于字符串:
  a20,20是一个数据,表示20个字符的宽度。
  对于数字
  9表示一位,有几个,就是多宽。
  ====================================
  空值的处理
  不是一个有效的值。不是0,也不是空字符串。
  null!=null
  isnull
  isnotnull
  含有null的表达式结为null
  修改上一条SQL语句
  ed[it]
  注意:后面不要写分号
  滤空函数
  nvl(表达式,当表达式为空时使用的值)
  selectempno,ename,sal,sal*12as年薪,nvl(comm,0),(sal*12+nvl(comm,0))总收入
  fromemp
  ====================================
  字符串
  是匹分大小写的,在使用时要加引号。
  在指定别名时,引号可以加,也可以不加。
  当含有空格、特殊字符时,一定要加引号。
  不加引号时,显示都为大写,加上引号后,就是按所写的显示了。
  在使用字符串时,要使用单引号。
  在写别名时,要使用双引号。
  去掉重复的行
  --作用于一列
  SQL>selectdistinctjobfromemp;
  --作用于多个列,所有列的值加一起重复才算重复的记录
  SQL>selectdistinctjob,deptnofromemp;
  如果只查询一个表达式,没有用到任何表的数据,这时也必须得写from...
  可以写成fromdual
  dual是一个虚表,本身就存在的,可以直接使用。
  如:
  select3+2
  select'Hello'||'World'fromdual;
  字符串连接符
  SQL>selectename||'的薪水是'||salfromemp;
  ENAME||'的薪水是'||SAL
  ----------------------------------------------------------
  SMITH的薪水是800
  ALLEN的薪水是1600
  WARD的薪水是1250
  JONES的薪水是2975
  MARTIN的薪水是1250
  BLAKE的薪水是2850
  CLARK的薪水是2450
  SCOTT的薪水是3000
  KING的薪水是5000
  TURNER的薪水是1500
  ADAMS的薪水是1100
  JAMES的薪水是950
  FORD的薪水是3000
  MILLER的薪水是1300
  也可以使用函数concat():
  SQL>selectconcat('Hello','World')fromdual;
  where(aorb)andc
  ====================================
  LIKE
  在使用like时,可以使用%与_,分别表示任意数量的任意字符或任意一个字符。
  要想表达%或_本身,需要使用转义符,例:
  SQL>select*fromempwhereenamelike'KI\%%'escape'\';
  BETWEEN
  包含两个边界。
  一定是小值写到前面,大值写到后面,否则没有结果。
  IN
  where..in(..,..,..,...)如果含有null,没有影响。
  例:查询所有是经理的员工
  SQL>select*fromempwhereempnoin(selectmgrfromemp);
  where..notin(..,..,...)如果含有null,则不返回任何结果。
  例:查询所有不是经理的员工
  SQL>select*fromempwhereempnonotin(selectmgrfromempwheremgrisnotnull);
  =========================================
  MySQL中日期类型:date,time,datetime
  Oracle中只有Date.
  SimpleDateFormat
  yyyy-MM-dd
  对日期的处理
  1,查询指定日期后入职的员工信息
  SQL>select*fromempwherehiredate>'31-12月-81';
  2,修改日期的格式
  SQL>select*fromv$nls_parameters;
  SQL>altersessionsetnls_date_format='yyyy-mm-dd';//只对当前session有效
  3,使用日期函数的方式:
  SQL>select*fromempwherehiredate>to_date('1981-12-31','yyyy-MM-dd');
  或
  SQL>select*fromempwhereto_char(hiredate,'yyyy-MM-dd')>'1981-12-31';
  语法:TO_CHAR(date,'format_model')
  语法:TO_DATE(str,'format_model')
  格式字符串不区分大小写:
  获取当前时间:
  SQL>selectto_char(sysdate,'YYYY-MM-DD')fromdual;
  TO_CHAR(SY
  ----------
  2012-03-07
  SQL>selectto_char(sysdate,'yyyy-mm-dd')fromdual;
  TO_CHAR(SY
  ----------
  2012-03-07
  SQL>selectto_char(sysdate,'yyyy-mm-ddhh:mi:ss')fromdual;
  TO_CHAR(SYSDATE,'YY
  -------------------
  2012-03-0702:33:41
  =========================================
  排序:
  orderby列名,...
  可以作用在:数字、日期、字符串。
  可以使用列名,表达式,别名,序号(表示select中的第几个列)
  升序、降列
  按一个列排列,按多个列排序
  当orderby所在的列中有null,会:
  升序时,null的在下面。
  降序时,null的在上面。
  我们希望,不管升序还是降序,null值的始终在下面
  方式一:SQL>select*fromemporderbycommdescnullslast;
  方式二:
  selectempno,ename,job,hiredate,sal,nvl(comm,0)
  fromemp
  orderby6desc
  =====================================================
  1,组函数
  select
  max(sal)最高工资,
  min(sal)最低工资,
  avg(sal)平均工资,
  sum(sal)所有员工的工资和,
  count(sal)领工资的员工数量
  fromemp;
  2,组函数对null的处理
  例,查询所有员工的平均奖金(有人的奖金为null)
  selectsum(comm)/count(*)平均奖金fromemp
  组函数会自动过滤掉null值。
  在使用avg()时要注意处理null值:
  selectavg(nvl(comm,0))fromemp;
  函数可以嵌套使用
  3,分组
  Groupby,写在FROM后,如果有WHERE,就在WHERE后面。
  查询的列一定要是:
  在groupby中出现的列(在Select中不一定全写上)
  或是使用组函数
  按一个列分组
  按多个列分组
  参与分组的多个列有一个不相同就是不同的组。
  4,分组结果过滤
  Having,是分完组后再进行过滤,只显示符合条件的结果。
  在Groupby与Having中都不可以使用别名。
  与Where的区别
  Having是是分完组后再进行过滤。
  Where是先过滤,再进行分组操作。
  如果可以,尽量写Where条件,不写Having。
  Select
  ...
  From
  ...
  Where
  ...
  Groupby
  ...
  Having
  ...
  Orderby
  ...
  ================================================
  子查询:
  当一步不能求解时,可以使用子查询。
  分为:
  单行子查询
  多行子查询
  可以在主查询的select,from,where,having都可以放子查询
  不可以在主查询的groupby放子查询
  单行操作符对应单行子查询,多行操作符对应多行子查询
  在select中放子查询时,要求只能是单行子查询。
  IN:
  ANY:
  小于某集合中的任意一个值,就是小于集合中的最大值。
  大于某集合中的任意一个值,就是大于最小值。
  ALL:
  小于某集合中的所有值,就是小于最小值。
  大于某集合中的所有值,就是大于最大值。
  练习题一:
  题目:找到薪水大于本部门平均薪水的员工。
  答案:
  select*
  fromempe1
  wheresal>(selectavg(sal)fromempe2wheree2.deptno=e1.deptno)
  练习题二:
  题目:找到员工表中工资最高的前三名的员工信息
  答案:
  selectrownum,empno,ename,sal
  from(selectempno,ename,salfromemporderbysaldesc)
  whererownumselectrownum,empno,ename,salfromemp;
  ROWNUMEMPNOENAMESAL
  ----------------------------------------
  17369SMITH800
  27499ALLEN1600
  37521WARD1250
  47566JONES2975
  57654MARTIN1250
  67698BLAKE2850
  77782CLARK2450
  87788SCOTT3000
  97839KING5000
  107844TURNER1500
  117876ADAMS1100
  127900JAMES950
  137902FORD3000
  147934MILLER1300
  select
  rownum,empno,ename,sal
  from(
  selectrownumr1,empno,ename,sal
  fromemp
  whererownum

运维网声明 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-578157-1-1.html 上篇帖子: oracle常用操作语句 下篇帖子: ORACLE package包中的存储过程的定义和使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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