美文网首页
【华为网络技术大赛】数据库基础原理

【华为网络技术大赛】数据库基础原理

作者: Mjolnir1107 | 来源:发表于2018-04-17 17:38 被阅读0次

SELECT查询语句基础

SELECT的三种能力:
  • 投影
    由条件选择出列
  • 选择
    由条件选择出行
  • 连接
    把多张表中的行结合在一起(列匹配)
SELECT的语法:
SELECT语法
NULL值:

NULL值是不可用,且未分配的,和0或者空格是不一样的,甚至没有定义类型。任何包含NULL值的算数表达式,其结果判定为NULL。

列的别名:
  1. 重命名一个列的标题
  2. 对运算很有帮助
  3. 紧跟在列名后面,或者之间加AS
  4. 如果别名包含空格或特殊字符或大小写敏感,使用双引号
级联操作:

将列或字符串和其它列串联,由(||)表示,结果是一个完整的字符串。

消除重复行:

在SELECT后直接跟DISTINCT关键字就可以

查询数据的限制和排序

限制:

WHERE 如果限制的是字符串或者日期要加单引号

LIKE里面用的是类似正则

排序:

ORDER BY 降序DESC
有多个列,以从左到右依次排序

单行函数

字符串:

LOWER-->转小写
UOOER-->转大写
INITCAP-->首字母大写
CONCAT-->字符连接
SUBSTR-->取子串
LENGTH-->取字符串长度
INSTR-->返回子字符串的位置

数字:

ROUND-->四舍五入到指定位
TRUNC-->截取到指定位

日期:

SYSDATE-->系统当前日期

相互转换

分组函数

分组的关键字 GROUP BY
对分组限制的关键字 HAVING

多表查询

自连接
等值连接
外连接

  • 左外连接
    返回左边的匹配行,不考虑右边的行是否有相应的行
    (+) 表示这是匹配表,不重要
  • 右外连接
  • 全连接
    关键字 FROM FULL JOIN
    ON

子查询

子查询最常用于WHERE子句,但不限于WHERE

  1. 单行子查询
  1. 多行子查询
操作符 描述
in 等于列表中的任何一个
any 和子查询返回的任意一个值比较
all 和子查询返回的所有值比较

表结构操作语句

数据类型的定义
数据类型 描述 例子
VARCHAR2(L) 可变长度的字符串 VARCHAR2(20)
DATE 日期数据类型(日-月-年) DD-MM-YY
NUMBER(P,S) 数字,P为整数,S为小数 NUMBER(10,2)
BOOLEAN 布尔型 (可为NULL) TRUE FALSE
列约束

Not null(非空)
Unique(唯一)
Primary key(主键)-->这就是索引,所以需要非空且唯一
Foreign key(外键)-->两张表有关联,操作A表时需确认B表是否存在该值
Check(检查)

表约束

Unique(唯一)
Primary key(主键)-->这就是索引,所以需要非空且唯一
Foreign key(外键)
Check(检查)

增加列
删除列
修改表名
修改列名
删除表格

删除内容和定义,释放空间

查看表结构

数据操作语句(DML)

1. insert
  • 该语句一次只能插入一行到表中
  • 插入新的一行,每行都包含值
  • 按照表中列的默认顺序列出数值
  • 在INSERT子句中列出列是可选的
  • 将日期和字符数值放入单引号
    日期必须用TO_DATE()

隐式方法

显式方法

2. update
  • 使用WHERE子句,指定要修改的行
  • 不使用WHERE子句,表中所有的行都被修改
3. delete
  • 使用WHERE子句,指定要删除的行
  • 不使用WHERE子句,表中所有的行都被删除

事务操作语句

数据库事务:

对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求。

事务开始:

第一个DML 语句执行时

事务结束:

只有COMMIT之后所有的用户才可以都观察到事务的结果

SQL语句简单优化
  • 避免使用‘*’
  • 使用别名
  • WHERE子句从右向左执行,将可以大大缩小范围的放在右边
  • 避免使用NOT命令,或者<>
  • 使用“>=”代替“>”
  • 用TRUNCATE代替DELETE,不能够被恢复。速度快
  • 尽量多使用COMMIT
  • 避免在索引列上使用函数(这样消除了索引的作用)

自测题

  1. Oracle数据库分区表上的索引可以是分区索引,也可以是非分区索引。
  2. 当用户编译一条SQL语句时,进程会访问Oracle内存中的什么模块?
    共享池

ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库用户共享 你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的 执行路径. 这个功能大大地提高了SQL的执行性能并节省了内存的使用

  1. 使用RMAN对数据库执行恢复时,数据库应该处于什么状态?
    mount状态
  2. 如果需要查询数据库中的表数据,数据库需要处在什么状态?
    open状态
  • nomount:读参数文件,启动实例和后台进程
  • mount:打开控制文件
  • open:数据库打开
  1. 当Oracle内存管理模式为AMM(Auto Memory Management)时,下列哪些内存模块可以根据工作量自动调整大小?
    Large pool
    Shared pool

SGA_TARGET 指定了SGA可以使用的最大内存大小,而SGA中各个内存的大小由Oracle自行控制,不需要人为指定。Oracle 可以随时调节各个区域的大小,使之达到系统性能最佳状态的个最合理大小,并且控制他们之和在SGA_TARGET 指定的值之内。一旦给SGA_TARGET指定值后(默认为0,即没有启动ASMM),就自动启动了ASMM特性。如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。
设置了SGA_TARGET后,以下的SGA内存区就可以由ASMM来自动调整: ASMM只能自动调整5个内存池的大小,它们是:shared pool、buffer cache、large pool、java pool和stream pool。我们不再需要设置shared_pool_size、db_cache_size、large_pool_size、 java_pool_size、streams_pool_size这五个初始化参数。而其他的内存池,比如log buffer、keep buffer cache等仍然需要DBA手工进行调整。

相关文章

网友评论

      本文标题:【华为网络技术大赛】数据库基础原理

      本文链接:https://www.haomeiwen.com/subject/iodpkftx.html