画布 1
SQL基础
  DQL
    Query 数据查询语言
    SELECT（查询）
      SELECT 字段 FROM 表名
      子主题 2
  DDL
    Definition 数据定义语言
    CREATE（创建表）
      CREATE TABLE 表名 （字段 数据类型）
      CREATE TABLE 表名 AS SQL语句（查询的表）
    DROP（删除表）
      DROP TABLE 表名
    ALTER（修改表）
      ALTER TABLE 表名 ADD 字段名 数据类型
        添加列
      ALTER TABLE 表名 MODIFY 字段名 数据类型
        修改列的数据类型（只能修改空列）
      ALTER TABLE 表名 RENAME 表名 TO 新表名
        修改表名
      ALTER TABLE 表名 RENAME COLUMN 字段名 TO 新字段名
        修改列名
      ALTER TABLE 表名 DROP COLUMN 字段名
        删除列
  DML
    Manipulation 数据操纵语言
    INSERT（插入数据）
      INSERAT INTO 表名 VALUES(所有字段的值)
        全插入
      INSERT INTO 表名 (字段1，字段2，……) VALUES(值1，值2，……)
        指定字段插入
      INSERT INTO 表名 SQL查询结果
        查询插入
      INSERT INTO 表名 （字段1，字段2，……） SQL查询结果
        指定字段查询插入
    DELETE（删除数据）
      DELETE FROM 表名
        删除全表数据
      DELETE FROM 表名 WHERE 条件
        按条件删除数据
    UPDATE（修改/更新数据）
      UPDATE 表名 SET 字段1 = 值1，字段2 = 值2，……
        普通更新
      UPDATE 表名 SET 字段1 = 值1 ，字段2 = 值2 WHERE 条件
        按条件更新
      在plSQL上进行操作修改
  DCL
    Control 数据控制语言
    GRANT（授权）
    REVOKE（撤销）
  TCL
    Transaction Control 事务控制语言
    COMMIT（提交）
    ROWBACK（回滚）
  基础知识
    注释
    起别名
    运算符
      逻辑运算符
        AND
        OR
        NOT
      算数运算符
      关系运算符
    数据类型
      NUMBER（38,2）
      VARCHAR2
      DATE
    NULL
      NVL（值，替换NULL的值）
      NVL2（值，替换不为NULL的值，替换NULL的值）
    LIKE 模糊查询
      占位符
        % 多个位置
        _ 单个位置
        转义
          escape ‘关键字'
  函数
    聚合函数
      AVG（）平均值
      SUM（）求和
      MAX（）最大值
      MIN（）最小值
      CPUNT（）计数
    分析函数
      开窗函数
        OVER（）
          与聚合函数的差别
          PARTITION BY 分组
          ORDER BY 累加
        排序的分析函数
          ROW_NUMBER（）
            顺序记录
          RANK（）
            遇到相同的，排名一致，会跳过下面排名
          DENSE_RANK（）
            遇到相同的，排名一致，不会跳过，总数会减少
    字符函数
      ASCII（X）
      CONCAT（X,Y）
      INSTR（）
      LENGTH（X）
      LOWER（X）
      UPPER（X）
      LTRIM（）
      RTRIM（）
      TRIM（）
    数字函数
      ABS（X）
      MOD（X,Y）
      POWER（X,Y）
      ROUND（）
      TRUNC（）
    日期函数
      SYSDATE
      ADD_MONTHS（d,n）
      LAST_DAY（d）
      ROUND（d[,fmt]）
      TRUNC（d[,fmt]）
    转换函数
      TO_CHAR（d[,fmt]）
      TO_DATE（str[,fmt]）
      TO_NUMBER（STR）
  常用
    IN（值1，值2，……）
    BETWEEN 值1 AND 值2
    WHERE
    GROUP BY
    ORDER BY
    CASE WHEN
    NVL2（列,返回值1,返回值2）
    NVL（列,默认值）
  表连接
    INDER JOIN 内连接
    LEFT JOIN 左外连接
    RIGHT JOIN 右外连接
    FULL JOIN 全外连接
--创建EMP3表，表中内容为EMP表中内容
CREATE TABLE EMP3 AS SELECT * FROM EMP;
--创建EMP4表，表中内容为EMP中工资大于2000的员工信息
CREATE TABLE EMP4 AS SELECT * FROM EMP WHERE SAL > 2000;
--创建EMP5表，表中字段与EMP表中一致
CREATE TABLE EMP5 AS SELECT * FROM EMP WHERE 1!=1
--给EMP3表添加一列，列名为 DNAME 类型为VARCHA2
ALTER TABLE EMP3 ADD DNAME VARCHAR2(30)
--修改EMP3表中DNAME列的数据类型为NUMBER（3）
ALTER TABLE EMP3 MODIFY DNAME NUMBER(3)
--修改EMP3中的DNAME名为DEPT_NAME
ALTER TABLE EMP3 RENAME COLUMN DNAME TO DEPT_NAME
--删除EMP3中列DEPT_NAME
ALTER TABLE EMP3 DROP COLUMN DEPT_NAME
--修改EMP3为EMP3_1
ALTER TABLE EMP3 RENAME TO EMP3_1
--向EMP5中添加数据（全添加）
INSERT INTO EMP5
VALUES
(1, '张三', '打工人', 9527, TO_DATE(2021, 'YYYY'), 9999, 1000, 77);
COMMIT;
--向emp5表中插入 scott的数据
INSERT INTO EMP5 SELECT * FROM EMP WHERE ENAME = 'SCOTT';
--向EMP5表中插入EMP表中的姓名，工资
INSERT INTO EMP5 (ENAME,SAL) SELECT ENAME,SAL FROM EMP
--修改EMP4中员工的奖金为100
UPDATE EMP4 SET COMM = 100
--修改EMP4中7566的奖金为空
UPDATE EMP4 SET COMM = NULL WHERE EMPNO = 7566
--把EMP4中所有员工的奖金加1000
UPDATE EMP4 SET COMM = NVL(COMM,0)+1000 WHERE DEPTNO = 20
UPDATE EMP4 SET COMM = NVL2(COMM,COMM,0)-1000
--把EMP4表中工资小于3000员工奖学+1000
UPDATE EMP4 SET COMM = NVL(COMM,0)+1000 WHERE SAL<3000
各种数据类型的不同特点：
字符型可以进行拼接
数字型可以进行算术运算
日期型也能进行算术运算，但是只能日期减日期，或者日期加减数字
各种数据类型比较大小方式：
字符型比较逐位字符的ASC码的大小
数字型比较数值的大小
日期型也是直接比较大小，越早的时间越小；
--在每一行的数据后面新增一列，这一列的数据为 开窗/函数 结果
--开窗大小取决于表行数多少
--子查询使用时需要取别名调用
--开窗分组 OVER（PARTTION BY ）
--开窗函数只能够使用子查询进行过滤，不能在where后面使用
--分析函数与聚合函数
1.使用聚合函数有诸多限制，分析函数几乎没有限制
2.聚合函数分组使用 group by，分析函数用 partition by
3.聚合函数返回单行数据，分析函数返回多行数（每一行）
4.聚合函数可以当做删选条件（having），分析不能，必须使用子查询起别名使用
5.聚合函数 order by只有排序功能，分析函数中有累加功能
--分析函数使用 order by
1.不仅仅有排序功能，还有累加功能
2.通过字段排序，累加结果可能不同
3.当题目中有累计时，慎用order by 导致结果出错
4.分析函数中的 order by 不会影响主查询的 order by