AI智能
改变未来

oracle-071考题知识点总结

(脑图文件的分享,本意是方便大家,但是积分资源变成平台收割的途径,如有需要,可私信)

oracle

基础操作

DML

插入

  • single table insert

    insert into… values…

    一次不能插入多行

  • insert into … select from…

  • multi table insert

      insert all,分为有条件插入和无条件插入,可以有else子句,同一个when可以被多个into使用
    • insert first,只要匹配when,后续判断不再执行
    • 可以将每行计算的记录插入到多个表中
    • 可以在相关表执行
    • 只能通过子查询执行
    • 不能在remote 表执行
    • 不能在视图执行
    • 不能用SQL*Loader执行

    更新

    • update

      更新单行

      单行单列

      update table set column = … where…

  • 单行多列

      update table set col1=…,col2=…, where…

      可以对被更新的每一列单独使用不同子查询

    • update set can modify multiple rows based on multiple conditions on a table

    • update table set (select … from …)

  • 更新多行

      update table set col1=…(即没有where条件)
    • select * from table for update

    • delete

      dml,可使用rollback撤销回滚

    • 可以使用where指定要删除的行
    • 清空表数据
  • cascade:级联删除时使用

  • DDL

    • alter table

      重命名一张表/列名/列字段类型;新加列

      alter table add/drop/modify column 列名 (字符类型)(单列,需要加上column)

    • alter table add/drop/modify (列名1,列名2…) (多列)

    • 为表中一组数据行加锁

    • 启用或禁用表上的约束

    • drop column

      不能将所有列同时drop掉,会报错

  • set unused(列名)

      unused:由于对大表drop column很耗时,可以先用 set unused逻辑删除,等找到时间窗口再做物理删除;set unused的列仍被计算在每张表的前1000列
    • 被set unused的列名可以被新列复用
    • 被set unused的列中数据不再可以更新
    • 清除掉字典信息(撤消存储空间),不可恢复
    • 不会释放数据行的该列数据占用空间,即使commit

    • create table

      外表

      create table cost ( cost_id number(2), credit_limit number(10) ) organization external (type **** default directory *** location(‘***.csv’))

    • type: 数据转换驱动器,默认为oracle_loader/oracle_driver
    • location: 指定外部表所在文件夹以及指定文件
    • create table as select语句可以从外表中upload数据到数据库里的regular table
    • data,metadata存储位置,都在数据库外❌
    • 默认的reject limit对于外表来说是unlimited❌
    • oracle_loader/datapump在外表里有相同的功效❌
  • 临时表

      global temporary table,分为事务级、会话级;事务级只对当前事务有效,on commit delete rows;会话级只对当前会话有效,on commit preserve rows
    • 可以有多个索引;
    • 可以被定义视图的语句引用
    • 可以创建触发器
    • 可以被定义为多个session访问
    • 可以只授予一部分列的权限:insert,update,references

    • truncate

      不可以通过rollrack撤销

    • 不可以使用where指定要删除的行
    • ddl语句,隐式提交
    • 只删除表中数据,保留表结构及其列、约束、索引等,新行计数值重置
  • drop

      drop index/table/database (表上定义的所有索引/约束被drop)
    • ddl,无法回滚
    • 表被移到 recycle bin
  • purge

      对回收站中的表执行清除
    • 可使用drop table…purge,表示将表彻底清除,并且可以释放表所占用的空间

    函数

    聚合函数

    • group by。。。having 聚合函数 条件

    • count

      count(*,1,常量),不忽略null,每个null计数加1

    • count(column/distinct column)忽略null
  • max min

      可以在char类型的列上使用
    • 如果字段的值全是NULL, 则MIN和MAX的结果均为NULL.
    • 如果该字段包含非NULL值,则MIN/MAX过滤掉所有NULL值
  • avg

      忽略null值,而不是将其作为 0 处理。
  • sum

      忽略NULL值

    日期函数

    • date类型加减法

      date-date=number

      group by (date1 – date2),可以成功执行

  • date-number=date

  • date比较,大于“>”,小于“<”

  • CURRENT_DATE,返回date类型

      时区敏感,返回基于session时区的当前日期returns the current date in the session time zone
  • current_timestamp,返回timestamp类型

      返回session时区的日期和时间
  • sysdate,返回date类型,格式默认值包含日期

  • to_date(c, fmt)

      将char、varchar、varchar2、nchar、nvarchar2转换为date类型
    • 第一个参数c不可用date类型
  • to_char(datetime,fmt),第一个参数为date或其他日期类型

  • ADD_MONTHS(d,i),d可以为date或可隐性转换为date的值,i为整数或可隐性转换为整数的值

  • date与字符常量直接比较时,字符串格式需与date默认格式相同

  • 替换函数

    • NVL(str1,replace_with)如果str1为NULL,则替换为replace_with返回结果==ISNULL(str,x)

    • NVL2(str1,replace_with1,replace_with2)如果str1为NULL,则回replace_with1,否则返回replace_with2

    • COALESCE(expression, value1, value2, …)判断expression是否为null,若不为null则返回expression,否则返回后续第一个不为null的value

      应用:几个表合并,都有id,但是不一定相同。coalesce(a,id,b.id,c.id)取出表中所有的id

  • NULLIF(exp1,exp2),若exp1与exp2相等,则返回null,否则返回exp1,返回类型与exp1相同,exp1不能为null

  • replace:replace(原字段,“原字段旧内容”,“新内容”),返回新内容

  • 合并函数(a 函数 b)

    • union并集,去重
      select t.* from (sql1 union all sql2) t order by t.time desc
    • 第二个select返回的每一列的data type group必须与第一个select返回的data type group一致
    • union all 会保留重复值,不去重
    • intersect交集
    • minus,a minus b, 取a有b没有的

    截取函数

    • ROUND(number[,decimals]):decimal指明需要保留的小数点后位数,被截断的数据要四舍五入;decimals为负数时指明截取到小数点左边的整数的位数

    • TRUNC(x[,y]):返回x按精度y截取后的值,y>0时,x保留y位小数,y<0时,x截取到小数点左边第y位(被截取部分用0代替);y不为整数时只有整数部分有效。

      可以用于numer,date,timestamp

  • ceil(n) :取≥n的最小整数(向上取整)。e.g:ceil(1.5)=2,ceil(-1.5)=-1

  • floor(n):取≤n的最大整数(向下取整)。e.g:floor(1.5)=1,floor(-1.5)=-2

  • substr:substr(string, start, length),返回string从开始位置start截取,length的部分字符串start为负数时,从倒数第几位开始向后截取

  • trim:用来去除一个字符串的开头或结尾(或两者)的字符,字符只能为单个字符,TRAILING 参数指定去除结尾字符
    而ltrim和rtrim可以去除多个字符

      示例:SQL> SELECT trim(trailing ‘2’ from ‘213dsq12’) FROM dual; (213dsq1)

    连接函数

    • join

      inner join

    • self join:自连接,可以是inner join,可以是 left outer join

    • left join
      right join

      A left join B on …and…,and后条件只对B进行过滤,A不受影响

    • left join on where,where条件会对A B联合后的临时表进行过滤
  • 外链接可以用于两个表有多个链接条件时

  • 非等值连接:non-equijoin

      where a.col between b.low_col and b.high_col
      <>,<,>,like,>=,<=
    • 非等值连接语法比SQL:1999语法性能更好
  • cross join

      交叉连接,笛卡尔积
    • 后还可使用where子句
  • merge

  • 排序函数

    • row_number() over e.g. 1,2,3,4,5,6

    • rank over e.g. 1,1,3,4,4,6

    • dense_rank over e.g. 1,1,2,3,3,4

    • order by

      oracle默认为 null 最大。

    • 升序排列,默认情况下,null值排后面。
    • 降序排序,默认情况下,null值排前面。

    字母大小写

    • INITCAP:单词中的第一个字符将转换为大写字母,其余所有字符转换为小写字母
    • UPPER: 全大写,e.g.UPPER(‘Mc%’)

    like :

    • like“Mc%” OR like “MC%“. (like ‘Mc%’ or ‘MC%’ 写法是错的)
    • 通配符:% –
    • 下划线-:1个字符

    exist /in

    • exist:for 循环处理
    • in:子查询
    • in(q,b,c) 和 =a or =b or =c,2个查询的performance no change

    all\\any\\some

    • any\\some等价:满足查询结果的任意一个

      where cost=any(),等价于where cost in()

  • all:满足所有查询结果

      e.g.where cost<all(select max(cost) from t1 group b c1)
    • 如果t1中包含null数据,那么所有all相关的比较运算将不会返回任何结果
  • 比较运算:=,>,<,<>

  • single-row function

    • can be nested to any level
    • 参数可以是列名,变量,字面值,或表达式
    • 返回的数据类型可能与参数数据类型不一致

    执行顺序

    • insert all when into

      不管其他条件的判断结果,所有记录都会进行when的判断

  • insert any

  • case when

      先筛选第一个条件,不符合的会进行第二个条件的筛选

    fetch

    • 使用这个子句去指定返回行的个数或者返回行的百分比

    • [ FETCH { FIRST | NEXT }[ { rowcount | percent PERCENT } ]
      { ROW| ROWS } { ONLY | WITH TIES } ]

      指定only会返回明确的行数或者是百分比的行数

    • 如果指定with ties子句,那么拥有和最后一行相同的排序键值的行都会被fetch。并且此时必须指定order by 。如果没有指定order by,那么不会有附加的行被返回
    • 在order by之后使用

    listagg…within group (order by …)

    • 多行合并为一行

    decode

    • decode(exp1,con1,value1,con2,value2…default,value0)
    • 判断exp1,若exp1==con1,则返回value1,否则继续向后判断exp1=con2…直到找到相等条件;若exp1与此后所有con都不想等,则返回default对应的value0;若未定义default,则返回null

    主键&索引

    • unique key:唯一约束,允许null值,可以有多个,可以是复合字段,如果null+非null字段重复,也会报错。
    • primary key:主键,不为null,只能有一个,可以是复合字段
      可以直接创建create table(c1 varchar(10) primary key)
    • foreign key:外键,允许null值,可以有多个外键
    • Partition key:指定为分区键的列不能被drop
    • constraint:纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。
      index: 存储在数据库中的一个物理结构,
      创建主键或唯一约束时,会自动创建唯一性索引,反之不成立。
      外键不会自动创建索引, 须关联一个唯一性索引(主键或唯一约束)

    索引

    • 唯一索引可以被改为非唯一索引
    • 唯一索引和非唯一索引不能出现在同一列上
    • 递减索引是一个 function-based 类型索引
    • create table时可以创建索引/主键
    • 属于用户a的表可以拥有属于用户b的 索引
    • 更新表会导致表的任一或所有索引的更新
    • CREATE INDEX index_name ON table_name (column_name)
    • union index和 non-union index可以在同一列创建

    数据类型

    类型转换

    • 显性转换

      函数

      1.日期->字符:to_char(date,’yyyy-mm-dd’)

    • 2.字符 -> 日期:to_date(string,’yyyy-mm-dd’)

    • 3.字符 -> 数字:to_number(“123”)

    • 4.数字 -> 字符:to_char(123)

      to_char(1234,\”$99,99”):如果格式的位数不如数字的位数多,会返回’#’;
      被截取的字符需四舍五入

  • 场景

      anydate > date’01-02-2018’
      (写成’01-Feb-2018’可以隐性转换)
  • 隐性转换

      ||,concat (拼接,只能拼string):number/date->string
    • =><(比较运算):string->number/date
    • ±(算术运算,number,date可运算):string->number/date

    日期

    • timestamp:timestamp包含年、月、日,时分秒 毫秒的信息

    • timezone

      DBTIMEZONE函数返回与UTC的偏移

    • SESSIONTIMEZONE 函数返回与UTC的偏移
  • 系统自带日期

      current_date返回当前会话时间
    • sysdate返回服务器时间
    • last_day:对应日期的当月最后一天
  • interval year to month 类型:支持年份间隔

      interval ‘123-2’ year(3) to month:123年2隔越月,year(3)表示年的精度为3位,默认为2
  • interval day to second:存储两个TIMESTAMP之间的时间差异

      单位可为day、hour、minute、second
    • support fractions of seconds
  • 日期只能进行加、减运算

  • 数值

    • number(a,b),总共数字长度是a,其中b位是小数

      插入的整数位个数<= a-b。e.g.numer(5,2),1234.5会报错

    • 插入的小数位可任意多个,多余小数四舍五入

    字符串

    • char类型:不需要指定长度
    • varchar :汉字算2个字符
    • Nvarchar :汉字算1个字符

    bfile类型:

    • 在操作系统文件中存储非结构化的二进制数据

    BLOB类型:

    • 在数据库中存储非结构化二进制数据

    其他

    view视图

    • 是否有段?是否有 object number?是否可以join tables?

      视图如果是可更新视图,则可以支持insert,且insert后如view被drop,插入的记录会保留在相应表中

    • 只有同一个schema下的表才能在视图中join
    • 视图没有segment(段)
  • 使用with check 子句可以阻止固定行被更新或插入,即不满足视图定义时where条件的数据无法更新或插入(如果视图定义包括条件(譬如 WHERE 子句)并且其意图是确保任何引用该视图的 INSERT 或 UPDATE 语句都应用 WHERE 子句)

  • 视图可以不需要重新授权就完成更新

      create or replace语句,无需先drop再create,保留现有权限
  • DML

      不可执行DML的条件

      拥有组函数

    • 定义 有group by

      在使用了group by定义的视图上,通过视图执行delete/insert一行或多行数据会报错

  • 定义有rownum伪列

  • 不可update的其他条件

      列定义为表达式
  • 不可insert的其他条件

      列定义为表达式
    • 表中非空的列在视图定义中未包括
    • 定义时使用了group by也有可能insert成功

    synonym同义词

    • 可以认为是对表、视图、序列、存储过程、函数、程序包或者其他同义词的一个别名
    • 同义词也可以拥有同义词
    • sequence可以拥有同义词
    • 同义词拥有一个object number
    • 所有用户都可以访问到
    • 一个用户可以创建属于另一个用户的对象的同义词
    • 不是所有用户都可以创建public 同义词

    sequence序列

    • 步长 increment by,初始值 start with,最大值 maxvalue ,达到最大值后是否循环从头开始 cycle/nocycle,nocycle时达到最大值后新申请值会报错,cache改善性能
    • sequence 不保证不产生重复值
    • 字段默认值为sequence.nextval时,插入数据的用户需有对于sequence的access权限
    • 一个序列可以给两张表的key提供值
    • 数据库非正常关闭后,已经缓存的序列会丢失
    • 有select、alter、drop、reference权限
    • alter不可改start with,其他都可改

    事务

    • sqlplus,用户退出,未提交的事务会自动提交

    • session可以看到它中所有未提交的事务

    • 开始于第一条DML/DDL语句

    • 结束于

      一条显式的COMMIT或者Rollback命令

    • 一条DDL或者DCL语句
    • 系统崩溃
    • 用户退出SQLplus或者SQLplussheet 或者iSQL*plus
  • rollback

      回滚所有未提交事务
    • to savepoint回滚到指定保存点,未提交的事务保持未提交状态

    权限

    • object privilege权限

      select/update 仅可以授权给 表 和 视图

    • alter 仅可以授权给 表 和 序列
    • 一个对象的owner,默认需要此对象的所有对象权限
    • 表的owner必须被授予 references权限,从而允许其他user创建外键
    • 创建关联到其他schema表的外键约束
    • 从除去sys之外的任意schema中删除表
    • 用户默认拥有其schema中所有object的所有object权限
  • system 权限

      登录一个库:Log into a database

    • 查询数据库中任意表

    • 使用with grant option 子句

      语法grant create… on table to role with grant option

    • grant create…role to role
    • subquence 子序列,不能被grant SELECT、ALTER、UPDATE、DELETE
  • 向其他schema中的现有表,增加主键约束

  • public权限

      可以从一个user收回public权限
  • role

      1个role可以是多个role和权限的集合
    • roles are named groups of related privileges可以被users 或其他roles granted
    • a role can be granted to public,not itself
  • read-only模式的table,可以执行 create index、drop unused columns、drop table

  • session_privs,用户可用的权限,包括当前可用的system权限

  • 可单独授予表中部分列的权限

      references
    • select
    • update

    DUAL:虚拟表

    • 拥有select权限都可以使用
    • 只显示1行1列,varchar2类型

    savepoint

    • 执行前的事务不会被提交
    • 可以回滚delete操作,不能回滚truncate操作
    • 不能回滚create index操作

    merge

    • 可以使用子查询produce源数据row
    • 可以使用视图produce源数据row
    • 可以有条件的从多个表中将数据聚合为一行插入到单表中
    • delete的update,delete需要有where
    • merge into new_table n USING ( select … from old_table ) p ON (n.id=p.id) when matched then update set … delete
    • merge into … using () on … when not matched then insert …values …where

    substitution变量:替代变量

    • 替代变量可以在任何select子句中使用
    • 使用两个“&&”符号的替代变量在同一个session中只需要指定一次值
    • &使用变量,&&的变量只需要第一次出现时提供值

    set verify on:

    • 打开时,对于有&变量的语句,输入变量值后会显示变量赋值后的语句
    • 可以在SQL Developer和SQL *PLUS中使用
    • 显示由DEFINE命令定义的变量的值

    ERD:根据ERD选择两行相关数据

    • 两个表中的每一个关系必须通过join条件实现
    • 同一表中的关联数据通过self join实现

    data dictionary

    • data dictionary持续更新以反映数据库对象、权限和数据的更新
    • sys用户拥有data dictionary下所有base table和用户可达的视图(注意区别于system用户)
    • DICRIONARY是一个view,包含所有用户可访问的数据字典视图的名称

    q引用:q‘引用符…引用符’,q可以大写Q.引用符可以为:

    • 任意单字节或多字节字符集
    • (){}[]<>

    别名

    • as可有可无
    • 可以数字、特殊符号开头,但此时必须用双引号
    • 不可用单引号
    • 注意避免用关键字
    • 表别名可以提高性能

    多行子查询:返回多行数据的子查询

    • 可以使用group by
    • 可以使用having
    • 可能返回多个列
    • 可以包含子查询

    object 对象

    • user_objects视图

      包含当前用户拥有的所有表、视图、索引、包等对象

    • User_objects is a list of all the database objects (tables, views, indexes, packages, etc., etc.) belonging to the current user
  • all_objects视图

      用户有访问权限的所有对象
  • dba_objects视图

      数据库中的所有对象
  • 表、视图、pakcage、同义词等

  • 用户自定义object type

  • SQL

    • 最适合关系型数据库
    • 需要数据存储在分层存储上
    • 为逻辑数据提供独立于底层物理存储的操作

    ERD(实体关系图)

    • 实体
    • 关系
    • 属性
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » oracle-071考题知识点总结