oracle数据库笔记之基础部分

创建用户

CREATE USER 用户名 IDENTIFIED BY 用户密码

[DEFAULT TABLESPACE default_tablespace]--作用是用户的默认表空间

[TEMPORARY TABLESPACE temporary_tablespace];--作用是临时用户默认的表空间

create user identified by 123;

删除用户

 drop user 用户名 [cascade --作用是级联删除即删除用户的对象(表。。),但注意删除是这些对象没有被其它用户访问]

给用户授权(用管理员的身份)

grant 权限 to 用户

权限的分类有:create session --分配连接权限

              creat sqquence --创建序列权限

              creat synonym   --创建同义词的权限,需要注意grant creat synonym to 用户名(包含drop synonym权限)

                                 但是grant creat public synonym to 用户名 (不包含drop public synonym权限需要另外分配)

              create table    --创建表的权限

              drop table      --删除表的权限

              drop any table  --删除任一表的权限

             create procedure  --创建存储过程

             create user     --创建用户

             drop user       --删除用户

             create view     --创建用户

给对象授权

grant 权限 on 表名 to 用户名

对象权限的分类:

对象权限                            允许用户操作

insert                              执行插入语句

select                              执行查询语句

update                              执行更新语句

delete                              执行删除语句

execute                             执行存储过程

撤销用户权限

revoke 权限 from 用户

修改用户

 修改用户密码:alter user 用户名 identified by 新密码

                   connect[conn] 用户名/旧密码

                   password;         --利用管理员的身份为某用户修改密码此方法会显示出一个可视化窗口进行修改,需要注意此代码格式必须是这样否则执行出错。

                   conn[connect] 用户名/旧密码  

                   password;        --用户自己身份进行修改,其他同上

给用户解锁:

alter user 用户名 account unlock;

查询用户

SELECT username,user_id,password,default_tablespace

FROM dba_users;

数据类型

数据类型是在创建表的时候定义的:

字符型的:

数据类型

最大长度

说明

CHAR(size)

2000

固定长度字符串,size表示存储的字符数量

NCHAR(size)

2000

固定长度的NLS(National Language Support)字符串,size表示存储的字符数量

经过试验最大值为1000。

NVARCHAR2(size)

4000

可变长度的NLS字符串,size表示存储的字符数量. National Language Support (NLS)

VARCHAR2(size)

4000

可变长度字符串,size表示存储的字符数量

RAW(Size)

2000

可变长度二进制字符串,建议使用blob。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:char(4) --仅可以存储两个汉字

      nchar(4) --可以存储四个汉字

数值型的

数据类型

说明

NUMBER(p,s)

包含小数位的数值类型。参数p表示精度,参数s刻度,它表示小数点后面的位数。例如:NUMBER(10,2)表示小数点之前最多可以有8位数字,小数点后有2位数字

NUMERIC(p,s)

与NUMBER(p,s)相同

FLOAT

浮点数类型。属于近似数据类型,它并不存储为多数数字指定的精确值,它们只存储这些值的最近似值

DEC(p,s)

与NUMBER(p,s)相同

DECIMAL(p,s)

与NUMBER(p,s)相同

INTEGER

整数类型

INT

同INTEGER

SMALLINT

短整类型

REAL

实数类型,与FLOAT一样,属于近似数据类型

DOUBLE PRECISION

双精度类型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

日期/时间类型

数据类型

说明

DATE

日期类型

TIMESTAMP

与DATE数据类型相比,TIMESTAMP类型可以精确到微秒,微秒的精确范围为0-9,默认为6

TIMESTAMP WITH TIME ZONE

带时区偏移量的TIMESTAMP数据类型

TIMESTAMP WITH LOCAL TIME ZONE

带时区偏移量的TIMESTAMP数据类型

INTERVAL YEAR TO MONTH

使用YEAR和MONTH日期时间字段存储一个时间段。年份精度指定表示年份的数字的位数。默认为2

INTERVAL DAY TO SECOND

用于按照日、小时、分钟和秒来存储一个时段。日精度表示DAY字段的位数,默认为2;微秒的精度范围为0-9,默认为6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

大对象类型

数据类型

说明

BFILE

指向服务器文件系统上的二进制文件的文件定位器,该二进制文件保存在数据库之外

BLOB

保存非结构化的二进制大对象数据,最大值为4G。

CLOB

保存单字节或多字节字符数据,最大值为4G.

NCLOB

保存Unicode编码字符数据,最大值为4G。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sql语句类型:

DDL(data definition language)数据定义语言:用于创建对象的

