zoukankan      html  css  js  c++  java
  • oracle学习操作(1)

    一、oracle表及表空间:                                    

    1.查看用户、用户表空间等,需要sysdba登陆:
    select username, default_tablespace from dba_users;
     
    2.一个数据库可以有多个表空间,一个表空间里可以有多个表。表空间就是存多个表的物理空间;可以指定表空间的大小位置等。
    创建表空间:create tablespace ts1 datafile 'C: ablespace s1.dbf' size 50M;
    自动扩展大小:create tablespace ts2 datafile 'C: ablespace s2.dbf' size 50M autoextend on next 10M;
    设置最大空间:create tablespace ts3 datafile 'C: ablespace s3.dbf' size 50M autoextend on next 10M maxsize 1024M;
     
    3.更改默认的表空间:默认的表空间一般是users;需要sysdba
    alter database default tablespace ts1;
     
    4.更改某个用户默认的表空间,需要sysdba; alter user c##chengyu default tablespace mytablespace
     为用户授予表空间权限:                         alter user c##chengyu quota unlimited on mytablespace;
    5.表空间改名:alter tablespace ts1 rename to tss1;
    6.删除表空间:drop tablespace ts2 including contents and datafiles;
    需要手动删除硬盘上表空间文件;
     
    二、oracle虚表dual:                                    
    Dual表是sys用户下的一张虚表;提供一些运算和日期操作时候用到;
    select sysdate from dual;
     
     
    三、oracle序列:                                      
    oracle特有的。用来产生一个唯一的,不间断的,数字的一个序列;一般用来做主键
    比如文章表,每次往里插入,id自增1;
    可以考虑每次取出id的max(id),然后+1;
    但是这样有线程同步问题;很可能插入的id值一样等问题;
     
    1.创建序列:
     
    2.序列属性:
    create sequence user_seq start with 1 minvalue 1 increment by 1;
    使用序列:t_user表中的id是主键,使用序列自增:
     
    insert into t_user values(user_seq.nextval, 'zhangsan', '123456');
    insert into t_user values(user_seq.nextval, 'lisi', '123456');
    select user_seq.currval from dual;
    select user_seq.nextval from dual;
    序列产生一个序列的数,而且保证不会重复;即便是两个线程同时来访问这个东西,放心,还是不会重复,说白了自己内部已经做了线程同步了。
     
    真正项目中是一个项目用一个序列,还是一个表用一个序列??
    优缺点:
    一个项目用一个序列,很多表用一个序列: 缺点-每个表的主键就不连续了;
    一个表用一个序列:好管理点,生成的主键都是连续的;缺点-麻烦点,每个表都得建序列;
    一般是一个表对应一个序列;
     
     
    四、Oracle表操作:                                    
    1、update:
    更新一行的两个字段,之间用逗号隔开:
    update t_user set username='zhang_san', password='123' where id = 1;
     
    2、select查询:
     联合查询:
    例如现在数据库中表记录:
    t_user:
    t_user2:
     
     1)并集(去重复):
    select * from t_user union select * from t_user2;
     
     2) 并集(不去重复):
    select * from t_user union all select * from t_user2
     
    3)交集:
    select * from t_user intersect select * from t_user2   得到结果就是只有一个 zhang_san  123 
     
    4) 差集: 属于第一个集合里面,不在第二个集合里面;
     select * from t_user minus select * from t_user2    得到结果  lisi  123456
     
     
    五、oracle数据类型及函数:                                    
    1.字符串类型及函数:
    //解释:
    select lpad(username, 10, '0') username, password from t_user;
     
    substr(字段名,索引位置,截取长度) :  索引位置从1开始;
    instr(字段名,要查找的串,从第几个索引位置开始, 第几次出现),查不到的话,返回0;索引位置值从1开始;
     
    2.数值类型及函数:
    //代码解释:
    select round(123.45, 1) from dual    //123.5 
    round第二个参数,是保留几位小数;
     
    sign() 整数返回1; 0返回0; 负数返回-1;
     
    select trunc(123.456,2) from dual;    //123.45
    trunc第二个参数是保留几位小数,单纯的截取,不进行其他操作;
     
    select to_char(123.45,'0000.000') from dual;    // 0123.450
    select to_char(123.45,'9999.999') from dual    //123.450         9999.999和上面的区别就是:整数位不会自动补0;
    select to_char(123123,'99,999,999.99') from dual    //123,123.00 
     
    select to_char(123123.3,'FM99,999,999.99') from dual;  //123,123.3  FM会把结果前面的空格去掉;
     
    select to_char(123123.3,'$99,999,999.99') from dual    //$123,123.30
     
    select to_char(123123.3,'FM$99,999,999.99') from dual  //$123,123.3   FM将返回结果前面空格去掉,FM可以和$连用;
     
    select to_char(123123.3,'L99,999,999.99') from dual;  //¥123,123.30
     
    select to_char(123123.3,'99,999,999.99C') from dual  //123,123.30CNY 
     
    3.日期类型及函数
     
    //代码解释:
    select * from t_date;
     
    select add_months(d1,2) from t_date where id=1;

    ADD_MONTHS(D1,2)
    ----------------
    26-5月 -17

    select last_day(d1) from t_date where id=1;

    LAST_DAY(D1)
    ------------
    31-3月 -17

    select months_between(d1,d3) from t_date where id=1;

    MONTHS_BETWEEN(D1,D3)
    ---------------------
    3.197800553

    select extract(year from sysdate) from dual;

    EXTRACT(YEARFROMSYSDATE)
    ------------------------
    2017

    select extract(month from sysdate) from dual;

    EXTRACT(MONTHFROMSYSDATE)
    -------------------------
    3

    select to_char(d1,'YYYY-MM-DD') from t_date where id=1;

    TO_CHAR(D1,'YYYY-MM-DD')
    ------------------------
    2017-03-26

    select to_char(d1,'YYYY-MM-DD HH24:MI:SS') from t_date where id=1;

    TO_CHAR(D1,'YYYY-MM-DDHH24:MI:SS')
    ----------------------------------
    2017-03-26 21:41:23

    4.其他常用处理函数

    //代码解释:
    select ename,nvl(sal,0) from emp;    //如果sal列的值为null的话,将这个值用0来代替显示;
     
    oracle翻页:
    求薪水最高的第6到第10位:
    两种写法都可以:
    select * from (select a.*, rownum rn from (select * from emp order by sal desc) a where rownum <=10) where rn >= 6
    select * from (select a.*, rownum rn from (select * from emp order by sal desc) a) where rn >=6 and rn <=10
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/tenWood/p/6622577.html
Copyright © 2011-2022 走看看