数据库操作
1、创建表空间:
create tablespace [spacename] datafile [filepathname] size [num];
如:create tablespace leo_tablespace datafile 'F:\oracle\product\10.1.0\oradata\leo_data.dbf' size 500M;
2、创建用户:
create user [username] identified by [password] default tablespace [spacename];
3、为用户授权:
grant connect, resource to [username];
grant dba to [username];
4、创建表:
如:
create table "scott"."director" (
"director_id" number(6) not null,
"name" varchar2(10) not null,
"code" number(18) not null
)
5、创建索引:
create unique index [index_name] on [table_name] ([column_name])
如:
create unique index "bgsuser"."mp_file_info_inx" on "bgsuser"."mp_file_info_tab" ("fileid")
6、查看数据文件路径:
SQL> select file_name from dba_data_files;
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf
7、查看数据库字符集:
SQL> select userenv('language') from dual;
AMERICAN_AMERICA.ZHS16GBK
8、启动数据库
先启动监听程序:
lsnrctl start
启动oracle服务
sqlplus / as sysdba
SQL>startup
常用命令
1.查看当前用户:
SQL> show user;
2.使用用户登录数据库:
使用超级管理员账户时,必须使用as sysdba:
SQL> conn sys/oracle as sysdba;
使用其他账户,则:
SQL> conn scott/tigger;
3.设置环境变量:
SQL> set pagesize 30;
SQL> set linesize 150;
4.查看表结构:
SQL> desc table;
5.字符串连接操作,使用"||":
SQL> select '我的名字是:'||username from user;
6.模糊查询通配符:
"%":匹配零个或多个任意字符;
"_":匹配一个任意字符;
7.不等于"<>":
SQL> select * from emp where empno <> 7369;
8.order by 子句:
写在前面的字段先排序,写在后面的后排序。
单行函数
(一)、字符函数
1.小写转换为大写:upper(str)
SQL> select upper('smith') from dual;
SQL> select * from emp where ename = upper('smith');
2. 大写转换为小写:lower(str)
3.首字母大写:initcap(str)
SQL> select initcap('HELLO WORLD') from dual;
4.字符串连接:concat(str, str)
SQL> select concat('hello ', 'world') from dual;
5.截取字符串:
(1)substr(str, begin, sublen):从begin开始从str中截取长度为sublen的字符串
SQL> select substr('hello', 2, 1) sub from dual;
注意:从0和1开始截取的结果是相同的。
(2)substr(str, begin):从begin开始截取str后半部分字符串
SQL> select substr('hello', 3) sub from dual;
SQL> select substr(ename, -4, 2) sub from emp; 当begin为负数时,表示从倒数第几个开始截取
6.字符串长度:length(str)
SQL> select length('hello') len from dual;
7.字符串替换:replace(src, substr, replacestr)
将hello中的所有l替换成x:
SQL> select replace('hello', 'l', 'x') rep from dual;
(二)、数值函数
1.四舍五入:round()
SQL> select round(354.543) from dual; 结果为:355(默认为取整数部分进行四舍五入)
SQL> select round(354.543, 2) from dual; 结果为:354.54(保留两位小数位)
SQL> select round(354.543, -2) from dual; 结果为:400(如果为负数,表示在小数点前几位处进行四舍五入)
2.截断小数位:trunc() 不四舍五入
SQL> select trunc(252.532) from dual; 结果为:252(默认截取整数部分)
SQL> select trunc(252.532, 2) from dual; 结果为:252.53(截取两位小数位)
SQL> select trunc(252.532, -2) from dual; 结果为:200(如果为负数,表示在小数点前几位出开始截取)
3.取模:mod()
SQL> select mod(10, 3) from dual; 结果为:1 (表示10 % 3 = 1)
(三)、日期函数
日期函数规律:
日期 - 数字 = 日期
日期 + 数字 = 日期
日期 - 日期 = 数字(天数)
SQL> select sysdate from dual; 获得当前日期
1.months_between():求出给定日期范围的月数
SQL> select ename, round(months_between(sysdate, hiredate)) months from emp;
2.add_months():在指定日期上加上指定月数
SQL> select add_months(sysdate, 4) from dual;
3.next_day():下一个的今天是哪一个日期
SQL> select next_day(sysdate, '星期一') from dual; 下一个星期一的日期
4.last_day():求出给定日期的那个月的最后一天日期
SQL> select last_day(sysdate) from dual;
(三)、转换函数
1.to_char:转换成字符串
(1)将日期转换成字符串
年:y,年是四位数字,所以使用yyyy表示
月:m,月是两位数字,所以使用mm表示
日:d,日是两位数字,所以使用dd表示
SQL> select to_char(sysdate, 'yyyy') year, to_char(sysdate, 'mm') month, to_char(sysdate, 'dd') day from dual;
日期显示格式转换:
SQL> select to_char(sysdate, 'yyyy-mm-dd') from dual;
去掉月、天前面的前导零:
SQL> select to_char(sysdate, 'fmyyyy-mm-dd') from dual; 在格式前面加上"fm"
(2)将数字转换成字符串
9:表示一位数字
SQL> select to_char(34343, '99,999') from dual;
SQL> select to_char(34343, '$99,999') from dual;
SQL> select to_char(34343, 'L99,999') from dual; 根据本地语言环境进行显示,如果是中文,则显示¥
2.to_number:转换成数字
SQL> select to_number('123') + to_number('123') from dual; 将字符串变为数字再相加
3.to_date:转换成日期
SQL> select to_date('2010-09-10', 'yyyy-mm-dd') from dual;
(四)、通用函数
1.nvl():将空值转换为指定值
SQL> select nvl(comm,0) from emp;
2.decode():类似于条件判断语句if...else if...else
SQL> select decode(3,1,'内容是1',2,'内容是2',3,'内容是3','都不是') from dual;
SQL> select empno, ename, hiredate, sal, decode(job,'ANALYST','分析员','CLERK','业务员','MANAGER','经理','PRESIDENT','总裁','SALESMAN','销售员') job from emp;
多表查询例子:
查询所有员工的名称,所在部门名称,工资,工资等级,上级领导名称,上级领导工资等级。
SELECT E.ENAME, D.DNAME, E.SAL, EG.GRADE, M.ENAME, MG.GRADE FROM EMP E, DEPT D, SALGRADE EG, EMP M, SALGRADE MG WHERE E.DEPTNO = D.DEPTNO AND E.MGR = M.EMPNO AND E.SAL BETWEEN EG.LOSAL AND EG.HISAL AND M.SAL BETWEEN MG.LOSAL AND MG.HISAL;
oracle优化常识:
1.from子句有多个表时,oracle从右到左处理,因此将数据量最小的表名放在from的最末尾。
2.where子句中,将能过滤掉最多数据的条件放在where部分的最末尾,因为oracle是从下自上处理的。
3.select语句中避免使用*
4.设置arraysize环境变量为合适的值。
5.当连接多个表进行查询时,使用表的别名,并且在每个结果字段上加上表的别名
6.合理使用索引
7.SQL语句用大写,oracle总是会先将小写转换为大写,再执行
8.不要在索引字段上进行计算,这样oracle会停止使用索引,而采用全表扫描
如:select sal*12 > 2500;
可改为:select sal > 2500/12;
9.避免改变索引列的类型。避免比较两个不同类型的值,oracle会自动使用转换函数进行转换,只要在索引字段上
使用了函数,则会停止使用索引。
10.尽量使用where替代having,即在group by之前尽量使用where子句过滤掉不需要的记录。