oracle 数据库

1.添加用户到oracle

create user lihong identified by 123;
删除: drop user lihong;

  • 添加权限(connect resource dba)

    grant 权限 to lihong;

  • SQL是用于访问和处理数据库的标准的计算机语言

  • 基本数据库对象 (不区分大小写)

  • 主码约束primary key,唯一性约束unique,非空约束not null,外键约束foreign key;

  • 删除表 DROP table tablename;

    添加列:alter table tablename add ziduan datatype
    修改列数据类型:alter table cj modify ceshi 数据类型;
    修改字段名:alter table student rename column sno to id;
    删除列:alter table cj drop column 字段名;

  • 增删改查 insert into tablename(ziduan) values(‘’,’’,…);
    delete from tablename where 条件;
    update tablename set 字段名=’’,字段名=..where…
    select 字段 from tablename where…

  • 例子: CREATE TABLE
    student(
    Sno CHAER(9) NOT NULL UNIQUE,
    Sname CHAR(20) UNIQUE,
    Ssex CHAR(20),
    Sdept CHAR(20)
    );

  • 限制输出 mysql是limit Oracle是rownum <=
    select * from presons where rownum <=5;

  • like 通配符 in between…and…

drop table student 删除student表

数据查询

  • 查询 select 单表查询 select * from st
  • SELECT DISTINCT Sno from sc;
  • where 条件查询 in,not in 确定集合 is NULL ,is not null
  • 基于文本的过滤 like % 任意长度字符 _任意单个字符 \转义
  • and优先级高于or 括号改变优先级
  • 降序 DESC,升序 ASC order by
  • select count(ziduan) from student
  • 分组 GROUP BY 例子: SELECT cno,CONUT(Sorce) from stuents GROUP BY Cno;
  • HAVING作用于组中选出条件

    连接查询

  • 等值连接(连接运算符为=)
    select student.,sc. from student, sc where student.Sno = sc.sno;
  • 自然连接(没有重复列的自然连接)
    select student.Sno, Sname, ssex,Sage,Sdept,Cno,Grade from student,Sc where Student.Sno=SC.Sno;
  • 非等值连接(连接运算符不是=)
  • 自身连接(需要给表起别名以示区别)
    select first.Cno,second.Cpno from Course first, Course second where first.cpno=second.cno;
  • 外连接(左连接,通常就用join on )
    select student.Sno, Sname,Ssex,Sage,Cno,Grade from student left join sc on student.sno=sc.sno;
  • 复合条件连接
    select student.Sno,student.Sname
    form student,Sc where student.sno=Sc.sno and sc.cno=’2’ and sc.Grade>90;
  • 多表连接
    select student.Sno,Sname,Grade rom student,Sc,Course where student.Sno=SC.sno and Sc.Cno=Course.Cno;

嵌套查询(子查询){将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询}

  • select Sname from student where Sno in (select sno from sc where cno=’2’);

集合查询

  • union 并(相当于or)
  • intersect 交(相当于and)
  • minus 差 (相当于前者与后者的补集的交)

任何情况 order by 只能出现在最后

分组与视图,索引

  • 提高效率的2方法:索引,分区
    1 分组 (group by)
  • 目的:可用聚合函数 like: select kid,count(id) from cj group by kid having count(id)>=’3’;
  • having(相当于where)

2 视图

  • 创建视图: create view view_nam as
    select column_name from table_name
    where condition

    create view view1 as select sno,cj.id,kc.kname from student2,cj,kc where id >1;(这要表连接)

  • 开头可加个 or replace
  • 更新视图: update view_nam set sname=’liucheng’ where sno=’12’
    同基本表的更删改查

3 索引

  • 创建唯一性索引:create unique index stusno on student(sno);
  • 聚簇索引:create cluster index stusname on student(sname);
  • drop index stusname;

存储过程(procedure)

  • 语法结构:
      create or replace 
      procedure 过程名 as 声明语句段;
      begin 执行语句段,
      exception 异常处理语句段;
      end;
    
  • 流程控制
  1. 条件判断

    if … then elsif then … else …end if;
    case … when … than …end;

  2. 循环结构

    loop … exit when … end loop;
    while … loop … end loop;
    for i in … loop … end loop;
    goto,exit

  • 游标(cursor) 是用于处理多行的句柄或指针
  1. 定义游标

    cursor cursor_name is select id from student where …;

  2. 打开游标

    open cursor_name;

  3. 提取游标

    fetch cursor_name into 变量里;
    while cursor_name%found loop
    dbms_output.put_line(‘xuhao:’||变量);
    fetch cursor_name into 变量里;
    end loop

  4. 关闭游标
    close cursor_name;
    用for 就不需要后三🙅‍步
  • 声明一个记录类型
    type name is record( 里面放多个变量)

  • 游标属性

  1. %found 布尔型属性,当最近一次读时成功返回即为true
  2. %notfound
  3. %isopen 当游标打开时返回true
  4. %rowcount 数字型属性 返回已从游标中读取的记录数
  • 带参数的游标

    cursor cursor_name(id number, name varchar) is
    select id,sname from xuesheng where …

  • 隐性游标

    begin
    update employees set salary = salary+10;
    where employee_id = 101;
    if sql%notfound then dbms_output.put_line(‘查无此人’);
    end if;
    end;

  • 创建函数(function)

    create or replace function func_name(id number,name varchar)
    return number
    is –定义的,声明的变量,记录类型,游标;
    begin
    –函数的执行体
    exception
    –处理函数的异常
    end;

  1. 调用函数 select func_name from dual;

触发器(trigger) 通过某一个事件来隐性运行

create or replace trigger update_emp
after
update on emloyees
begin
执行体
end;