画布 1
数据库
  数据类型
    Oracle
      字符串类型
        概念
          固定长度
            指虽然输入的字段值小于该字段的限制长度，但是实际存储数据时，会先自动向右补足空格后，才将字段值的内容存储到数据块中。这种方式虽然比较浪费空间，但是存储效率较可变长度类型要好。同时还能减少数据行迁移情况发生。
          可变长度
            指当输入的字段值小于该字段的限制长度时，直接将字段值的内容存储到数据块中，而不会补上空白，这样可以节省数据块空间。
        CHAR
          说明：CHAR字段最多可以存储2,000字节的信息。如果创建表时，不指定CHAR长度，则默认为1。另外你可以指定它存储字节或字符，例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节。
        NCHAR
          这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。另外查询时，如果字段是NCHAR类型，则需要如下书写：
SELECT translated_description FROM product_descriptions
WHERE translated_name = N'LCD Monitor 11/PM';
        VARCHAR2
          变长字符串，与CHAR类型不同，它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。
        NVARCHAR2
          这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。
      数字类型
        NUMBER
          NUMBER(P,S)是最常见的数字类型，可以存放数据范围为10^130~10^126（不包含此值)，需要1~22字节(BYTE)不等的存储空间。
P 是Precison的英文缩写，即精度缩写，表示有效数字的位数，最多不能超过38个有效数字。
S是Scale的英文缩写，可以使用的范围为-84~127。Scale为正数时，表示从小数点到最低有效数字的位数，它为负数时，表示从最大有效数字到小数点的位数。
        INTEGER
          INTEGER是NUMBER的子类型，它等同于NUMBER（38,0），用来存储整数。若插入、更新的数值有小数，则会被四舍五入。
        BINARY_FLOAT
          BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节，包括长度字节。
        BINARY_DOUBLE
          BINARY_DOUBLE 是为 64 位，双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节，包括长度字节。
        FLOAT
          FLOAT类型也是NUMBER的子类型。
Float(n),数 n 指示位的精度，可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度，请将 n 乘以 0.30103。要从十进制转换为二进制的精度，请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。
      日期类型
        DATE
          DATE是最常用的数据类型，日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息，但是日期数据类型具有特殊关联的属性。为每个日期值，Oracle 存储以下信息： 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
        TIMESTAMP
          这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同，因为TIMESTAMP可以包含小数秒，带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
        TIMESTAMP WITH TIME ZONE
          这是TIMESTAMP类型的变种，它包含了时区偏移量的值
        TIMESTAMP WITH LOCAL TIME ZONE
        INTERVAL YEAR TO MOTH
        INTERVAL DAY TO SECOND
      LOB类型
        CLOB
          它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符。
        NCLOB
          它存储UNICODE类型的数据，支持固定宽度和可变宽度的字符集，NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。
        BLOB
          它存储非结构化的二进制数据大对象，它可以被认为是没有字符集语义的比特流，一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。
        BFILE
          二进制文件，存储在数据库外的系统文件，只读的，数据库会将该文件当二进制文件处理。
      RAW & LONG RAW类型
        LONG
          它存储变长字符串，最多达2G的字符数据（2GB是指2千兆字节， 而不是2千兆字符），与VARCHAR2 或CHAR 类型一样，存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下：
1.一个表中只有一列可以为LONG型。(Why?有些不明白)
2.LONG列不能定义为主键或唯一约束，
3.不能建立索引
4.LONG数据不能指定正则表达式。
5.函数或存储过程不能接受LONG数据类型的参数。
6.LONG列不能出现在WHERE子句或完整性约束（除了可能会出现NULL和NOT NULL约束）
        LONG RAW
          能存储2GB 的原始二进制数据（不用进行字符集转换的数据）
        RAW
          用于存储二进制或字符类型数据，变长二进制数据类型，这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息
      ROWID & UROWID类型
        在数据库中的每一行都有一个地址。然而，一些表行的地址不是物理或永久的，或者不是ORACLE数据库生成的。
