达梦数据库查询与操作详解

引言
查询与操作数据库中的数据是达梦数据库提供的基本功能。达梦数据库遵循SQL标准,提供了多种方式的数据查询和数据操作的方法,已满足用户的实际应用需求,此次介绍通过SQL语句实现单表查询、连接查询、查询子句、子查询等数据查询方法和表数据操作方法。
一、达梦数据库概述

达梦数据库是一种关系型数据库管理系统(RDBMS),支持标准SQL语法,包括数据查询(SELECT)、数据插入(INSERT)、更新(UPDATE)、删除(DELETE)等基本操作,以及视图、索引、存储过程等高级功能。

二、查询功能:洞察数据的多面镜
(一)单表查询:聚焦核心

单表查询以SELECT语句为基石,从单一表或视图精准提取数据。其语法架构宛如精密仪器,各子句各司其职。

1.简单查询:轻松选取列,*号一键获取全列,灵活调整列序,满足多样化展示需求。

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

设置对于行的查询条件,结果仅显示满足查询条件的数于层次查询,适用于具有层次结构的自相关数据表查询,个字段是另一个字段的外键;将罗辑地重新编组,结果是行的集合,一组内一个分组列的句>用于为组设置检索条件;则指定
的一个字段或多个字段的数据值排序,根据条件可指定可选项用于据内容;用也就是说,在一张表中,有一子句返回的临时结果所有值都是相同的;

SELECT语句用于从表中选取数据,简单查询就是用SELECT语句把一个表中的数据储存到一个结果集中。其基本语法如下:
存储到一个结果集中。其基本语法如下:

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


说明:
(1)<选择列表>是选取要查询的列名;
(2)用户在查询时可以根据应用的需要改变列的显示顺序;
(3)星号(*)是选取所有列的快捷方式,此时列的显示顺序和数据表设计时列的顺序保持一致。
2.条件查询:条件设定丰富多样,运算符家族强大。比较谓词精准比对数值与字符串;BETWEEN精准圈定数值范围;IN判定集合归属;LIKE巧用通配符匹配字符串,复杂查询需求皆能迎刃而解。

SELECT * FROM 表名 WHERE 列名 > 值;
SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;
SELECT * FROM 表名 WHERE 列名 IN (值1, 值2, ...);
SELECT * FROM 表名 WHERE 列名 LIKE '%字符串%';


3.列运算查询:算术运算符赋能数值列运算,如为员工薪资精准调整,实时模拟数据变化,助力决策评估。

SELECT 列1 + 列2 AS 新列名 FROM 表名;

4.别名查询:列别名重塑输出列名,简洁且个性化;表别名区分同名表,优化自连接查询,提升代码可读性与执行效率。

SELECT 列名 AS 别名 FROM 表名;
SELECT t1.列名 AS 别名 FROM 表名 AS t1;

(二)连接查询:数据整合的桥梁

连接查询架起多表数据沟通的桥梁,借共同列关联实现多表数据协同分析。

1.笛卡尔积查询:展示所有可能组合,虽数据量庞大,但为复杂关联分析奠基。

SELECT * FROM 表1 CROSS JOIN 表2;

2.内连接查询:聚焦匹配关联,精准提取符合连接条件记录。

SELECT 表1.列名, 表2.列名 FROM 表1 INNER JOIN 表2 ON 表1.共同列 = 表2.共同列;


3.外连接查询:全面涵盖数据,除匹配项外,LEFT、RIGHT、FULL OUTER JOIN分别确保左、右表或双侧不匹配数据完整保留。

SELECT 表1.列名, 表2.列名 FROM 表1 LEFT JOIN 表2 ON 表1.共同列 = 表2.共同列;
SELECT 表1.列名, 表2.列名 FROM 表1 RIGHT JOIN 表2 ON 表1.共同列 = 表2.共同列;
SELECT 表1.列名, 表2.列名 FROM 表1 FULL OUTER JOIN 表2 ON 表1.共同列 = 表2.共同列;


(三)查询子句:结果优化的魔法棒

查询子句为优化查询结果而生,深度挖掘数据价值。

1.排序子句:ORDER BY依指定列升降序排列结果,NULLS FIRST或LAST灵活处理空值位置,确保数据呈现契合分析需求。

SELECT * FROM 表名 ORDER BY 列名 ASC; -- 升序
SELECT * FROM 表名 ORDER BY 列名 DESC; -- 降序


