一、达梦数据库基础概念
达梦数据库支持标准SQL语法,包括数据查询(SELECT)、数据插入(INSERT)、更新(UPDATE)、删除(DELETE)等基本操作,以及视图、索引、存储过程等高级功能。在学习达梦数据库之前,需要了解其基本概念和特点,如数据表、字段、约束、索引等。
二、单表查询
单表查询是指只针对一个表进行查询操作。以下是单表查询的基本步骤和示例代码:
使用DBMS_METADATA.GET_DDL
函数或SP_TABLEDEF
函数查看表结构。
SELECT DBMS_METADATA.GET_DDL('TABLE', ' students ') FROM dual;
使用SELECT * FROM 表名
查询表中的所有数据。
SELECT * FROM students;
使用条件查询进行过滤,例如查询所有ID大于103的行。
SELECT * FROM students WHERE student_id > 103;
使用列运算符进行计算,例如查询学生的平均成绩。
SELECT AVG(score) FROM students;
使用聚合函数和操作符进行数据汇总,例如查询最高分和最低分。
SELECT MAX(score), MIN(score) FROM students;
使用别名简化SQL语句和区分同名对象。
SELECT s.student_name AS name, s.score AS mark FROM students s;
三、多表联合检索
多表联合检索是将多个表的数据组合在一起,通常使用JOIN
语句实现。以下是常见的连接类型及其示例代码:
使用CROSS JOIN
进行笛卡尔积查询。
SELECT a.column1, b.column2 FROM table1 a CROSS JOIN table2 b;
使用INNER JOIN
进行内连接查询,只返回两个表中匹配的记录。
SELECT e.first_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
使用LEFT JOIN
或RIGHT JOIN
进行外连接查询,返回至少一个表中的所有记录。
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
四、数据操作
数据操作包括插入、更新和删除数据,以下是具体的SQL语句示例:
使用INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
插入数据。
INSERT INTO students (student_id, student_name, score) VALUES (104, 'Alice', 90);
使用UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件;
更新数据。
UPDATE students SET score = 95 WHERE student_id = 104;
使用DELETE FROM 表名 WHERE 条件;
删除数据。
DELETE FROM students WHERE student_id = 104;
五、高级查询与子查询
高级查询包括排序子句、分组子句、HAVING子句和TOP子句等。以下是示例代码:
使用ORDER BY
关键字对结果进行排序。
SELECT * FROM students ORDER BY score DESC;
使用GROUP BY
关键字对结果进行分组。
SELECT department_id, AVG(score) FROM students GROUP BY department_id;
使用HAVING
关键字对分组后的结果进行过滤。
SELECT department_id, AVG(score) FROM students GROUP BY department_id HAVING AVG(score) > 80;
使用TOP
关键字限制返回的记录数。
SELECT TOP 5 * FROM students ORDER BY score DESC;
将一个SELECT语句嵌入另一个SELECT语句中,用于完善主查询。
SELECT * FROM students WHERE student_id IN (SELECT student_id FROM scores WHERE score > 90);
六、连接查询与嵌套查询
连接查询和嵌套查询是处理复杂数据关系的重要手段。以下是示例代码:
使用嵌套查询从PRODUCT Category表中获取目录编号,并从PRODUCT Subcategory表中获取子目录编号。
SELECT p.category_id, ps.subcategory_id
FROM product_category p
JOIN product_subcategory ps ON p.category_id = ps.category_id;
通过四层嵌套查询从PRODUCT Category表中获取目录编号,再从PRODUCT Subcategory表中获取这些目录对应的子目录编号,然后从PRODUCT表中获取子目录编号对应的图书编号,最后从评论表中获取这些图书编号对应的评论人员和评论日期。
SELECT p.category_id, ps.subcategory_id, t.book_id, c.commenter_name
FROM product_category p
JOIN product_subcategory ps ON p.category_id = ps.category_id
JOIN product t ON ps.subcategory_id = t.subcategory_id
JOIN comments c ON t.book_id = c.book_id;
七、字符串相关操作
字符串操作包括遍历字符串、在字符串中增加引号、计算字符出现次数等。以下是示例代码:
使用字符串函数遍历字符串中的每个字符。
SELECT LENGTH('Hello World') AS length FROM dual;
使用字符串函数在字符串中增加引号。
SELECT REPLACE('Hello World', ' ', '"') AS modified_string FROM dual;
- 计算字符出现次数:
使用字符串函数计算特定字符在字符串中的出现次数。
SELECT COUNT(*) AS count FROM (
SELECT SUBSTRING('Hello World', level, 1) AS char FROM dual
connect by level <= LENGTH('Hello World')
) WHERE char = 'o';
八、数字的使用
数字操作包括使用聚集函数汇总数据,如MAX、MIN、SUM、AVG和COUNT,以及使用分析函数生成累计和。以下是示例代码:
- 使用聚集函数:
使用MAX、MIN、SUM、AVG和COUNT函数进行数据汇总。
SELECT MAX(score), MIN(score), SUM(score), AVG(score), COUNT(*) FROM students;
- 使用分析函数:
使用SUM OVER()函数生成累计和。
SELECT student_id, score, SUM(score) OVER (ORDER BY score DESC) AS cumulative_sum FROM students;
九、日期运算
日期运算包括使用TRUNC()函数获取某个日期对应的月初时间,包括时分秒、日月年及周初、月初等信息。以下是示例代码:
- 获取月初时间:
使用TRUNC()函数获取某个日期对应的月初时间。
SELECT TRUNC(SYSDATE, 'MM') AS month_start FROM dual;
- 提取年月日时分秒:
使用EXTRACT()函数提取年月日时分秒。
SELECT EXTRACT(YEAR FROM hire_date) AS year, EXTRACT(MONTH FROM hire_date) AS month FROM employees;
十、总结与实践
通过上述内容的学习,读者可以掌握达梦数据库的基本查询与操作技能。建议读者在实际项目中不断练习和应用这些知识,以提高数据库管理和开发能力。同时,可以参考《达梦数据库 SQL 语言手册》进一步深入学习。
总之,达梦数据库因其高性能和高安全性,在各种应用场景中得到了广泛应用。通过系统地学习和实践,读者将能够熟练地使用达梦数据库进行数据管理和操作,提升工作效率和数据处理能力。