1、密码设置:Lichao3140
超级管理员sys: 密码:change_on_install
管理员system: 密码:manager
scott用户: 密码:tiger
sh用户: 密码:sh
2、登录
cmd: sqlplus scott/tiger
sqlplus: scott/tiger
无用户登录:sqlplus /nolog
3、设置每行数据长度:SET LINESIZE 300;
设置每页显示的行数:SET PAGESIZE 30;
设置指定列的宽度:COL 列名称 FOR A长度数字;e.g COL job FOR A10;
4、使用记事本记录sql语句:
oracle创建记事本命令:ed 记事本名称,不设置后缀则默认为".sql"; e.g ed lichaosql 则生成lichaosql.sql文本
执行记事本里面sql语句:@记事本名称: e.g @lichaosql; 或者指定自己的文件路径: @E:/data.sql
5、 用户切换:
切换到sys用户:CONN sys/change_on_install AS SYSDABA;
切换到system用户:CONN system/manager;
切换到scott用户:CONN scott/tiger;
6、表查询语句:
scott用户下所有的表查询:SELECT * FROM tab;
表结构查看:DESC 表名; e.g DESC emp;
字段的连接:SELECT empno || ename FROM emp;
普通数字连接:SELECT empno || 1 FROM emp;
字符串连接:SELECT empno || 'hello' FROM emp;
7、验证函数:SELECT LOWER('Hello'), UPPER('Hello') FROM dual;
输入指定条件的值:SELECT * FROM emp WHERE ename=UPPER'&inputname'; (UPPER保证用户输入条件为大写,因为数据区分大小写)
首字母大写:SELECT INITCAP('HelloWorld') FROM dual; 第一个字母大写
字符串替换:SELECT REPLACE(ename, UPPER('a'),'_') from emp; 将所有A都替换成_
消除空格:SELECT REPLACE('HELLO WORLD LI CHAO','')FROM dual;
8、字符串截取 注意:SUBSTR下标从1开始,若设置为0也会从1开始
SELECT SUBSTR('HelloWorldNIHAO', 11) FROM dual; 把NIHAO截取出来
SELECT SUBSTR('HelloWorldNIHAO', 6,5) FROM dual; 把World截取出来
9、数值函数
四舍五入操作:
SELECT
ROUND(46547.64446), 46548
ROUND(46547.64446,2), 46547.64
ROUND(46547.64446,-2), 46500
ROUND(46587.64446,-2), 46600
ROUND(-15.35) -15
FROM dual;
截取操作不进位:
SELECT
TRUNC(46547.64446), 46547
TRUNC(46547.64446,2), 46547.64
TRUNC(46547.64446,-2), 46500
TRUNC(46587.64446,-2), 46500
TRUNC(-15.35) -15
FROM dual;
求模(求余数)
SELECT MOD(10,3) FROM dual; 1
10、日期函数
当前日期:SELECT SYSDATE FROM dual;
时间戳:SELECT SYSDATE,SYSTIMESTAMP FROM dual;
日期 + 数字 = 日期:SELECT SYSDATE+100 FROM dual;
日期 - 数字 = 日期:SELECT SYSDATE-100 FROM dual;
日期 - 日期 = 数字:使用Oracle自带的函数可以解决闰年和闰月问题
e.g 计算员工到当前日期入职的年限: SELECT ename, hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) years FROM emp;
e.g 计算四个月之后是什么时候:SELECT ADD_MONTHS(SYSDATE,4) FROM dual;
e.g 计算当前日期月份的最后一天:SELECT LAST_DAY(SYSDATE) FROM dual;
e.g 计算所有雇员在每月的倒数第二天入职的员工:SELECT ename,hiredate,LAST_DAY(hiredate),LAST_DAY(hiredate)-2
FROM emp
WHERE hiredate = LAST_DAY(hiredate)-2;
e.g 计算下一个指定的星期:SELECT NEXT_DAY(SYSDATE,'星期二') FROM dual;
e.g 计算雇佣时间多少年、多少月、多少天:SELECT empno, ename, hiredate,
TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) years,
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) months,
TRUNC(SYSDATE-ADD_MONTHS(hiredate, MONTHS_BETWEEN(SYSDATE,hiredate))) day
FROM emp;
11、转换函数
格式化日期:SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;
查找所有在2月雇佣的人:SELECT * FROM emp WHERE TO_CHAR(hiredate,'mm')='02';
转换本地货币:SELECT TO_CHAR(457646461348,'L999,999,999,999,999') FROM dual;
12、通用函数
NVl函数解决为null字段替换为0的问题:NVL(列|null,为空的默认值) oracle只有的函数,其他数据库没这个函数
e.g 计算所有员工的年薪:SELECT empno, ename, job, sal, comm, NVL(comm,0),(sal+NVL(comm,0))*12 income FROM emp;
多数值判断:SELECT empno, ename, job,DECODE(job,'CLERK','办事员','SALESMAN','销售') FROM emp;