• Oracle 相关


    概念

    用户、表空间

    docker 安装oracle

    参考

    Oracle命令

    sqlplus  # 连接oracle数据库
    

    表操作

    新建

    • 唯一约束 unique 不可重复
    • 非空约束 not null 不能为空必须制定值
    • 主键约束 primary key 通常是给id使用的,同时具备了unique和not null约束
    • 外键约束 foreign key
    CREATE TABLE hero(
    id number primary key,
    name varchar2(30),
    hp number,
    mp number,
    damage number,
    armor number,
    speed number);
    

    修改表

    增加字段

    ALTER TABLE hero ADD(test number);
    

    删除字段

    ALTER TABLE hero DROP COLUMN test;
    

    修改字段

    ALTER TABLE hero MODIFY(test VARCHER2(200));
    

    删除

    DROP TABLE hero;
    

    记录操作

    插入记录

    • 插入记录需要COMMIT提交
    INSERT INTO hero (id, name, hp, mp, damage, armor, speed) VALUES (hero_seq.nextval, 'link', 233, 904, 232, 23, 233);
    COMMIT;
    

    自增id

    • 创建序列(SEQUENCE)并指定初始值,在插入记录时传递此序列值
    • INCREMENT(步长)
    CREATE SEQUENCE hero_seq
    INCREMENT by 1
    START with 1
    MAXVALUE 9999999
    -------
    INSERT INTO hero (id, name, hp, mp, damage, armor, speed) VALUES (hero_seq.nextval, 'link', 233, 904, 232, 23, 233);
    COMMIT;
    

    删除记录

    • DELETE删除记录可以回滚数据
    • ROLLBACK回滚DELETE的数据
    • TRUNCATE删除记录不可回滚
    DELETE FROM hero WHERE id = 5;
    --COMMIT;   -- 提交后不可回滚
    SELECT * FROM hero;
    ROLLBACK;
    
    TRUNCATE TABLE hero;  -- 不可回滚
    

    更新记录

    UPDATE hero SET id = null WHERE id = 99;
    

    字符串连接

    • 字符串连接:||
    • hr.employees是Oracle自带表
    SELECT e.last_name || ' ' || e.first_name as NAME_  FROM hr.employees e
    

    去重复

    • DISTINCT
    SELECT DISTINCT e.department_id FROM hr.employees e
    

    回滚

    • ROLLBACK
     DELETE FROM hero;
     -- 回滚删除的数据
     ROLLBACK;
    

    设置回滚点

    • SAVEPOINT :设置保存点
    • ROLLBACK TO
     UPDATE hero SET name = 'TEST A' WHERE id = 13;
     
     SAVEPOINT A
      
     UPDATE hero SET name = 'TEST B' WHERE id = 13;
     
     SAVEPOINT B
     
     DELETE FROM hero WHERE id = 13
     
     SAVEPOINT C
     -- 回滚到保存点A之前的数据
     ROLLBACK TO A
    

    条件查询

    like

    • %匹配多个或者没有,_匹配有且只有一个
    -- job_id 中以N或者K结尾且必须包含L的字段
    SELECT * FROM hr.employees e WHERE (e.job_id like '%N' OR e.job_id like '%K') AND e.job_id like '%L%';
    

    BETWEEN

    SELECT * FROM hr.employees e WHERE e.salary BETWEEN 2000 AND 3000
    

    IN

    SELECT * FROM hr.employees e WHERE e.Employee_Id IN(116, 130);
    

    分组查询

    -- 对员工表按部门分组,且计算部门平均工资
    SELECT e, AVG(e.salary) FROM hr.employees e GROUP BY e.department_id
    

    分组条件

    • HAVING
    -- 对员工表按部门分组,且计算部门平均工资,筛选大于5000的部门
    SELECT e.department_id, AVG(e.salary) FROM hr.employees e GROUP BY e.department_id HAVING AVG(e.salary) > 5000
    

    分页查询

    • rownum:当前行号
    SELECT * FROM(
          SELECT e1.* ,rownum r FROM (
                SELECT * FROM hr.employees e ORDER BY e.salary DESC ) e1
          ) e2 WHERE r > 5 AND r <= 10;
    

    连接查询

    -- 查询员工名称(e.first_name)和部门名称(d.department_name)
    SELECT e.first_name, d.department_name FROM hr.employees e LEFT JOIN hr.departments d ON e.department_id = d.department_id
    

    存储过程

    创建

     CREATE OR REPLACE PROCEDURE test_pro(cnt OUT number)
     AS
     BEGIN
          SELECT count(*) INTO cnt FROM hero;
     END;
    

    调用

    CALL test_pro()
    
  • 相关阅读:
    求求你规范下你的代码风格
    为啥用ip不可以访问知乎,而百度却可以?
    漫画:htts是如何保证一台主机把数据安全发给另一台主机
    如何从亿量级中判断一个数是否存在?
    广播路由算法 :我是如何优雅着把悄悄话带给其他人的
    什么?你不知道0.0.0.0和255.255.255.255这两个地址是干嘛的?
    一篇文章带你学会Linux三剑客之一:awk
    你真的了解 i++, ++i 和 i+++++i 以及 i+++i++ 吗?
    通俗易懂讲解TCP流量控制机制,了解一下
    一文读懂拥塞控制
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/13955169.html
Copyright © 2020-2023  润新知