create  drop   alter  modify  rename

DML(data manipulation language)数据操作语言:用于操作数据

insert..into    updata   delete select

创建表

 (1)创建表必须具备create table权限

 (2)创建表及命名规则:表名和列名:

 

                        必须以字母开头

 

                        必须在 1–30 个字符之间

 

                        必须只能包含 A–Z, a–z, 0–9, _, $, 和 #

 

                        必须不能和用户定义的其他对象重名

 

                        必须不能是Oracle 的保留字

 

                        Oracle默认存储是都存为大写
(3)创建语法:

CREATE  [GLOBAL TEMPORARY--意思是是否是临时表] TABLE 表名 (

   列名 列属性 [CONSTRAINT 约束名 DEFAULT 列的默认值]

[, 列名 列的属性[CONSTRAINT 约束名 DEFAULT 列的默认值] ...]

)

 [ON COMMIT {DELETE | PRESERVE} ROWS]--控制临时表保存的时间

 [TABLESPACE 表空间;]

--注意最后一列没有','号创建完表之后可以使用desc 表名来查询表的结构

(4)对表的操作:

   给表添加约束:alter table 表名 add constraint 约束名  约束条件(有primary key 列名|check(列名 约束条件)|unique (列名)|

                 主外键名 foreign key (列名) references 要引用的表名(列名))

   删除表的约束:alter table 表名 drop constraint 约束名

   停用约束:alter table 表名 disable constraint 约束名

   启用约束:alter table 表名 enable  constraint 约束名

   查看表的约束:select * from user_constraints;

   查看表的信息:select * from user_tables

   表的重命名:rename 旧表名 to 新表名

   查看表中列的信息:select * from user_tables_columns

   往表中添加新的一列:alter table 表名 add 列名 列属性

   给列重命名:alter talbe 表名 rename column 旧列名 to 新列名

   给列起别名:select stuname as "别名" from student where 条件;(双引号可有可无)

   给列(表)添加备注:comment on column 列名(表名) is ‘备注信息’

   修改表中列的属性:alter table 表名 modify 列名 列属性

   删除表中的一列:alter table 表名 drop column 列名

补充:区分唯一约束和主键约束:

      唯一约束:要求该列唯一,允许为空但只能出现一个空值

      主键约束:要求该列唯一,不允许为空

(5)对表中数据的操作:

    向表中插入数据:♣insert into 表名[列名,列名,..列名] values(与前面列名相对应的值)

                       注意:所给列的值必须和前面所陈列的顺序一致

                       当时日期类型是:insert into 表名 values(to_date('2009-02-03','yyyy'));

                                  或者insert into 表名 values('09-3月-2015');

                    ♣insert into 目标表名 select 要插入目标表的列 from 要从哪个表中选数据的表名;

                         例如:从books1表中查出所有数据插入到books中去

                              insert into books select * from books1;

                    ♣create table 表名 as select 要插入的列 from 要从哪个表中选数据的表名;

                              例如:create table books as select * from books1;

     注意:第二种和第三种插入方法类似,区别在于第二种方法中books表必须存在而第三种办法是books表可以没有。另外,如果第三种

           办法有where条件并且where条件为1=2这种永远为假的条件的话,那么此操作仅仅会复制表books1的结构不会插入任何数据。

   更新表中数据:updata 表名 set 列名=列值,列名=列值 where 条件;(多组条件之间用and 表示与 or 表示或)

   删除表中数据:delete [from] 表名 where 条件

                 truncate table 表名

                 注意:两者区别是delete是可以回退的删除前提是在没有commit之前,而truncate是不可以回退的不管是否commit;

   查询表中数据:

       ♠单表的查询:select 列名 from [distinct] 表名 --加distinct的作用是取消重复列

                    [where 列名=列值]

                    [group by 要进行分组的列名]

                    [having 分组后的查询条件]

                    [order by 要排序的列  asc(升序)|desc(降序)];

       注意:带[]的可以有可以没有,但要是多个存在是顺序必须是这样的。不能颠倒。

 数据库中运算符的分类:

(1)算术运算符:+    -     *     /

     注意:+不能做连接符使用,仅仅能用于数字类型的计算

           oracle中字符类型的区分大小写例如:smith就不等于Smith

           数字类型的直接用=比较,而字符和日期类型的要用单引号括起来在比较

           oracle中日期格式是日—月—年要修改可以用语句:alter session set nls_date_format='yyyy-mm-dd';

补充:如何获取系统的年,月,日

select to_char(sysdate,'yyyy') from dual;--获取年