ORACLE使用通用的ROWID（UROWIDs）的存储地址的索引组织表和外表。索引组织表有逻辑urowids的，和国外表的外urowids，。UROWID这两种类型的存储在ROWID伪（堆组织的表的物理行id）。
  sql 函数
    聚合函数
      标量函数(Scalar)
      聚合函数(Aggregate)
      AVG()
      COUNT()
      FIRST()
      LAST()
      MAX()
      MIN()
      SUM()
    标量函数
      UCASE()
      LCASE()
      MID()
      SubString
      LEN()
      ROUND()
      NOW()
      FORMAT()
  sql 约束
    NOT NULL
    UNIQUE
    PRIMARY KEY
    FOREIGN KEY
    CHECK
    DEFAULT
  sql 语言
    DDL
      数据查询语言(DQL)
      数据控制语言(DCL)
      数据操作语言(DML)
      数据定义语言(DDL)
      事务处理语言(TPL)
      DATABASE
        创建数据库
        撤销数据库
      TABLE
        创建表
        撤销表
        撤销表
          添加列
          删除列
          修改列
        根据已有的表创建新表
        添加主键
        删除主键
      INDEX
        创建索引
        撤销索引
      VIEW
        创建视图
        撤销视图
    DML
      INSERT
      DELETE
      UPDATE
    DQL
      查询过滤条件
      SELECT
      WHERE
        AND & OR
        BETWEEN
        IN
        LIKE
          通配符
            %
            _
            [charlist]
            [^charlist]或[!charlist]
      ORDER BY
        ASC
        DESC
      GROUP BY
        HAVING
      JOIN
        INNER JOIN
        LEFT JOIN
        RIGHT JOIN
        FULL JOIN
      UNION
    DCL
      GRANT
      REVOKE
    TCL
      BEGIN TRANSACTION
      COMMIT
      ROLLBACK
  概念
    定义
      SQL的全称是结构化查询语言(Structured Query Language)，它是一种特殊目的的编程语言，是一种数据库查询和程序设计语言，用于存取数据以及查询、更新和管理关系数据库系统；同时也是数据库脚本文件的扩展名
    语言的分类
      数据定义语言（DDL）
      数据查询语言（DQL）
      数据操作语言（DML）
      数据控制语言（DCL）
      事务控制语言（TCL）
    数据库分类
      关系型
        Sql Server
        Mysql
        Oracle
      非关系型
        Memcached
        Redis
        HBase
        MongoDB
    数据库模式
      物理模式
      逻辑模式
      子模式
    关系模型
      关系数据结构
      关系操作集合
        关系代数
        关系演算
      关系完整性约束
        实体完整性
          实体完整性规则是：关系的主码不能取空值。
        参照完整性
          参照完整性规则是：外码必须是另一个表中主码的有效值，或者是“空值”。
        用户定义完整性
    E-R图
    视图
    事务
  Level1
    Level2
      Level3
        Level4
          Level5
          Level5
聚合（Aggregate）函数计算从列中取得的值，返回一个单一的值。
返回平均值
返回行数
返回第一个记录的值
返回最后一个记录的值
返回最大值
返回最小值
返回总和
标量（Scalar）函数基于输入值，返回一个单一的值。
将某个字段转换为大写
将某个字段转换为小写
从某个文本字段提取字符，MySql 中使用
从某个文本字段提取字符
返回某个文本字段的长度
对某个数值字段进行指定小数位数的四舍五入
返回当前的系统日期和时间
格式化某个字段的显示方式
约束（Constraints）用于规定表中的数据规则。
如果存在违反约束的数据行为，行为会被约束终止。
约束可以在创建表时规定（通过 CREATE TABLE 语句），或者表创建之后规定（通过 ALTER TABLE 语句）。
DDL 全称 Data Definition Language，即数据定义语言。
CREATE DATABASE database_name;
DROP DATABASE database_name;
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
DROP TABLE table_name;
撤销表
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
CREATE INDEX index_name
ON table_name (column_name)
Oracle 方法：
DROP INDEX index_name
Mysql 方法：
ALTER TABLE table_name DROP INDEX index_name
视图是基于 SQL 语句的结果集的可视化的表。
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
DROP VIEW view_name;
DML 全称 Data Manipulation Language，即数据操纵语言。
向表中插入新记录
删除表中的记录
更新表中的记录
DQL 全称 Data Query Language，即数据查询语言。
用于过滤查询条件
AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
IN 操作符允许您在 WHERE 子句中规定多个值。
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
通配符可用于替代字符串中的任何其他字符。
在 SQL 中，通配符与 SQL LIKE 操作符一起使用。
替代 0 个或多个字符
替代一个字符
字符列中的任何单一字符
不在字符列中的任何单一字符
ORDER BY 关键字用于对结果集进行排序。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
GROUP BY 语句用于结合聚合函数，根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
在 SQL 中增加 HAVING 子句原因是，WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
JOIN 子句用于把来自两个或多个表的行结合起来，基于这些表之间的共同字段。
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
语法：
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
LEFT JOIN 关键字从左表（table1）返回所有的行，即使右表（table2）中没有匹配。如果右表中没有匹配，则结果为 NULL。
语法：
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
RIGHT JOIN 关键字从右表（table2）返回所有的行，即使左表（table1）中没有匹配。如果左表中没有匹配，则结果为 NULL。
语法：
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
FULL OUTER JOIN 关键字只要左表（table1）和右表（table2）其中一个表中存在匹配，则返回行。
语法：
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意，UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时，每个 SELECT 语句中的列的顺序必须相同。