ORACLE基础知识

 

一:oracle数据库的链接与退出:

#sqlplus /nolog    连接数据库,但没有使用账号登录
>conn oracleuser/123456    使用oracleuser用户登录
#sqlplus / as sysdba    以数据库管理员的身份登录
>disconnect        退出当前用户
>exit            退出数据库

 

二:创建用户、赋权、创建表空间:

SQL> create tablespace TBspace datafile '/root/TBspace.dbf' size 30m;

        创建表空间TBspace,大小30m,位置/root/TBspace.dbf。

 

SQL> create temporary tablespace TMPTBspace tempfile '/root/TBspace.dbf' size 30m;

       创建临时表间。临时表空间的主要用途是在数据库进行排序运算、管理索引、访问试图等操作时提供临时的运算空间,当运算完成之后系统会自动清理临时表空间。

 

>create user USER identified by 123456 default tablespace TBspace|temporary tablespace TMPTBspace;

          创建用户USER,密码123456,表空间为TBspace(或临时表空间为TMPTBspace)    

   

SQL>drop user USER;                删除用户USER
SQL>grant connect dba to USER;      向USER用户赋予连接和管理员角色
SQL>select * from all_user;        查看所有用户
SQL>select * from all_sys_privs;    查看所有系统权限
SQL>select * from all_tab_privs;    查看所有对象权限
SQL>select * from dba_roles;        查看所有角色
SQL>select * from user_role_privs;    查看用户所拥有的角色

 

三:oracle常用语句   

SELECT

数据检索

INSERT

UPDATE

DELETE

MERGE

 

数据操纵语言(DML)

CREATE

ALTER

DROP

RENAME

TRUNCATE

 

 

数据定义语言(DDL)

COMMIT

ROLLABCK

SAVEPOINT

 

事物处理控制

GRANT

REVOKE

数据控制语言(DCL)

oracle中SQL语句规范:  

    1:SQL语句不区分大小写。

    2:SQL语句可以是一行,也可以是多行。

    3:关键字不能缩写或在中间另起一行。

    4:子句通常放在单独的行中。

    5:缩进只是为了增强可读性,没有具体实际意义。

 

SQL>create table tb1(name varchar2(10),job varchar2(20),gongzi varchar2(20))tablespace TBspace;    创建表tb1
SQL>alter table tb1 add id varchar(10);    添加字段
SQL> alter table tb1 drop column id;    删除字段
SQL> insert into tb1(NAME,JOB,GONGZI,ID)values('jim','baidu','5600','3');    插入数据
SQL>truncate table tb1;    清空表tb1中的数据
SQL>drop table tb1;    删除表

 

基本SELECT语句

    SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

    SELECT确认处理哪些列,FROM确认处理哪些表。

    

    使用算术运算符,可以创建数字和日期数据表达式。如运算符+,-,*,/等。

    例如:select name,gongzi,12*gognzi from tb1;

    定义空值:空值是指不可用、未分配、未知或不适用的值;空值不同于零或空格。

    例如:select name,gongzi,commission_pct from tb1;    在查询结果中会创建一个名为commission_pct的空列。

 

定义列别名

    列别名具有以下特点和功能:

    1:重命名列标题。

    2:有助于计算。

    3: 紧跟在列名的后面,在列名和别名之间有可选的关键字AS。

    4:如果列别名包含空格或特殊字符或者区分大小写,则需要使用双引号。

    例如:select name as"Name",gongzi*12"NIANgongzi"from tb1;       

 

连接运算符

    连接运算符具有以下特点和功能:

    1:将列或字符串连接到其它列。

    2:有两条竖线(||)表示。

    3:创建一个合成列,它是字符表达式。

     例如:selectname||jobas "GongZuo" from tb1;    就会将name和job两列连接起来作为一个单独列“GongZuo”。

    

