达梦中级部分笔记(自用)

达梦数据库数据管理——查询

单表查询

语法结构

单表查询

SELECT <选择列表>
FROM[<模式名>.]<基表名>|<视图名>[<相关名>]
[<WHERE子句>]
[<CONNECT BY子句>]
[<GROUP BY子句>]
[<HAVING 子句>]
[<ORDER BY子句>];

简单查询

SELECT <选择列表>
FROM[<模式名>.]<基表名>|<视图名>[<相关名>]
或者
SELECT *
FROM[<模式名>.]<基表名>|<视图名>[<相关名>]

条件查询

SELECT <选择列表>
FROM[<模式名>.]<基表名>|<视图名>[<相关名>]
WHERE 子句;

WHERE子句的形式为:列名+运算符+

字符串匹配查询

列名称 [NOT] LIKE 匹配字符串
或者
列名称 [NOT] LIKE 匹配字符串 ESCAPE 换码字符

查询非空数据

列名称 IS [NOT] NULL;

多条件查询

使用逻辑运算符NOTORAND

列运算查询

查询数值型的列,可以使用运算符+-*/

函数查询

求最大值、最小值函数
MAX([DISTINCT|ALL] column);MIN([DISTINCT|ALL] column);
求记录数量函数
COUNT({
   
   *|[DISTINCT | ALL] column})
求和函数
SUM([DISTINCT|ALL] column)
求平均值函数
AVG({
   
   *|[DISTINCT | ALL] column})

别名查询

原名 as 别名

示例

简单查询示例:

从员工表employee中查询所有员工的姓名employee_name、邮箱email、电话号码phone_num、入职日期hire_date、工资salary数据。

SELECT employee_name, email, phone_num, hire_date, salary
FROM employee;
或者
SELECT employee_name, email, phone_num, hire_date, salary
FROM DMHR.employee;

简单查询示例:

从员工表employee中查询所有员工信息数据。

SELECT *
FROM employee;
或者
SELECT *
FROM DMHR.employee;

条件查询示例:

查询职务为总经理(job_id=11),总经理助理(job_id=12),秘书(job_id=13),查询语句如下:

SELECT employee_name, email, phone_num, hire_date, salary
FROM employee
WHERE job_id IN('11','12','13');

字符串匹配查询示例

查询姓刘的员工信息,查询语句如下:
SELECT employee_name, email, phone_num, hire_date, salary
FROM employee
WHERE employee_name LIKE '刘%';


从课程表KCB中查询课程代码KCM以DB_开头,且倒数第2个字符为g的课程的所有数据,查询语句如下:
SELECT * FROM KCB
WHERE KCM LIKE 'DB\_%g_' ESCAPE '\';

查询非空数据示例:

查询电话号码为空的,查询语句为:
SELECT employee_name, email, phone_num, hire_date, salary
FROM employee
WHERE phone_num is NULL;

多条件查询示例:

查询职务为总经理助理(job_id=12)且工资在5000元至10000元的员工信息,查询语句如下:
SELECT employee_name, email, phone_num, hire_date, salary
FROM employee
WHERE job_id='12' AND salary BETWEEN 5000 AND 10000;

列运算查询示例:

单位计划给员工涨工资10%,查询涨工资之后的信息,查询语句如下:
SELECT employee_name, email, phone_num, hire_date, salary*1.1
FROM employee;

函数查询示例

求最大值、最小值函数
查询单位里最高工资是多少,查询语句如下:
SELECT MAX(salary)
FROM employee;
求记录数量函数
查询员工姓名长度为3的员工信息,查询语句如下:
SELECT employee_name, email, phone_num, hire_date, salary*1.1
FROM employee
WHERE LENGTH(employee_name)=3;
求和函数
统计每个月单位需要发的薪水总额是多少。查询语句如下:
SELECT SUM(salary)
FROM employee;

连接查询

语法结构

笛卡尔成绩查询

SELECT T1.*, T2.*
FROM student T1, subject T2;

内连接查询

SELECT 列名称 FROM 表名 INNER JOIN 连接表名 ON[连接条件]...

连接条件的格式为:
表名1.列名1 = 表名2.列名2

外连接

SELECT 列名称 FROM 表名 [LEFT|RIGHT|FULL] OUTER JOIN 连接表名 ON [连接条件]...

分组排序

排序子句

SELECT 列名称 FROM 表名称 ORDER BY 列名称 [ASC|DESC][NULLS FIRST|LAST],{列名称 [ASC|DESC][NULL FIRST|LAST]}

//升序(ASC)或降序(DESC)排序,默认为ASC

分组GROUP BY子句

SELECT 列名称 FROM 表名称 GROUP BY 列名称;

HAVING 子句

SELECT <选择列表>
FROM [<模式名>.]<基表名>|<视图名>[<相关名>]
<HAVING 子句> ::= HAVING <搜索条件>
<搜索条件>::=<表达式>

TOP子句

SELECT TOP number|percent <列名> FROM 表名;

子查询

FROM子句:
SELECT 列名称 FROM (SELECT 语句)

WHEREHAVING子句:
SELECT 列名称 FROM 表名称 WHERE[HAVING] <列名称> <运算符> (SELECT 语句)

数据新增

