Oracle数据库基础

Oracle数据库使用的也是SQL语言,所以基本的增删改查语句和MySQL是通用的。

1.Oracle的伪列:

rownum,数据库自带的顺序数字

可以使用select rownum from table_name查询

2.表复制

整表复制,将emp表内的字段、数据全部复制到 myemp表:

create table myemp
as select * from EMP

单列复制:

create table myemp as select ename from emp

表结构复制:

create table myemp as select * from emp where 1=2

3.表查询

--连接查询
select * from emp cross join dept
select * from emp,dept

内连接查询:

--内连接
select * from emp join dept on emp.deptno=dept.deptno
select * from emp,dept where emp.deptno=dept.deptno

全连接查询:

查询左右两表中复合条件的数据与不符合条件的数据

--全连接查询
select * from dept full join emp on emp.deptno=dept.deptno;

表别名:

--表别名
select * from emp a join dept b on a.deptno=b.deptno

视图查询:

可以把查询结果当成一张表来执行查询

create view t as select dname from dept;
select * from t;

 将子查询结果当做表来查询:

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

利用rownum来分页

select * from (select rownum as nid,empno,ename,job,mgr,hiredate,sal,comm,deptno from emp ) where nid between 1 and 5;

集合操作:

UNION 操作符返回两个查询的不重复的所有行。

INTERSECT 操作符只返回两个查询的公共行。

MINUS 操作符返回从第一个查询结果中排除第二个查询中出现的行。

字符串拼接:

select empno||'   '||ename 姓名 from emp;--字符拼接

4.查询系统时间

--查询当前系统时间 dual 虚拟表
select sysdate from dual;
select systimestamp from dual;

5.建表

这里要注意Oracle的数据类型不同于MySQL:

--建表
create table student(
    sid number primary key,
    sname varchar2(10) not null,
    ssex char(2) check(ssex in ('','')),--检查约束
    sbirthday date default(sysdate),--缺省约束
    sidcard varchar2(18) unique,--唯一约束
    cid number,
    constraint fk_cid foreign key(cid) references course(cid) --外键约束
);

格式化日期格式:

TO_DATE

insert into student values(student_seq.nextval,'李四','',TO_DATE('1993-02-04','YYYY-MM-DD'),'123466787987',2);--指定日期格式插入

格式化字符串:

select TO_CHAR(0.123,'$0.999') from dual; //$0.123

自增序列:

--序列
create sequence test_sequence
       start with 1 --指定第一个序号从几开始
       increment by 1 --指定序号之间的间隔
       maxvalue 1000 --表示序列的最大值为
       minvalue 1 --表示序列的最小值
       nocycle --在达到最大值后停止
       cache 30 --指定内存中预先分配的序号数 
create table test(
       tid number primary key,
       tname varchar2(20)
);
insert into test values(test_sequence.nextval,'张三');
select test_sequence.currval from dual;--查询序列当前值
drop sequence test_sequence;--删除序列

 注意,当序列删除再重新创建,开始值变为一,如果此时表中已有主键为1的数据,使用该序列插入数据,序列会自动从2开始,不会报主键重复错误。

6.添加约束

create table score(
       sid number,
       sname varchar2(10)
);

alter table score add constraint pk_score primary key(sid);--添加约束
alter table score add constraint nn_sname unique(sname);

7.将其他表的数据插入到当前表

create table studentC as select * from student where 1 = 2;--表结构复制
insert into studentC select * from student where sid=1;--将其他表中的数据插入当前表(前提:拥有相同表结构)

 

posted @ 2018-06-06 10:04  0==1&1==0  阅读(355)  评论(0编辑  收藏  举报