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

Oracle 助记的更多相关文章

  1. JVM指令集(指令码、助记符、功能描述)(转)

    JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式:  aconst_null 功能描述:  null进栈. 指令 ...

  2. 【分支结构】Jcc 的一些助记

    eax > ebx OF=0 SF=0 ZF=0 AF=0 PF=0 CF=0 eax = ebx OF=0 SF=0 ZF=1 AF=0 PF=1 CF=0 eax < ebx OF=0 ...

  3. [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符

    说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...

  4. 金蝶KIS&K3助记码SQL数据库批量刷新

    金蝶KIS&K3助记码SQL数据库批量刷新 用的次数不多,就没有写入存储过程或者触发里面了,可以自行实现. 第一步选择对应账套的数据库,执行下面的命令,这个是一个函数. go if exist ...

  5. 非对称加密, 助记词, PIN, WIF

    一钱包 1.1非对称加密, 助记词, PIN, WIF, 地址 1.1.1 非对称加密算法 非对称加密算法, 加密与解密使用不同的KEY, 我们分别称为私钥与公钥,其中可以通过私钥生成公钥 在比特币中 ...

  6. [转]HD钱包的助记词与密钥生成原理

    本文转自:https://blog.csdn.net/opassf/article/details/79978047 区块链相关的话题持续发酵之时,应该不少人知道加密货币钱包,钱包是普通用户与加密货币 ...

  7. [转]简单科普私钥、地址、助记词、Keystore的区别

    本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比 ...

  8. Bytomd 助记词恢复密钥体验指南

    比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 背景知识 ...

  9. JVM指令集(指令码、助记符、功能描述)

    JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式:  aconst_null 功能描述:  null进栈. 指令 ...

随机推荐

  1. IIS 和 ASP.NET ISAPI

    前几天有一个朋友在MSN上问我“ASP.NET 从最初的接收到Http request到最终生成Response的整个流程到底是怎样的?”我觉得这个问题涉及到IIS和ASP.NETASP.NET Ru ...

  2. WebLoad 脚本的用法

    WebLoad 对于模拟一个HTTP 请求,一般都是 由以下三部分组成,并把这三部分包在一个Transaction里(从BeginTransation 到 EndTransaction 为止):   ...

  3. 【莫比乌斯反演+树状数组+分块求和】GCD Array

    https://www.bnuoj.com/v3/contest_show.php?cid=9149#problem/I [题意] 给定长度为l的一个数组,初始值为0:规定了两种操作: [思路] 找到 ...

  4. Frequent values(poj 3368)

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 代码: /* rmq算法 当询问到x,y时,设在x之后并且与a[x]相同的最后一个数编号为t,那么x到t之 ...

  5. 在虚拟机搭建JStrom

    原文:http://blog.csdn.net/u014134180/article/details/51810311 一 安装步骤 二 搭建Zookeeper集群 1 ZooKeeper 单机安装与 ...

  6. STL非变易算法

    非变易算法:原则上不会变更操作数据的算法. [1]    for_each:逐个容器元素,原型for_each(InputIter first, InputIter last, Function f) ...

  7. JAVA获取操作系统的信息

    列出全部信息: Properties prop = System.getProperties(); prop.list(System.out); 获取某个信息: String os = prop.ge ...

  8. 比真机还快的Android模拟器——Genymotion

    比真机还快的Android模拟器--Genymotion                                                     ----转载请注明出处:coder-p ...

  9. 本地调用jni之VC++无法导入问题

    事实上非常easy,无法导入头文件就自己新建呗 1. 首先编写java代码 class Vrv { public native void printVersion(); static { System ...

  10. Mariadb 主从

    一 mariadb主从多用于网站架构,因为该主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...