INSERT INTO <目标表名> [(<列名> {
   
   ,<列名>})]
SELECT <列名> {
   
   ,<列名>} FROM 源数据表名 [WHERE 条件]

数据修改

UPDATE <表名>
SET <列名> = <值表达式> | DEFAULT> {
   
   ,<列名> = <值表达式>|DEFAULT> }
[WHERE <条件表达式>];

数据删除

DELETE FROM <表名> [WHERE <条件表达式>]

示例

查询员工信息,要求打印员工所属的部门名称。条件:员工信息表employee中存放部门编号(department_id)部门信息表department中存放了部门编号(department_id)和部门名称(department_name)查询语句如下:

SELECT T2.department_name, T1.employee_name, T1.email, T1.phone_num, T1.hire_date, T1.salaryFROM employee T1 INNER JOIN department T2 ON T1.department_id = T2.department_id;

分组查询使用左连接,查询所有岗位的员工信息。查询语句如下:

SELECT T2.job_id, T2.job_title, T1.employee_name, T1.email, T1.phone_num, T1.hire_date, T1.salaryFROM job T2LEFT OUTER JOIN employee T1 ON T1.job_id = T2.job_id;SELECT T2.job_id, T2.job_title, T1.employee_name, T1.email, T1.phone_num, T1.hire_date, T1.salaryFROM job T2, employee T1 WHERET2.job_id=T1.job_id(+);

按工资的降序排列员工信息,查询语句如下:

SELECT employee_name, email, phone_num, hire_date, salaryFROM employeeORDER BY salary DESC;

从员工表中,统计各部门员工的数量,查询语句如下:

SELECT b.department_name, count(a.employee_name)FROM department b, employee aWHERE a.department_id = b.department_idGROUP BY b.department_name;

从员工表中查询员工数量小于100的部分,查询语句如下:

SELECT b.department_name, COUNT(a.employee_name) as slFROM employee a, department bWHERE a.department_id = b.department_idGROUP BY department_nameHAVING COUNT(a.employee_name)<100;

查询员工表中前10条记录,查询语句如下:

SELECT TOP 10 *FROM employee;

查询有员工工资超过2000元的部门,查询语句如下:

SELECT * FROM departmentWHERE department_id IN(SELECT department_id FROM employee WHERE salary > 20000);

查询总经理岗位(JOB_id=’11’)中工资比项目经理岗位(JOB_id=’32’)工资都高的员工信息,查询语句如下:

SELECT * FROM employeeWHERE job_id = '11' AND salary > ALL(SELECT salary FROM employee WHERE job_id='32');

查询有员工工资超过2000元的部分门查询语句如下:

SELECT * FROM department T1WHERE EXISTS(SELECT * FROM employee T2 WHERE T2.salary > 20000 AND T1.department_id = T2.department_id);

有一张新表“老员工表oldemployee”,表字段有员工编号(employee_id)、所属部门(department_name)、入职日期(hire_date)、工资(salary),要求将入职日期早与2019-01-01的员工数据插入该表中。语句如下:

INSERT INTO oldemployee(employee_id, department_name, hire_date, salary)SELECT a.employee_id, b.department_name, a.hire_date, a.salaryFROM employee a, department bWHERE a.department_id = b.department_id AND a.hire_date <TO_DATE('2019-01-01', 'YYYY-MM-DD');

单位给所有的员工涨薪10%,请更新员工信息表。语句如下:

UPDATE employee SET salary = salary * 1.1;

删除“大数据事业部”的部门信息。语句如下:

DELETE FROM department WHERE department_name='大数据事业部';

达梦数据库安全管理

用户管理

初始用户

数据库管理员(DBA)

  1. 评估数据库服务器所需的软、硬件运行环境
  2. 安装和升级DM服务器
  3. 设计数据库结构
  4. 监控和优化数据库的性能
  5. 计划和测试
  6. 备份与故障恢复

数据库安全员(SSO)

  1. 应用场景:对数据安全性要求高,DBA一人无法满足企业的实际需求,就会增加数据库安全员和数据库审计员
  2. 数据库安全员可以创建其他数据库安全员
  3. 作用:
    1. 制定安全机制,定义安全级别、范围和组等安全标记,用安全标记应用到主体(用户)和客体(各种数据库对象,如表、索引等)
    2. 创建和删除新的安全用户,向这些用户授予或者收回与安全相关的权限
  4. 安全员不能对数据进行增、删、改、查,也不能执行普通的DDL操作如创建表、视图等

数据库审计员(AUDITOR)

  1. 设计审计策略
  2. 创建和删除数据库审计员
  3. 设置/取消对数据库对象和操作的审计设置,及时找到DBA或者其他用户的非法操作
  4. 查看和分析审计记录

创建用户

create user "用户名" identified by "密码" password_policy 0;

修改用户

alter user "用户名" 修改的属性和属性值;

删除用户

drop user "用户名";

权限管理

授权

grant 权限名 to "被授权用户";

取消授权

revoke  权限名 from "被取消授权用户";

角色管理

创建角色

create role "角色名称";

修改角色

其实就是修改权限,与授权管理相同

删除角色

drop role "角色名称";

猜你喜欢

转载自blog.csdn.net/weixin_63571132/article/details/127037601