zoukankan      html  css  js  c++  java
  • 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;--将其他表中的数据插入当前表(前提:拥有相同表结构)
  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/whwjava/p/9132748.html
Copyright © 2011-2022 走看看