select to_char(sysdate,'MM') from dual;  --获取月

select to_char(sysdate,'dd') from dual;  --获取日(是当月的第几天,而ddd表示当年的第几天,dy表示当周的第几天)

select to_char(sysdate,'hh') from dual;  --获取12进制的小时(其中hh24是24进制的小时)

select to_char(sysdate,'mi') from dual;  --获取2位数的秒数(60进制)

select to_char(sysdate,'Q') from dual;   --获取季节   

select to_char(sysdate,'iw') from dual;  --获取当年第几周,一般一年是52周或者53周(其中ww也可以表示,而w则表示当月第几周)

时间的计算:

select sysdate-interval '7' hour from dual;  --当前系统时间减去7个小时。也可以用+表示加上7个小时

select sysdate-interval '7' minute from dual; --减去7分钟

select sysdate-interval '7' day from dual;   --减去7天

select sysdate-interval '7' month from dual; --减去7个月

select sysdate-interval '7' year from dual; --减去7年 

或者:select to_date('2015-06-23','yyyy-mm-dd')+7 from dual;--你输入的时间加上7天

      select to_date('2015-06','yyyy-mm')+7 from dual;  --你输入的时间默认为2015年6月的1号在加上7天

      select to_date('2015','yyyy')+7  from dual;  --你输入的时间默认是2015年1月1号再让月加上7日加上7

(2)比较运算符

=    !或者<>     <      >      <=       >=    

any(表示任一)   all(表示全部)   注意:这两个必须和上面比较运算符一起使用 

in(值1,值2,...值n)匹配值中的任何一个  

between 下限 and 上限 (包含上下限)

exists 表示是否存在

例子:select stuname from student where stuno>any(01,05,06);表示查询学号大于01,05,06中的任何一个(即大于最小的即可)的学生姓名

(3)sql运算符 

like  和_ 或者%一起使用

例子:select * from emp where ename like 's%';                 

 (5)逻辑运算符

and    or    not

数据库中的函数:

(1)单行函数:

      concat(a,b)      --字符串拼接函数,也可已使用||来代替。例如:select concat(bookid,'-') 或者是select bookid||'-' from 表名

      Initcap(x)       --将字符串转换成每个首字母大写其他字母小写的形式

      Instar(要从哪个字符串中找,要查找的字符,开始的位置,第几个出现)

      例如:select ename Instr(ename,'l',1,2) from emp where empno=7499;  --查找从第一个字母开始找第二个出现'l'的位置,并返

            回位置数字

      length(x)       --返回x长度

      nvl(x,value)   --若x为null则返回value值

      replace(x,要被替换的字符串,替换成的字符串)例子:select ename replace(ename,'SMITH','史密斯') as 新名字  from emp

                                                      where emp='7369';将SMITH替换成史密斯

      substr(x,开始的位置[,长度]) 提取指定的字符,若开始位置为负数则从x的最后一个字符开始算,若长度没有长度,则返回从开始位置

                                 到最后一个字符之间的所有字符。例子:select ename,substr(ename,2,3) from emp;

      lower(列名|字符串)   --将字符串的所有字母转换成小写

      upper(列名|字符串)  --将字符串的所有字符装换成大写

      LPAD(x,width[,要填充的字符])  --左填充

      RPAD(x,width[,要填充的字符])  --右填充

      ltrime(x,[,要去出的字符])     --左去除

      rtrim(x,[,要去除的字符])      --右去除

      trim(x,[,要去除的字符])      --两边去除

      soundex(x)                    --返回代表x的字符串的语音表达形式例子:select ename from emp

                                                                                 where soundex(ename)=soundex('smith');

   (2)数字函数

      ceil(value)   --返回最接近值的最小整数

      floor(value)  --返回最接近值的最大整数

      trunc(value[,n]) --硬截取,若n大于0则保留n为小数,若n小于0则保留-n为小数,n等于0或者没有则去掉小数部分

      round(value,n)   --同上,不过是四舍五入的截取

      abs(value)     --返回绝对值

      power(value,n) --n次幂

      mod(m,n)       --m对n取余的结果

      sqrt(value)    --开方

  (3)转换函数

      to_char(x[,format])  --将x转换成什么格式的字符串

      to_number(x)         --将x转换成数值型

      to_date(x[,format])  --将x转换成什么格式的日期型

  (4)聚集函数

     avg(x)          --返回平均值

     count(x)        --返回同及x出现的系数,会自动排除空值

     max(x)          --返回最大值

     min(x)          --返回最小值

     sum(x)          --求和

     median(x)      --返回中间值

     stddev(x)      --返回标准偏差

     variance(x)    --返回方差

     ♣高级查询(又称多表查询)      

  内部链接:select ename,dname from emp e,dept d where e.deptno=d.deptno;

   (1)内连接(inner join)例子: 

       select ename,dname from emp e inner join dept d using(deptno);  

       select ename,dname from emp e inner join dept d on e.deptno=e.deptno;

   (2)左连接(left join)例子:

      select e.ename,d.dname from emp e left join dept d on d.deptno=e.deptno   --以emp表为主即以左表为主

      select e.ename,d.dname from emp e,dept d where e.dtptno=d.deptno(+)       --加号不在那个表那,那个表示主表

   (3)右连接(right join)例子:

      select e.ename,d.dname from emp e right join dept d on d.deptno=e.deptno   --以dept表为主即以右表为主

      select e.ename,d.dname from emp e,dept d where e.dtptno(+)=d.deptno       --加号不在那个表那,那个表示主表

   (4)全连接(full join)例子:

      select e.ename,d.dname from emp e full join dept d on d.deptno=e.deptno    --左右表均为主表

