景德镇市网站建设_网站建设公司_改版升级_seo优化
2025/12/22 11:25:12 网站建设 项目流程

一、基础查询核心语法与实操(含示例)

(一)核心查询语句结构

达梦数据库查询语法兼容标准 SQL,基础结构为:

SELECT [DISTINCT] 字段1, 字段2, ... -- 去重关键字DISTINCT可选

FROM 表名 [别名]

[WHERE 筛选条件]

[GROUP BY 分组字段 [HAVING 分组筛选条件]]

[ORDER BY 排序字段 [ASC/DESC]]

[LIMIT 分页参数]; -- 限制返回结果条数

(二)常用查询场景示例

  1. 全量查询:查询员工表所有字段

SELECT * FROM emp; -- *表示所有字段,适用于快速查看表数据

  1. 条件筛选查询:查询薪资 > 5000 且部门 ID=3 的员工姓名、薪资

SELECT name, salary FROM emp WHERE salary > 5000 AND dept_id = 3;

  1. 排序查询:按入职日期降序查询部门 2 的员工信息

SELECT * FROM emp WHERE dept_id = 2 ORDER BY entrydate DESC;

  1. 分组聚合查询:按部门分组统计员工人数及平均薪资

SELECT dept_id, COUNT(id) AS emp_count, AVG(salary) AS avg_salary

FROM emp

GROUP BY dept_id

HAVING COUNT(id) > 5; -- 筛选员工数大于5的部门

  1. 分页查询:查询第 2 页数据(每页 10 条)

SELECT * FROM emp ORDER BY id LIMIT 10 OFFSET 10; -- OFFSET表示跳过前10条

二、高级查询技术(含多表关联与子查询)

(一)多表连接查询

达梦支持内连接、外连接、自连接等,适配复杂数据关联场景:

  1. 内连接(交集查询):查询员工与对应部门信息

-- 显式内连接

SELECT e.name AS emp_name, d.name AS dept_name

FROM emp e INNER JOIN dept d

ON e.dept_id = d.id; -- ON指定连接条件,表别名简化语法

  1. 左外连接(左表全量保留):查询所有员工及关联部门(无部门也显示)

SELECT e.*, d.name FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;

  1. 自连接(同表关联):查询员工及其直属领导姓名

SELECT a.name AS 员工, b.name AS 领导

FROM emp a LEFT JOIN emp b

ON a.managerid = b.id;

(二)子查询进阶应用

  1. 标量子查询(返回单个值):查询薪资高于平均薪资的员工

SELECT name, salary FROM emp WHERE salary > (SELECT AVG(salary) FROM emp);

  1. 表子查询(返回多行多列):查询部门 3 中业绩 Top3 的员工

SELECT * FROM emp

WHERE (dept_id, salary) IN (

SELECT dept_id, salary FROM emp WHERE dept_id = 3 ORDER BY salary DESC LIMIT 3

);

  1. 子查询推入优化:达梦支持将主查询过滤条件推入子查询,提升效率

-- 优化后:子查询提前过滤部门ID,减少数据处理量

SELECT * FROM emp

WHERE dept_id IN (SELECT id FROM dept WHERE name LIKE '技术%');

三、查询工具操作指南(图形化 + 命令行)

(一)DM 管理工具图形化查询

  1. 连接数据库后,右键目标表→「浏览数据」,默认显示 100 条数据;
  1. 筛选数据:在下方筛选框选择字段→设置比较符(等于、大于等)→输入条件→点击「筛选」按钮;
  1. 自定义查询:点击「新建查询」→输入 SQL 语句→点击「执行」,结果实时展示,支持导出 Excel。

(二)命令行查询操作

  1. 登录数据库:dmmgr -U用户名/-P密码@数据库实例名(如dmmgr -Uscott/-Tiger@mydmdb);
  1. 执行查询:直接输入 SQL 语句,结尾加;回车执行,例如:

SELECT name, salary FROM emp WHERE dept_id = 1;

  1. 查看历史查询:通过VSQL_HISTORY视图查询执行过的 SQL,便于故障排查:

SELECT * FROM VSQL_HISTORY WHERE EXEC_TIME > 1000; -- 查询执行时间超1秒的SQL

四、查询优化核心技巧

(一)索引优化

  1. 为查询频繁的字段创建索引,例如:CREATE INDEX idx_emp_dept ON emp(dept_id);;
  1. 单值查询优先使用唯一索引,达梦会通过 SSEK 操作符实现索引唯一扫描;
  1. 复合索引遵循 “最左前缀原则”,查询条件匹配索引前缀字段时生效。

(二)执行计划优化

  1. 查看执行计划:在 SQL 前加EXPLAIN,分析查询瓶颈,例如:

EXPLAIN SELECT * FROM emp WHERE salary > 8000;

  1. 优化方向:避免SELECT *、减少JOIN表数量、用IN替代OR、合理使用 HINT 调整执行计划。

(三)AI 智能优化

达梦启云平台支持 AI 驱动的 SQL 优化,通过自然语言描述需求即可生成最优 SQL,还能自动调优参数,比人工调优性能提升 5% 左右。

五、常见查询故障排查

(一)结果集异常

  1. 定位问题 SQL:通过应用日志、VSQL_HISTORY视图提取执行语句;
  1. 排查方法:验证 SQL 语法、绑定参数一致性,裁剪 SQL 语句定位出错片段,通过修改 HINT 或改写语句调整执行计划。

