你的位置:首页 > 数据库

[数据库]Oracle简单操作语句(增删改查),和代码例子


//创建用户 :
    
        create user c##名字 identified by 密码 ;
        //命名规则 :
            1 名字必须以字母开头,
            2 长度不能超过30个字符(60字节),
            3 不能使用oracle的保留字<
            4 只能使用a-z,A-Z, 0-9,$,#,_,等...

//切换当前用户 :

            connect 用户名/密码@网络服务器(orcl);

//oracle数据类型 :
    
        number : 整型值  插入值的时候 直接 (22,33,4,45,...就行)
        varchar2 : 字符型 插入值的时候 '必须用单引号括起来';
    number :

        number(5,2);//一共5位数字,其中有两位是小数,范围是(-10^38 ~ 10^38);
        number(5);//就是规定有五位数字,没有小数 默认是number(5,0);
    
    char :

        //查询快,但是浪费空间
        char:定长,2000字符(4000字节),字符串char(5);//可以设置5可 但是内容必须是 '内容',用单引号括起来

    varchar2 :

        varchar2:变长,4000字符(8000字节);
        varchar2(20 byte);//规定能写20个字符 但是只能是byte类型(字节型),但是内容必须是 '内容',用单引号括起来

    clob :

        clob(characterlarge object);//字符型大对象,最大4G

    date :

        date;//时间格式,values()赋值的时候,可以用这个更改格式 : to_date('20-2-81','DD-MON-RR');

    blob :
        blob://二进制数据电影,图片,音乐,4G不会放到数据库里面,文件服务器

//创建表单 :
    在当前用户下创建表单
    create table 表名字(id number(5,2), name varchar2(20 byte));//创建一个表单,里面有两列,第一列是id 是数值型 切共有5位数字,并有两位是小数,三位是整数 ,第二列是name 字符型,能输入20个字节,必须是字节

//更改表名字 :

    rename 旧表名 to 新表名;

zeng :
//增 :
    //创建用户 :
    
        create user c##名字 identified by 密码 ;
        //命名规则 :
            1 名字必须以字母开头,
            2 长度不能超过30个字符(60字节),
            3 不能使用oracle的保留字<
            4 只能使用a-z,A-Z, 0-9,$,#,_,等...

    //为用户授权 : 权限

        grant connect,resource,unlimited tablespace to c##名字 container=all;//所有权限

    //grant 权限 to c##用户名:

        connect:链接(登陆) 权限
        resource:数据/源 权限 (对数据的 增 删 改 查 )
        unlimited tablespace : 表空间 权限

    // grant 权限 传递
        
        grant 权限 to 用户名 with grant option;//它也就有给别人权力的权力,但是权力不能超过他自己(本身)

    //设置用户使用的表空间 :
        
        alter user 用户名 default tablespace users;
        alter user 用户名 temporary tablespace temp;//临时表空间

    //创建表单 :

        create table 表名(属性 number(5,0)/*数据类型五位数,且没有小数*/ , 属性 varchar2(4 byte)/*数据类型,字符型,只能输入4位,必须是字节格式*/)

    //往表里面添加行(内容) :
        
        insert into 用户名.表名(属性1,属性2.../*可选的*/)values(值,值...);

    //往表单里添加一个字段 : (添加一个列/属性)

        alter table 表名 add ("名字" number(3)/*类型,规定内容格式*/);

    //多个插入 :

        insert into 新表名(字段名) select 列 from 表名 where 行限定条件(不是所有数据,年龄段,某个部门)//
    如 : insert into emp(id) select age from emp where id = 33;//把emp表中 id列值为33,对应的那些age的值,添加到emp表的id列中

    //备份表 :

        create table 表名 as select * from 表名;

    //模拟中的数据复制 :

        insert into 表1(属性1,属性2...) select * from 表2;//表1后面属性个数是多少,表2就必须是多少,而且数据类型也必须完全相同 , 然后把表2里面列的数据类型的值,添加到和表1中对应列的数据类型相同的那一列的后面(追加行 )
        1 insert into emp (id/*我这个id是number(5)类型,并且只能写5个数字*/) select * from emp2;//表2 里面必须有一个number(5)类型的列,并且也只能写5个数字
        2 insert into emp (id/*我这个id是number类型*/) select hao from emp2;//hao这个列 必须和id列的数据类型完全相同,然后把hao那一列的数据,在id哪一列的后面,追加