文字字符串

    1:文字是指包含select列表中的字符、数字或日期。

    2:日期和字符文字必须包含在单引号中。

    3:在结果输出中,每个返回的行都回将每个字符串显示一次。

    例如:select name ||'de gognzi shi'||gognzi as "GongZi" from tb1;    就会显示一个名为GongZi的列,列中的信息是“XX de gongzi shi XXX”`。

 

重复行

    查询时默认会显示重复行,想消除重复行需要使用关键字"DISTINCT"。

    例如:select DISTINCT gongzi from tb1;

 

显示表结构:

    DESC tb1;

限制和排序数据:

    使用where子句限制返回的行:‘

    SELECT *|{[DISTINCT] column|expression [alias],...} FROM table[where condition(s)];

    例如:select * from tb1 where gongzi > 5600;    

    

    where中的字符串和日期:

    1:字符串和日期值包含在单引号中。

    2:字符值是区分大小写的,而日期值是区分格式的。

    3:默认日期格式为 DD-MON-YY

    

    比较条件:=,>,>=,<,<=,<>            其中<>为不等于。

    逻辑条件:AND,OR,NOT

     例如:select name job from tb1 where gognzi NOT IN (5300,5600,5900);  

    其它条件:

运算符 含义
BETWEEN...AND... 介于两值之间(包含这两个值)
IN(SET) 与值列表中的任一值匹配
LIKE 与某个字符模式匹配
IS NULL 为空值

    例如:select name job from tb1 where gognziIN (5300,5600,5900);    

    使用LIKE条件可以对有效字符串执行通配符搜索,其中"%"匹配零个或人一个字符,"_"匹配一个字符。    例如:select * from tb1 where jobLIKE 't%';

ORDER BY子句

     SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [where condition(s)]ORDER BY {column,expr,alias} [ASC|DESC];

    1:使用ORDER BY子句可以对行进行排序。

            ASC 升序,也是默认设置

            DESC 降序

    2:ORDER BY子句在SELECT语句的最后。

    例如:SELECT * FROM TB1 order by gognzi desc;    就会按gongzi降序排列。

 

四:oracle常用函数

    oracle中有许多内置的SQL函数,可以方便的实现某些功能。通过向SQL函数传递参数,函数执行后会为每行后返回结果;接受的参数可以是列也可以是表达式,函数可以嵌套。

    function_name [(arg1,arg2,...)]

    一些常用SQL函数:

    1:大小写处理函数

    这些函数主要用于转换字符串的大小写:

函数 处理结果
LOWER('SQL Function') sql function
UPPER('SQL Function') SQL FUNCTION
INITCAP('SQL Function') Sql Function

    例如:select * from tb1 where LOWER(name)='landy orten';

    字符串处理函数:

函数 结果
CONCAT('Hello','World') HelloWorld
SUBSTR('HelloWorld',1,5) Hello
LENGTH('HelloWorld') 10
INSTR('HelloWorld',W) 6
LPAD(aaaaa,10,'*') *****aaaaa
RPAD(aaaaa,10,'*') aaaaa*****
TRIM('H' FROM 'HelloWorld') elloWorld

        SUBSTR取得字符串中指定起始位置和长度的字符串 ,substr ( string, start_position, [ length ] ),当start_position为负数时,表示从字符串末尾向前算起。

 

        RPAD(String a,int length,String addString),将addString添加到a的右边,length 是返回值的长度。

 

    2:数字函数

        ROUND:将值舍入到制定的小数位

                ROUND(33.363,2)——>33.36

          TRUNC:将数值截取到指定的小数位(不舍入)

                TRUNC(33.363,2)——>33.36

        MOD:返回除法运算的余数

                  MOD(16,3)——>1

    例如:select ROUND(33.336,2),MOD(16,3) from DUAL;    //DUAL是用于查看函数或计算结果的空表。

 

    3:日期处理

    oracle数据库以内部数字格式存储日期:世纪、年、月、日、小时、分钟和秒。

    默认日期格式为:DD-MON-YY    例如:07-MAY-13

    

      

    与日期有关的运算:    

    1:对日期进行加减运算,以获得新的日期值。

    2:将两个日期相减,以得到他们之间的天数。

    3:将小时除以24,以将小时添加到日期中。

    例如:select name,(SYSDATE-hire_date)/7 AS weeks from tb1 ;

    

    日期函数:
  MONTHS_BETWEEN    两个日期之间的月数
  ADD_MONTHS                将日历月份添加到日期中
  NEXT_DAY                      指定日期的下一天
  LAST_DAY                      月份的最后一天
  ROUND                             舍入日期
  RUNC                                  截断日期

    例如:MONTHS_BETWEEN('01-MAY-13','01-SEP-12') ——> 8