zoukankan      html  css  js  c++  java
  • Oracle 助记


    title: Oracle 助记

    Nothing is impossible!

    基础操作

      $ sqlplus name/pssword;  # 登录数据库
      $ create user username identified by password;  # 创建用户
      $ grant resource,connect to username;  # 授权
      $ show user;  # 显示当前用户
      $ alter session set nls_language=english;  # 设置用户语言为English
      $
    

    SQLPLUS客户端工具中的命令

      $ describe  # 获取表的结构信息(列名、非空约束、数据类型)
      $ number(p,s)  # 查看数值类型; p:有效位数,s:小数点后的取值位数
      $ char(s)  # 定长字符串
      $ varchar(s)  # 变长字符串,所有关系数据库通用
      $ varchar2(s)  # 变长字符串,oracle公司定义
      $ date  # 日期;包含年月日小时分秒等信息
      $ save D:\oracle\my.sql  # 将缓冲区内容写入文件
      $ start D:\oracle\my.sql  # 执行sql脚本,并将内容写入缓冲区
      $ @  # 功能同start
      $ exit  # 退出sqlplus工具
    
    

    查询行

      ## 基本查询
      $ select last_name,salary from s_emp;
    
      /* # 命令可以在一行也可以在多行
       * # 使用缩进增加可读性
       * # 不允许使用缩写或分割单词
       * # 命令不区分大小写
       * # 命令会写入SQL缓冲区  l: list,查看缓冲区; /: 执行缓冲区
       */
    
      $ select * from s_dept;  # *表示所有的列,可读性差、效率低
      $ select last_name,salary*12 from s_emp;  # 数值和日期类型可以进行算术运算
    
      /* # 优先级:
       * # 乘除大于加减
       * # 相同优先级从左向右计算
       * # 通过小括号改变优先级顺序
       * 下面是例子:
       */
      $ select last_name,salary*12+500 from s_emp;
      $ select last_name,(salary+500)*12 from s_emp;
    
      /* # 可以给列表头取别名
       * # as关键字可以省略
       * # 别名中有空格、特殊字符、大小写敏感,需要用双引号
       * 下面是例子:
       */
      $ select last_name,(salary+500)*12 as total from s_emp;
      $ select last_name,(salary+500)*12 total from s_emp;
      $ select last_name,(salary+500)*12 "total salary" from s_emp;
      $ select last_name,(salary+500)*12 "total" from s_emp;
    
      /* # 可以通过||将多个列或字符串常量连接在一起
       * # Oracle字符串常量用单引号
       * # 连接后的内容可以取别名
       * 下面是例子:
       */
      $ select last_name,first_name,salary from s_emp;
      $ select last_name||first_name as name,salary from s_emp;
      $ select last_name||'-'||first_name name,salary from s_emp;
    
      /* # Oracle中空值用null表示,但打印的报表中什么都不显示
       * # 空值无法进行比较(null==0,null==’’,null==null)
       * # 算术表达式中有空值参与运算,整体表达式的结果为空
       * # nvl函数可以将空值用指定值来替代
       * # nvl两个参数的数据类型必须匹配
       * 下面是例子:
       */
      $ select last_name,salary,title,commission_pct from s_emp;
      # 计算员工一年可以领到的总工资(销售人员的提成工资以基本工资为基数)
      $ select last_name,title,salary*(1+commission_pct/100)*12 total from s_emp;
      $ select last_name,title,salary*(1+nvl(commission_pct,0)/100)*12 total from s_emp;
    
      /* # 去除重复的行
       * # 查询语句中没有函数的情况下,
       * # select语句中distinct关键字要紧跟在select关键字的后面,
       * # 表示select后所有列的组合不重复
       * 下面是例子
       */
      $ select name from s_dept;
      $ select distinct name from s_dept;
      $ select distinct dept_id,title from s_emp;
    

    排序和限制查询行

    Order by

      /* order by排序
       * # asc,升序排列,默认取值
       * # desc,降序排列
       * # order by是select命令的最后一个子句
       * 下面是例子
       */
      $ select last_name,salary,dept_id from s_emp order by salary;
      $ select last_name,salary,dept_id from s_emp order by salary asc;
      $ select last_name,salary,dept_id from s_emp order by salary desc
    
      /* order by中null值处理
       * # 升序中,放最后
       * # 降序中,放最前
       * 下面是例子
       */
      $ select last_name,title,commission_pct from s_emp order by commission_pct;
    
      /* order by后可跟内容
       * # 列名
       * # 列的别名
       * # 数字:select列表项的位置
       * 下面是例子
       */
      $ select last_name name,salary from s_emp order by name;
      $ select last_name,salary*12 from s_emp order by 2;
    
      /* order by后跟多列
       * # 先按第一个列排序,内容相同的,再按照第二个列排...
       * # asc、desc只修饰一个列
       * 下面是例子
       */
      $ select last_name,dept_id,salary from s_emp order by dept_id,salary desc;
      $ select last_name,dept_id,salary from s_emp order by dept_id asc,salary desc;
      # 注意上面两个语句等价
    

    Where

      /* where比较中的字符串常量严格区别大小写
       * 下面是例子
       */
      $ select last_name,salary,dept_id from s_emp where dept_id=42;
      $ SELECT LAST_NAME,SALARY,DEPT_ID FROM S_EMP WHERE DEPT_ID=42;
      $ select last_name,salary,dept_id from s_emp where last_name='smith';
    
      /* between...and...:闭区间;先跟小值,再跟大值
       * 下面是例子
       */
      $ select last_name,salary from s_emp where salary between 940 and 1100;
      $ select last_name,salary from s_emp where salary between 1100 and 940;
    
      /* in:从给定的列表范围内匹配值
       * 下面是例子
       */
      $ select last_name,salary,dept_id from s_emp where dept_id in(41,43,45);
    
      /* like:模糊查询
       * # 通配符:%代表0或多个字符 _ 代表单一字符
       * 下面是例子
       */
      $ select last_name,salary from s_emp where last_name like 'M%';
      # escape自定义转义字符,可以让统配符失去特殊意义,变成普通字符查出名字以_a开始的
      $ select last_name,salary from s_emp where last_name like '\_a%' escape '\';
    
      /* is null:空值判断
       * # 空值不能用等号进行比较
       * 下面是例子
       */
      $ select last_name,salary,title,commission_pct from s_emp where commission_pct=null;
      $ select last_name,salary,title,commission_pct from s_emp where commission_pct is null;
    
      /* 多条件查询
       * # and:多个条件必须同时满足
       * # or:多个条件选一个
       * # and的优先级比or高
       * 下面是例子
       */
      $ select last_name,salary,dept_id from s_emp where salary>=1000 and dept_id=44 or dept_id=42;
      # 等价于
      $ select last_name,salary,dept_id from s_emp where (salary>=1000 and dept_id=44) or dept_id=42;
    

    单行函数

      $ lower # 字符串转换成小写
      $ upper # 字符串转换成大写
      $ initcap # 字符串单词首字母大写,其它字符小写
      $ concat # 字符串拼接,类似||
      $ substr # 取子串,参数(原始字符串,开始位置1开始,取的字符数)
      $ length # 字符串长度
      $ round(1,2) # 对数值进行四舍五入
      $ trunc(1,2) # 对数值进行截断,不会进位
      $ mod # 取余数
      //下面是例子
      # 查询名字后两个字符
      $ select substr(last_name,length(last_name)-1,2) subname from s_emp;
      $ select last_name,salary,dept_id from s_emp where lower(last_name)='smith';
      # 如果第二个参数为负数,表示将小数点虚拟左移相应位数,然后将虚拟小数点后一位进行四舍五入,最后将虚拟小数点后全部清零
      $ select round(55.923,-2) from dual;
    

    日期处理

      $ select last_name,start_date from s_emp; # 查看当前系统时间
      $ select sysdate from dual; desc dual # dual里面只有一个dummy列,称为“哑表”,经常用来做函数测试使用, sysdate,实际上是一个没有参数的函数
      $ select systimestamp from dual; # systimestamp:时间戳,时间信息更全面
      $ select rownum,last_name,salary from s_emp; # rownum:行号
      $ select last_name,salary from s_emp where rownum=1; # 查询表中第一行数据
      $ select last_name,salary from s_emp where rownum<=10; # 查询表中前十行数据
      $ select last_name,salary from s_emp where rownum=2;//Error
      $ select last_name,salary from s_emp where rownum between 11 and 20;//Error
      # <、<=无限制
      # =、>=只对1有意义
      # >无意义
      $ select rownum,rowid,last_name,salary from s_emp; # rowid:行地址
      # 到今天为止员工入职的天数
      $ select last_name,start_date,sysdate-start_date days from s_emp;
      $ select sysdate+10 from dual;
      $ select sysdate+1/24 from dual;
    
      $ months_between # 两个日期之间相差多少个月
      $ add_months(‘15-MAY-95’,6) # 15-MAY-95往后推6个月的日期作为返回值
      $ next_day(‘15-MAY-95’,’FRIDAY’) # 15-MAY-95后面离得最近的星期五的日期作为返回值
      $ last_day(‘15-MAY-95’) # 15-MAY-95这个月的最后一天的日期作为返回值
      $ round # 对日期进行进位或舍位
      # 第二个参数为month,表示对天向月进行进位或舍位,逢16进1
      # 第二个参数为year,表示对月向年进行进位或舍位,逢7进1
      $ select round(to_date('16-MAY-95','DD-MON-YY'),'month') from dual;
      $ select round(to_date('16-JUL-95','DD-MON-YY'),'year') from dual;
      $ trunc # 对日期进行舍位
      $ to_char(date/number,’fmt’) # 将数值类型、日期类型转换为字符串类型,第二个参数格式,要用单引号引起来,格式区分大小写
    
      # 日期格式双引号中的内容会原样输出
      $ select to_char(sysdate,'fmYYYYMMDD HH24:MI:SS AM "YYYYMMDD"') from dual;
      $ select to_char(sysdate,'YEAR-Month-ddsp ddspth:DAY:dy D=DDD') from dual;
    
      $ to_number # 将字符串类型转换为数值类型
      select to_number('100') from dual;
    
      $ to_date # 将字符串类型转换为日期类型
      $ select round(to_date('16-MAY-95','DD-MON-YY'),'month') from dual;
      # 单行函数可以嵌套使用,从内向外进行计算
    

    Others

      $ Data retrieval  # 数据获取  eg: SELECT
      $ Data manipulation language (DML)  # 数据操作语言,对表中数据内容进行修改 eg: INSERT, UPDATE, DELETE
      $ Data definition language (DDL)  # 数据定义语言,对数据库对象结构进行修改 eg: CREATE, ALTER, DROP, RENAME, TRUNCATE
      $ Transaction control  # 事务控制,对事务进行操作 eg: COMMIT, ROLLBACK, SAVEPOINT(设置事务回滚点)
      $ Data control language (DCL)  # 数据控制语言,分配与收回权限 eg: GRANT, REVOKE
    
    一只孜孜不倦的bird
  • 相关阅读:
    计算在线人数
    微软MSMQ消息件研究(一)
    jQuery循序渐进2
    单点登陆的ASP.NET应用程序设计[zt]
    利用SQL2005的缓存依赖
    .Net 操作MSMQ
    GridView中数据格式化
    TcpListener/TcpClient/UdpClient 的区别及联系
    微软消息件MSMQ研究DEMO(二)
    Nhibernate(1)
  • 原文地址:https://www.cnblogs.com/fofade/p/11307664.html
Copyright © 2011-2022 走看看