shan :
//删 :

    //删除用户和表 :
      
        //删除用户 只能用sys用户才能删除,因为只有sys用户有删除别的用户的权利
        drop user 用户名 cascade;//用户和表一起删除

    //删除表 :

        drop table 用户名.表名;//删除表

    //删除权限 :

        revoke 操作名(权限) on 表名 from 用户名;

    //删除一个表的字段 : (删除一个列/属性)

        alter table 表名 drop column 列名;    //强烈建议不要对成熟的系统这么做

    //删除行 : 不定条数
    
        delete from 表名 where 行限定条件;
            限定条件 如 : name那一列为Kay的 全部删除
        delete from emp where name = 'Kay';

    //删除表的数据

        truncate table 表名;    //相当于删除表和数据然后重建表.

gai :
//改 :

    //更改表名字 :
        
        rename 旧表名 to 新表名;

    //切换当前用户 :

        connect 用户名/密码@网络服务器(orcl);

    //更改字段(列)的类型或者名字 :

        alter table 表名 modify (属性 类型);
            如 : alter table student modify (sex number(1));

    //更改列上的值 :

        update 表名 set 列名=列值改变量(+-*/), 字段2,字段3, where 行限定条件;
            如 :  update 表名 set 列名='值' where id='B0002'(限定条件,id为B0002的 都会把前面指定的属性的值更改);

            1  update 表名 set (job,sal,comm/*列名*/)= (select job,sal,comm from/*查看三个列*/ emp where ename='clock'/*ename为'clock'*/) where ename ="scott"/*enamel为'Scott'的*/;//

            1 --> update 表名 set (job,sal,comm)= (select job,sal,comm from emp where ename='clock') where ename ="scott";//先查ename为'clock'的(区分大小写),获取job,sal,comm,对应的值,再把这些值更改(赋值)到 ename为'scott' 对应的job,sal,comm的列值中

cha :
//查 :

    //查看当前登陆用户 :
        
        show user;

    //查看当前用户下所有的表单 :

        select * from user_tables;

    //查看你能管理的所有用户 :
    
        select * from all_users;

    //查看数据库里面的所有用户 :

        select * from dba_users;//前提是 你登陆的是sys或system号(用户);

    //查看数据库里面的所有表

        select 表名 from dba_tables;//数据库所有表,包括系统表,前提是 你登陆的是sys或system号(用户);

    //查看表头 :

        desc 表名;//查看表头(也就是列)
where_and :
    //筛选数据,多选, 查询空值 (后面只能用null 这是一个语句)

        select * from 表名 where 列(属性) is not null;//不为空的
        select * from 表名 where 列(属性) is  null;//为空的
        //查看某列的属性为空(不为空)的所有数据

where_and_or :
        or : 或者 或
        >,>=,<,<=,= : 大于,大于等于,小于,小于等于,等于;
    select * from 表 where (列 >/*</>/=(大于或等于或小于)*/值 or 列 = 值) and 列 like 'j%';//
        如 : select * from emp where (id>20 or age = 19)and name like 'j%';//查看emp表中 id列的值大于20或age列的值为19的 并且 name列的值以j开头的所有的行的属性

    //指定查询 :

        select 列限定(就是列) from 表限定(就是表) where 行限定(就是一行中某一个属性);    //数据限定条件区分大小写,java限定大小写,select什么就输出什么
        1 select id,name from emp where job = 'CLERK';//查看 job(列)为'CLERK'的哪一行(或多行)的id值和name值

        2 select * from 表 where 列(列限定/表头) < 7800 and 列>2000;//(*就代表输出所有列的属性) 输出 某表中 某列上的值小于7800 且 某列的值大于2000 的所有列的属性

    //查询特定列 :

        select 列1,列2,列3... from 表 where 行限定;(行限定 : 就是某一列上的值 )
        如 :
            select id,name from emp where sex = '男';//查看性别为'男'的 id和name属性

distinct :
    //单列查询 : (去除重复)

        select distinct 列限定 from 表名 where 行限定(z只能单行查询)
    
like :

    //匹配字符查询 : (就是筛选)

        % : 匹配多个字符 有两个意思 1 可以匹配任意位字符
                                    2 可以匹配每位上面的任意字符
        _ : 匹配一个字符

       1 select * from 表名 where 限定列 like ''%k%';//查看某个表中某个列的属性值,包含k的所有的行的属性

       2  select * from 表名 where 限定列 like '__k%';//两个下划线(代表两位) 查看某个表的某个列的值, 值的第三位是k的所有的行的属性