子查询:select * from emp where deptno=(

                                        select deptno from emp where ename='smith';

                                        )注意:若返回数据是多行则会出错,另外,order by 只能用于父查询

多行子查询:select deptno,sal from emp where (deptno,sal)

                                            in(select deptno,min(sal) from emp group bu deptno;);

合并子查询:union   --取两个结果集的并集,并自动去掉重复行

            union all --取两个结果的并集,不会去重复也不会排序

            interset  --取交集

            minus     --取差集,只显示存在第一个集合中的,不显示第二个集合中的

       例子:select ename,sal,job from emp where sal>2500

             union

             select ename,sal,job from emp where job='manager';

分页查询:rownum 结果集编号

         select * from(

                       select rownum m,empno,ename,job from emp where rownum<10

                       ) temp where temp.m>5;

         除此之外,rowid是行标识符,oracle中每一行都有一个唯一的标示符,它用户oracle数据库内部存储的物理位置

         delete from temp where rowid not in(

                                            select min(rowid) from temp group by id

                                             );

序列(sequence):是数据库对象用于生成一系列的整数

(1)创建序列:create sequence 序列名称

               [start with 起始值]

               [increment by 步长]

               [maxvalue 最大值|nomaxvalue]

               [minvalue 最小值|nominvalue]  --默认是1

               [cycle|nocycle]               --默认是nocycle

               [cache|nocache]               --默认是nocache

               [order|noorder]               --请求顺序是否按生成顺序得到

      例子:create sequence s

            start with 10

            increment by 5

            minvalue 10

            maxvalue 20

            cycle cache 2

            order;

  (2)删除序列:drop sequence s;

  (3)查看序列:select s.nextval from dual;

               select s.currval from dual;

索引:

   (1)B树索引:默认的索引类型,平衡数索引适用于高基数,重复值少时使用

     create [unique] index 索引名 on

     表名(列名[,列名...])

     tablespace 索引空间

 例子:create index i on customer (last_name);

   (2)唯一索引:B树索引的一种形式,经常与主键和唯一键约束一起使用。

   (3)位图索引:对于包含低基序列以及在sql语句的where字句中使用,使用许多and 或者or运算符的数据仓库,重复值的使用

     create bitmap index 索引名 on 表名(列名)

   (4)函数索引:使用与应用了sql函数的列

    create index 索引名 on 表名(upper(列名))

视图:基于已知的一张或多张表的查询操作,存储在数据库中的一条sql语句

  视图并不是存储数据,数据依然被存在原始表中,

注意: 如果视图只关联了一张表,则可基于它进行增,删,改,查操作对原表产生影响

  创建视图:create [or replace] [force|noforce] view 视图名

            [列名[,列名...]] as subquery 子查询

            [with [check option|read only] constraint 约束名];

  注意:创建视图必须具备相应的权限:grant create view to 用户名

  删除视图:drop view 视图名

同义词:

create sysnonym 同义词名 for 相应的要为谁创建同义词的名

同样要具有相应的权限:grant create sysnonym to 用户名;注意:此语句不仅分配了创建同义词的权限,还分配了删除同义词的权限

                      grant create public sysnonym to 用户名;--仅仅分配了创建权限

                      grant drop public sysnonym to 用户名;  --分配删除的权限

posted @ 2015-09-19 13:39  夏天的薰衣草  阅读(260)  评论(0编辑  收藏  举报