• DMSQL学习笔记


    DMSQL学习

    1、SQL分类

    • DML(Data Mannipulation Language)数据操纵语言:

      查询、操纵数据表资料行,包含: SELECT、 INSERT、 DELETE、 UPDATE、 MERGE

    • DDL(Data Definition Language)数据定义语言:

      建立、修改、删除数据库中数据表对象,包含: CREATE、 ALTER、 DROP、 TRUNCATE、COMMENT;

    • DCL(Data Control Language)数据控制语言:

      用于执行权限授予与收回操作,包含: GRANT、 REVOKE

    • TCL(Transactional Control Language)事物控制语言:

      维护数据的一致性,包含: COMMIT、 ROLLBACK、 SAVEPOINT。

    2、用户

    • 用户(user):用来连接数据库访问数据库

    • 模式(schema):模式对象是数据库数据的逻辑结构

    关系:模式跟用户在oracle 是一对一的关系, 一个用户可以对应多个模式,dm也是一对多

    • 模式规则:
      • 在同一模式下不能存在同名对象,但在不同模式中的对象名称可以相同
      • 新建表时候,可以指定表空间。如果不指定,则默认保存到MAIN
      • 用户可以直接访问其他模式对象,但如果要要访问其他模式对象,则必须具有对象权限
      • 当用户要访问其他模式对象时,必须附加模式名作后缀(schema.table)

    3、数据操作

    3.1 DELETE 和 TRUNCATE 的区别

    (1) TRUNCATE 是 DDL 语句, 不会产生 redo 和 undo,所以删除效率很快, 不支持回滚;
    DELETE 是 DML 语句, 会产生 redo 和 undo, delete 删除大表效率很低, 支持回滚。
    (2) delete 可以加条件、 TRUNCATE 只能整表删除;
    (3) TRUNCATE 可以立即释放空间, 清理表的水位线, delete 不立即释放空间。
    (4) delete 支持闪回查询(UNDO_RETENTION 指定回滚段的保留时长), truncate 不支持。

    3.2 DISTINCT、UNION、Order by
    • DISTINCT

      达梦的 distinct 只去重不排序, oracle 的 distinct 即去重也排序。

    • UNION

      达梦 union 只去重不排序, oracle 的 union 即去重也排序。

    • Order by 子句排序

      达梦 null 默认排在最前面, oracle 默认排在最后面

    //练习

    select b.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) empnum
    from dmhr.employee a, dmhr.department b
    where a.DEPARTMENT_ID = b.DEPARTMENT_ID
    group by b.DEPARTMENT_ID, b.DEPARTMENT_NAME
    having count(a.employee_id) > 20
    order by empnum desc;

    3、多表连接

    3.1 内连接
    • 内连接只返回满足连接条件的数据

    • 内连接的语法:

      SELECT table.column,table2.column

      FROM table1

      [CROSS JOIN table2] |

      [NATURAL JOIN table2] |

      [JOIN table2 USING(column_name)] |

      [JOIN table2 ON(table1.column_name=table2.column_name)];

      //练习1

      select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, DEPARTMENT_ID,
      b.DEPARTMENT_NAME
      from dmhr.employee a
      join dmhr.department b using(DEPARTMENT_ID);

      //练习2

      select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.DEPARTMENT_ID,
      b.DEPARTMENT_NAME
      from dmhr.employee a join dmhr.department b
      on a.DEPARTMENT_ID = b.DEPARTMENT_ID;

    3.2 外连接
    • 左(右)外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表汇总不满足条件的行,这种连接称为左(或右)外连接。

    • 全外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,这种连接称为全外连接。

    • 外连接的语法:

      SELECT table1.column,table2.column

      FROM table1

      [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name=table2.column_name)];

      //练习1

      select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.DEPARTMENT_ID,
      b.DEPARTMENT_NAME
      from dmhr.employee a left join dmhr.department b
      on a.DEPARTMENT_ID = b.DEPARTMENT_ID;

      //练习2

      select b.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) empnum
      from dmhr.employee a left join dmhr.department b
      on a.DEPARTMENT_ID = b.DEPARTMENT_ID
      group by b.DEPARTMENT_ID, b.DEPARTMENT_NAME;

      //练习3

      select b.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) empnum
      from dmhr.employee a right join dmhr.department b
      on a.DEPARTMENT_ID = b.DEPARTMENT_ID
      group by b.DEPARTMENT_ID, b.DEPARTMENT_NAME;

      //练习4

      select b.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) empnum
      from dmhr.employee a full join dmhr.department b
      on a.DEPARTMENT_ID = b.DEPARTMENT_ID
      group by b.DEPARTMENT_ID, b.DEPARTMENT_NAME;

    3.3 交叉连接

    CROSS JOIN 子句可以生成两个表的交叉乘积,这与两个表之间的笛卡尔乘积是相同的。

    例:

    SELECT *

    FROM DMHR.EMPLOYEE T1

    CROSS JOIN DMHR.DEPARATMENT T2;

    3.4 自然连接

    NATURE JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接,在表中查询满足等值条件的数据,如果只是列名相同而数据类型不同,则会产生错误。

    //练习

    select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, DEPARTMENT_ID,
    b.DEPARTMENT_NAME
    from dmhr.employee a
    natural join dmhr.department b;

    JOIN 类型之间的差异

    • JOIN:如果表中有至少一个匹配,则返回行
    • LEFT JION:即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN:只要其中一个表中存在匹配,就返回行

    4、DM8常用的查询语句

    • 查询数据库版本

      select in_code();

    • 查询授权信息

      select * from v$license;

    • 查询服务器信息

      select * from v$SYSTEMINFO;

    • 查询会话连接信息

      select * from v$sessions;

      select count(*),state from v$sessions group by state;

      select count(*),clnt_ip from v$sessions group by clnt_ip;

    • 查看数据库服务器配置参数

      select * from v$dm_ini;

    • 查询最近的 sql执行记录

      select * from v$sql_history;

    • 查询某个用户下所有的表

      select * from user_tables;

    • dba用户查询某个模式下的所有表

      select * from all_tables where owner=’TEST’;

    • 查询某个用户下的所有表字段

      select * from all_tab_cols where owner=’TEST’;

    • 查看表注释

      select * from ALL_TAB_COMMENTS where owner=’TEST’;

    • 查看字段注释

      select * from ALL_COL_COMMENTS where owner=’TEST’;

    后面继续学习补充====

    https://eco.dameng.com

  • 相关阅读:
    impala学习总结
    django——ORM常用查询总结
    Qt优秀开源项目之十三:QScintilla
    【综合类型第 38 篇】如何查看、安装最新版本、旧版本的 Cocoapods
    (附源码)ssm学生管理系统 毕业设计 141543
    高防CDN怎样保护网站安全的
    linux安装Redis
    登陆认证&权限控制(2)—— 基于Spring security 安全框架的权限管理 & 注解式权限控制 & RABC模型
    110.网络安全渗透测试—[权限提升篇8]—[Windows SqlServer xp_cmdshell存储过程提权]
    java基于Springboot+Vue的高校生活服务平台 element 前后端分离
  • 原文地址:https://blog.csdn.net/qq_44619675/article/details/126577884