oracle 数据库

ORACLE

SQL(Structured Query Language)结构化查询语言

DML   数据操纵语言

SQL    DCL   数据控制语言,控制权限

       DDL   数据定义语言  例如:CREATE,DROP,ALTER,DELETE

ORACLE安装

              Sys  超级管理员

  System system

              Scott tiger

       

Oracle端口号:1521

Oracle只有一个database,通过不同的用户给表分类。

sqlplus

Select * from tab;查询当前用户有哪些表。

set linesize 300;显示一行显示300个字符。

Set pagesize 50;显示一页50

简单查询语句:

Select [distinct] <列名> [[as] 别名] from <表名> [[as] 别名]

[where <查询条件>]

[order by <排序列名> [asc | desc]]

distinct 去掉查询结果中重复列  字段名不能加’ ’(引号)

select ‘name:’ || ename form emp

            字符串连接

Between 1500 and 3000 结果包含了15003000

Between ….and….也可用于日期

In:

Select empno,ename from emp where empno in(2011,2001,2300)

通配符:’ -’代表一个字符,‘%’代表0到多个字符。

sqlplus 中,ed d:/a  表示打开或创建一个sql文件,

             @ d:/a   表示执行此文件

单行函数

字符函数:接收字符输入并输出。

  upper: 将小写字符转换成大写

   select upper(‘jack’) from dual;

oracle有一张特殊的表:dual,完成一项功能使用

  initcap:将单词第一个字母转换成大写

    select initcap(lower(ename)) from emp;   嵌套使用函数。

  Concat:字符串连接

Select concat(‘name:’,ename) from emp;    相当于使用‘ ||

  length: 长度

select length(‘hello’) from dual;

  substr: 截取字符串

substr(‘word’,3)  从第三个开始截取

substr(‘helloword’,1,3) :其中为索引,3为长度

索引可从0开始,也可从1开始

Substr(‘helloword’,-3)  从后向前数截取3

  Replace:替换

Select replace(ename,’s’,’9’) from emp;

数字函数:

  round:四舍五入

    select round(2473.125) from dual; 无小数保留

round(2736.3567,2) 保留两位小数

round(2173.34,-2) 精确到两小点前两位

  trunc(2649.34,2)保留两位小数,其余位截去

日期函数:

日期-数字=日期    日期+数字=日期    日期-日期=数字

  round((sysdate-hiredate)/7) 求员工入职大约有几个星期

  month_betweed(sysdate,hiredate)  求员工入职有几个月

  add_months(sysdate,1) 加一个月

  next_day(sysdate,’星期一’) 求出给定日期的下星期一是号

  last_day(sysdate)  这个月的最后一天是几号

转换函数:

  to_char(hiredate) 转换成字符串

  to_char(hiredate,’yy-mm-dd’) 转换成日期形式

  to_char(hiredate,’fmyyyy-mm-dd’)  其中fmformat去掉前导0

  to_char(sal,’$99.999,99’)

  to_number(‘34235’)

  to_date(’12-28-2012’,’mm-dd-yyyy’)  转换成日期

通用函数:

Oracle中空值参加四则运算,结果为null

  select ename,sal*12+nvl(comm,0) from emp;

多表查询:

   找关联字段作关联条件

(1) 找出几张表 (2)消除迪卡尔积  (3)确定查询内容

 一张表当两张表用时不是一回事

 “什么的什么“用时需消除迪卡尔积

表连接:

(1) oracle特有的方式

+“号在”=“号左边是右连接,在“=”号右边是右连接

以哪张表为基准就是要求其表内容全部显示出来。

select e.ename,m.ename from emp e,emp m where e.mgr = m.empno(+);

(2)通用表连接  sql1999

  交叉连接,产生迪卡尔积。

   select * from emp cross join dept;

  自然连接:自动匹配关联字段,有且只有一个字段名称相同,且是关联字段

   select * from emp natural join dept;

select * from emp join dept using(deptno); 若有多个相同字段,用using明确指定哪个字段(字段名称)

select * from emp join dept on(emp.deptno=dept.deptno);

                 明确指定要关联的字段,字段名不一样时

  左连接:

select e.ename,m.ename from emp e left join emp m on(e.mgr=m.empno);

组函数和分组函数:

   count():统计函数,查个数

   select deptno from emp group by depno;

          只有分组条件才能作为查询字段

   Select deptno,count(ename) from emp group by deptno; 可以用分组函数

   Select d.dname,avg(e.sal) from emp e right join dept d using(deptno) group by d.dname;

 子查询:在查询结果当成一张表,再在这张表的基础上查询

   例:要求显示出平均工资大于2000的部门编号和平均工资

      注意:分组条件不能出现在where条件中,只能用having

      select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

where条件必须放在group by

select job,sum(sal) from emp where job <> ‘saleman’

group by job

