达梦数据库数据管理——查询
单表查询
语法结构
单表查询
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;
多条件查询
使用逻辑运算符NOT、OR、AND
列运算查询
查询数值型的列,可以使用运算符+、-、*、/
函数查询
求最大值、最小值函数
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 语句)
WHERE、HAVING子句:
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)
- 评估数据库服务器所需的软、硬件运行环境
- 安装和升级DM服务器
- 设计数据库结构
- 监控和优化数据库的性能
- 计划和测试
- 备份与故障恢复
数据库安全员(SSO)
- 应用场景:对数据安全性要求高,DBA一人无法满足企业的实际需求,就会增加数据库安全员和数据库审计员
- 数据库安全员可以创建其他数据库安全员
- 作用:
- 制定安全机制,定义安全级别、范围和组等安全标记,用安全标记应用到主体(用户)和客体(各种数据库对象,如表、索引等)
- 创建和删除新的安全用户,向这些用户授予或者收回与安全相关的权限
- 安全员不能对数据进行增、删、改、查,也不能执行普通的DDL操作如创建表、视图等
数据库审计员(AUDITOR)
- 设计审计策略
- 创建和删除数据库审计员
- 设置/取消对数据库对象和操作的审计设置,及时找到DBA或者其他用户的非法操作
- 查看和分析审计记录
创建用户
create user "用户名" identified by "密码" password_policy 0;
修改用户
alter user "用户名" 修改的属性和属性值;
删除用户
drop user "用户名";
权限管理
授权
grant 权限名 to "被授权用户";
取消授权
revoke 权限名 from "被取消授权用户";
角色管理
创建角色
create role "角色名称";
修改角色
其实就是修改权限,与授权管理相同
删除角色
drop role "角色名称";