in :

    //枚举查询

        select * from 表 where 列 in(值(1),值(2),值(3)...);//输出某表中 某列的值为 1 或者 2 或者 3 的所有的行的属性
        select * from emp id in(22,42,66);//输出emp表中 id 列的值为22或42或66的所有的行的属性

    in_and :
        >,>=,<,<=,= : 大于,大于等于,小于,小于等于,等于;
        select * from 表 where 列 in(值(1),值(2),值(3)) and 列 >/</=(大于或小于或等于) 值;
        如 : select * from emp where id in(22,33,44) and age >19;//查看emp表中 id列的值为22或33或44 并且 age(年龄)列的值 大于19的 所有的行的属性

    //对查看到值进行运算 :
            
            +*-/ : 运算查看的值(查是查 算是算 不是一回事,并不会改变表单里面的值,只是更改了输出方式)//但是 该列的数据类型必须是数字(number类型)
            select 列+20 '年终奖' , name from 表名;
            select 列+(加/减/乘/除)20(加减乘除对应的值) '年终奖'(给算好的结果(输出时候的列)起个名字) ,name from 表名;
            select sal+20 '年终奖' , name from emp;//查看emp表中的sal值和name值 ,并且把sal的值都加20 然后起个列名为年终奖

    nvl :
        //!!!!重点 : 如果 某列某行 有个空值 , 那么运算结果肯定为空值
        nvl(列,0) : 把某列上的空值 赋值为0
        select 运算列1 + nvl(运算列2,0)*12 "年工资",列 from 表;
        select sal(工资) + nvl(jiang(奖金列),0) '年工资' ,name from emp;//查看emp表中的sal列,和jiang列,和name列 , 并把sal列的值和jiang列的值相加(有的人奖金为空 , 就是没有,然后通过nvl(),就把空值赋值为0),然后算出来的结果起名(输出时候的列名)为 年工资 ,

order_by :

    desc :

        //给查到的数据,进行从大到小排序(是查到后,在排序,和表内容没关系)
        select * from 表名 order by  列 desc;//某列从大到小排序(只是输出的时候排序而已)

    asc :

        //给查到的数据,进行从小到大排序(是查到后,在排序,和表内容没关系)
        select * from 表 order by 列 asc;//某表的某列输出的时候从小到大排序(只是输出的时候排序)

    as : (起名)

        select 列,列*12 + nvl(列*12,0) as sy,  列 from emp order by sy 排序(asc/desc);//查看某个表的某些列,并对某些列进行了算数操作,并给算的结果起个别名 叫 sy列 ,然后再给这个sy列进行排序 asc(从小到大)/desc(从大到小)

//子查询 : 分页
    
    //几个查询运算,只能是number类型 ,返回值也都为int类型
    max :

        max();//获取某一列的最大值  返回值为int类型
            如 : max(id);//获取id那一列的最大值

    min :

        min();//获取某一列的最小值  返回值为int类型
            如 : min(id);//获取id那一列的最小值

    avg :

        avg();//获取某一列的平均值  返回值为int类型
            如 : avg(id);//获取id那一列的平均值

    sum :

        sum();//获取某一列的值的总和    返回值为int类型
            如 : sum(id);//获取id那一列的值的总和

    count :

        conut();//当前列下有多少个值    返回值为int类型
            如 : conut(id);//获取id那一列有几个值
    
    group_by :

    //以单列为标准分组

        group by ;//以某一列为标准,进行分组   分组标准必须是查询条件中的列
        select 操作(列),操作(列).... ,分组列 from 表 group by 分组列;//分组列就是以某个列为标准分组,去除这一列的重复数据(是把相同数据的行,分为一组)
        select avg(sal),max(sal),deptno from emp group by deptno;

     //以多列为标准分组

        group by ;//以某几个列为标准,进行分组   分组标准必须是查询条件中的列
        select 操作(列),操作(列).... ,分组列1,分组列2 from 表 group by 分组列1,分组列2;//以多列为标准进行分组,就是分组列1进行分组(把相同的数据分为一组,并且 每个组里面不能有分组列2相同的数据 , 如 : id , name  每个id分组里面,不能有相同的name)
        select min(sal),avg(sal),max(sal),deptno,job from emp group by deptno,job;

having :

        having ;//对统计结果进行过滤
        select 操作(列),操作(列).... ,分组列 from 表 group by 分组列 having 操作(列) 比较符 值;//就是限定条件  但是是对结果集进行的限定查询, 先分组,在从分组的基础上,进行限定
        select avg(sal),max(sal),deptno from emp emp group by deptno having avg(sal)>2000;(平均工资低于2000的部门号和平均工资)


//为用户授权 : 权限

        grant connect,resource,unlimited tablespace to c##名字 container=all;//所有权限

    //grant 权限 to c##用户名;
        connect:链接(登陆) 权限
        resource:数据/源 权限
        unlimited tablespace : 表空间 权限

    //设置用户使用的表空间 :
        
        alter user 用户名 default tablespace users;
        alter user 用户名 temporary tablespace temp;//临时表空间


                               JDBC请看下一篇~