having sum(sal) > 5000

order by sum(sal) desc;

组函数嵌套时,即便是分组条件也不能作为查询字段,不能查询任何字段

分页:

   Sqlserver’top’

   Mysql用‘limit

   Oracle 用伪例(rownum,rowid

 “id”:惟一标识

  Rownum一定要从1开始。

select * from (select rownum r,ename from emp where rownum<=10) where r>=5;

  查询emp表中第5至第10条记录。

分页必要的条件:

(1) 每一页的起始位置  firstIndex

(2) 每一页显示几条记录 maxResult

创建表:

  create table myemp as select * from emp; 表的复制

  desc emp;查询表结构

  create table myemp as select * from emp where 1=2; 复制表结构

插入数据:

  Insert into<表名> [(字段1,字段2…)]  values(<1><2>…)

更新数据:

  Update <表名> set <更新字段的值> where <更新条件>

常用数据类型:

  Char:表示字符类型,长度限制255字节,效率高,长度固定。 中文占3个字节

  varchar2 :表示字符类型,长度限制255字节,节约空间,长度可变。

  Clob:大文本类型,可以存放在4G,  mysql :text

  number: number(n)表示整数,长度为N,可以使用INTEGER

         number(m,n)表示一个小数,小数长度为n,整数长度为m-n,可以使用float

  date:表示日期类型,需要按照标准的日期格式。

  blob :表示二进制类型,4G

修改表结构:

Alter table t-user modify(username,varchar(12));只能修改成更大的

截断表:

Truncate 用来删除表中的数据,不能回退,delete 可以回退。

数据库的完整性 惟一性+正确性

 主键约束:primary key 

(1)…(2)…(3)alter table t_user add constraint PK-USER-ID primary key(id);

 惟一约束 :unique

        区别:主键约束不允许插入案值,而惟一性约束允许插入空值上。

             Oracle允许插入无数个空值。

        Alter table t_user add constraint UQ_USER_USERNAME unique(username);

 非空约束:not null

 检查性约束:(1)列后+check(age>0 and age<120)

             (2) alter table t_user add constraint CK_USER_SEX check(email like ‘%@%’);

三大范式:

(1) 确保每一个字段都具有原子性,不能再分割的。

(2) 确保表的每一个字段都依赖于主键(每张表只描述一个实体)

(3) 确保表中的每一个字段都不传递依赖于主键

关系型数据库(主外键关系)

 一对一:1、在一对多的基础上外键加惟一性约束

2、一张表的主键既是主键又是另外一张表的外键 

         3.在多对多的基础上外键全部加惟一性约束(不会用)

 一对多:

多对一:在多的一端加外键

多对多: 一定要有中间表,并且大部分情况下使用联合主键。 Primary key(cid,tid)

 

 先创建主表再创建从表。

 先插入主表的数据再插入从表的数据。

 先删除从表的数据,再删除主表的数据。

外键约束:

(1) create table t_student (id integer primary key,name varchar2(12),cid integer,foreign key(cid) references t_class(id))

(2) alter table t_student add constraint FK_STUDENT_CID foreign key(cid) reference t_class(id)

 

主键生成策略:

SQL SERVER : identify(自增长)

   Mysql :  increment  uuid(三十二位的字符串)

Oracle :  sequence(序列当成一张虚拟的表

    

Create  sequence

(需要有create sequenceacreate any sequence权限)

[increment by n]—每次加N

[start with n] ----n开始计数

[NOMAXVALUE]----不设置最大值

[NOCYCLE]----一直累加,不循环

[maxvalue 999999999] ----最大值

[minvalue 1]----最小值

[cycle]-----循环

[cache]-----缓存

     Create table t_user(id integer primary key,username varchar2(12));

 Create sequence t_user;

     Insert into t_user values(sq.nextVal,’admin’); 

视图:一张虚拟的表,用来查询(oracle中做成一张直实的表)

  Create view v_score as select ....

    Sqlserver  的视图只能查不能改

    Oracle 的视图默认允许修改,原始表数据跟着修改。

Oracle数据库创建用户

 1用超级管理员登入

 2 create user 用户名 identified by 密码

    改密码  alter user用户名 identified by 密码

权限管理:

Grant 权限 to 用户名

 类  用户

     权限

角色:权限的集合

两个通常用的角色:connect,resource

加锁与解锁:

Alter user 用户名 account lock/unlock;

Oracle备份文件的导出与导入:

CMD中进入一个文件夹,输入exp

    导入数据;imp

 Exp  wangke/8888@orcl file=d:/abc/beifen.dmp fully=y(所有文件)/tables=(t_user);

Mysql区别:

端口号:3306

   通过不同的database来管理表

text  大文本数据类型

分页用limit:    limit 0,3;

                 索引     几条记录     索引从0开始

你可能感兴趣的:(oracle 数据库)