2.分组子句:GROUP BY按列值分组数据,结合聚合函数汇总统计。

SELECT 列名, COUNT(*) AS 计数 FROM 表名 GROUP BY 列名;


3.HAVING子句:为分组结果设筛选门槛,与WHERE互补,WHERE过滤行,HAVING甄别组,精准聚焦核心分组数据。

SELECT 列名, COUNT(*) AS 计数 FROM 表名 GROUP BY 列名 HAVING COUNT(*) > 值;


4.TOP子句:大数据表中,TOP子句迅速提取前N条或前N%记录,优化查询性能。

SELECT TOP N * FROM 表名 ORDER BY 列名 DESC;
SELECT TOP (N%) * FROM 表名 ORDER BY 列名 DESC;


(四)子查询:嵌套智慧的力量

子查询嵌套于主查询子句,先独立运算再为外层查询供数据支持。

1.使用IN关键字的子查询:IN检验表达式与子查询结果集值匹配情况,多层嵌套实现复杂逻辑。

SELECT * FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件);


2.使用ANY、SOME、ALL关键字的子查询:与比较运算符协作,定义子查询结果与外部值关系。

SELECT * FROM 表名 WHERE 列名 > ANY (SELECT 列名 FROM 表名 WHERE 条件);
SELECT * FROM 表名 WHERE 列名 > ALL (SELECT 列名 FROM 表名 WHERE 条件);


3.使用EXISTS关键字的子查询:专注逻辑判断,子查询结果为空或非空决定返回真值或假值。

SELECT * FROM 表名 WHERE EXISTS (SELECT 1 FROM 表名 WHERE 条件);


三、操作功能:数据管理的基石

(一)插入表数据:丰富数据宝库

INSERT INTO语句为数据入库开辟通道,支持值插入与查询插入两种模式。

1.值插入:为表逐行定制数据,精准填充列值。

INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);


2.查询插入:从源表依条件筛选数据,无缝导入目标表。

INSERT INTO 表名 (列1, 列2, ...) SELECT 列1, 列2, ... FROM 源表 WHERE 条件;


(二)修改表数据:精准雕琢数据

UPDATE语句精准定位修改目标,SET子句更新列值,WHERE子句严格筛选修改范围。

UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2, ... WHERE 条件;


(三)删除表数据:数据清理的利刃

DELETE FROM语句依条件精准清除表内数据,谨慎操作防误删。

DELETE FROM 表名 WHERE 条件;


四、高级操作与查询

(一)视图

视图是一种虚拟表,基于SQL查询结果集创建。

CREATE VIEW 视图名 AS SELECT 列1, 列2, ... FROM 表名 WHERE 条件;


(二)索引

索引用于提高查询性能,加速数据检索。

CREATE INDEX 索引名 ON 表名 (列名);


(三)存储过程

存储过程是一组预编译的SQL语句,用于封装业务逻辑。

CREATE PROCEDURE 存储过程名 (参数列表)
BEGIN
    -- SQL语句
END;


五、实践案例

假设我们有一张“员工表(employee)”,其中包含“员工姓名(employee_name)”、“工资(salary)”、“入职日期(hire_date)”等字段。

1.查询工资高于20000元的员工信息

SELECT employee_name, email, phone_num, hire_date, salary
FROM employee
WHERE salary > 20000;


2.查询员工信息及所属部门名称(员工表与部门表内连接):

SELECT d.department_name, e.employee_name, e.email, e.phone_num, e.hire_date, e.salary
FROM employee e
INNER JOIN department d ON e.department_id = d.department_id;


3.查询每个部门的员工数量(分组查询):

SELECT department_id, COUNT(*) AS employee_count
FROM employee
GROUP BY department_id;


4.查询工资最高的员工信息(子查询):

SELECT *
FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee);


5.插入新员工信息

INSERT INTO employee (employee_name, email, phone_num, hire_date, salary)
VALUES ('张三', '[email protected]', '1234567890', '2023-01-01', 25000);


6.更新员工工资

UPDATE employee
SET salary = 28000
WHERE employee_name = '张三';

7.删除员工信息:

DELETE FROM employee
WHERE employee_name = '张三';

总结:

在数据驱动的时代,数据库管理成为企业与组织的智慧中枢。达梦数据库以其卓越性能和丰富功能,为数据处理提供了坚实支撑。本文将围绕达梦数据库的查询与操作展开深度剖析,帮助读者解锁数据潜能。

你可能感兴趣的:(数据库,oracle,sql)