Oracle笔记一

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;

你可能感兴趣的:(Oracle笔记一)