(二)查询超时

  1. 原因:无索引、数据量过大、JOIN 逻辑复杂;
  1. 解决:添加索引、分页查询、优化 JOIN 顺序,通过SET LONG_QUERY_TIME调整超时阈值。

(三)进程异常

  1. 查看数据库日志,定位异常 SQL;
  1. 终止慢查询:通过SP_KILL_SESSION(会话ID)终止阻塞进程。

核心查询语句结构

达梦数据库查询语法兼容标准 SQL,基础结构如下:

SELECT [DISTINCT] 字段1, 字段2, ... -- 去重关键字DISTINCT可选 FROM 表名 [别名] [WHERE 筛选条件] [GROUP BY 分组字段 [HAVING 分组筛选条件]] [ORDER BY 排序字段 [ASC/DESC]] [LIMIT 分页参数]; -- 限制返回结果条数

常用查询场景示例

全量查询:查询员工表所有字段

SELECT * FROM emp; -- *表示所有字段,适用于快速查看表数据

条件筛选查询:查询薪资 > 5000 且部门 ID=3 的员工姓名、薪资

SELECT name, salary FROM emp WHERE salary > 5000 AND dept_id = 3;

排序查询:按入职日期降序查询部门 2 的员工信息

SELECT * FROM emp WHERE dept_id = 2 ORDER BY entrydate DESC;

分组聚合查询:按部门分组统计员工人数及平均薪资

SELECT dept_id, COUNT(id) AS emp_count, AVG(salary) AS avg_salary FROM emp GROUP BY dept_id HAVING COUNT(id) > 5; -- 筛选员工数大于5的部门

分页查询:查询第 2 页数据(每页 10 条)

SELECT * FROM emp ORDER BY id LIMIT 10 OFFSET 10; -- OFFSET表示跳过前10条

多表连接查询

达梦支持内连接、外连接、自连接等,适配复杂数据关联场景。

内连接(交集查询):查询员工与对应部门信息

SELECT e.name AS emp_name, d.name AS dept_name FROM emp e INNER JOIN dept d ON e.dept_id = d.id; -- ON指定连接条件,表别名简化语法

左外连接(左表全量保留):查询所有员工及关联部门(无部门也显示)

SELECT e.*, d.name FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;

自连接(同表关联):查询员工及其直属领导姓名

SELECT a.name AS 员工, b.name AS 领导 FROM emp a LEFT JOIN emp b ON a.managerid = b.id;

子查询进阶应用

标量子查询(返回单个值):查询薪资高于平均薪资的员工

SELECT name, salary FROM emp WHERE salary > (SELECT AVG(salary) FROM emp);

表子查询(返回多行多列):查询部门 3 中业绩 Top3 的员工

SELECT * FROM emp WHERE (dept_id, salary) IN (SELECT dept_id, salary FROM emp WHERE dept_id = 3 ORDER BY salary DESC LIMIT 3);

子查询推入优化:达梦支持将主查询过滤条件推入子查询,提升效率

SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE name LIKE '技术%');

查询工具操作指南

图形化查询
连接数据库后,右键目标表→「浏览数据」,默认显示 100 条数据。
筛选数据:在下方筛选框选择字段→设置比较符(等于、大于等)→输入条件→点击「筛选」按钮。
自定义查询:点击「新建查询」→输入 SQL 语句→点击「执行」,结果实时展示,支持导出 Excel。

命令行查询操作
登录数据库:

dmmgr -U用户名/-P密码@数据库实例名 # 例如 dmmgr -Uscott/-Tiger@mydmdb

执行查询:直接输入 SQL 语句,结尾加;回车执行,例如:

SELECT name, salary FROM emp WHERE dept_id = 1;

查看历史查询:

SELECT * FROM VSQL_HISTORY WHERE EXEC_TIME > 1000; -- 查询执行时间超1秒的SQL

查询优化核心技巧

索引优化
为查询频繁的字段创建索引,例如:

CREATE INDEX idx_emp_dept ON emp(dept_id);

单值查询优先使用唯一索引,达梦会通过 SSEK 操作符实现索引唯一扫描。
复合索引遵循“最左前缀原则”,查询条件匹配索引前缀字段时生效。

执行计划优化
查看执行计划:

EXPLAIN SELECT * FROM emp WHERE salary > 8000;

优化方向:避免SELECT *、减少 JOIN 表数量、用 IN 替代 OR、合理使用 HINT 调整执行计划。

AI 智能优化
达梦启云平台支持 AI 驱动的 SQL 优化,通过自然语言描述需求即可生成最优 SQL,还能自动调优参数。

常见查询故障排查

结果集异常
定位问题 SQL:通过应用日志、VSQL_HISTORY视图提取执行语句。
排查方法:验证 SQL 语法、绑定参数一致性,裁剪 SQL 语句定位出错片段,通过修改 HINT 或改写语句调整执行计划。

查询超时
原因:无索引、数据量过大、JOIN 逻辑复杂。
解决:添加索引、分页查询、优化 JOIN 顺序,通过SET LONG_QUERY_TIME调整超时阈值。

进程异常
查看数据库日志,定位异常 SQL。
终止慢查询:

SP_KILL_SESSION(会话ID); -- 终止阻塞进程

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询