注:本文档中所有示例均在 DM 示例库 DMHR 下完成
为方便实践入手,下载Windows达梦(超简单),图形化数据库安装过程中,请勾选创建 DMHR 示例库,作为数据库模拟环境,如下图所示:
查看表结构
方法一:
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEE','DMHR') FROM dual;
方法二:
SP_TABLEDEF('DMHR','EMPLOYEE');
全表检索和部分列检索
SELECT * FROM '模式'.'表名';
列如:
SELECT * FROM dmhr.employee;
部分列检索时,使用具体列名代替*
列如:
SELECT employee_id, employee_name, salary FROM dmhr.employee
行过滤和多条件过滤
表名后跟WHERE条件,进行数据筛选
列如:
SELECT * FROM dmhr.employee WHERE hire_date > '2015-01-01';
对于多个条件的复杂查询,可通过AND,OR,子查询,IN,NOT IN等实现。
例如:需查询部门编号为 102 的员工,或者工资大于 20000 的员工,或者部门编号为 105 且工资大于 9000 的员工。
SELECT *
FROM dmhr.employee
WHERE (department_id = 102
OR salary > 20000
OR (department_id = 105
AND salary > 9000));
空值查找和运算
空值查找通过IS NULL 和IS NOT NULL实现
NULL 不支持加、减、乘、除、大小、相等比较,所有查询结果都为空。
列如:
SELECT * FROM dmhr.employee WHERE commission_pct IS NULL;
列使用别名
别名可通过AS关键字实现,或者直接跟别名(AS关键字省略)
列如:
SELECT employee_id AS "员工编号", employee_name "员工姓名" FROM dmhr.employee;
where 条件引用别名一定要嵌套一层,否则将报错。
错误实例:
SELECT email as emna, salary as sal FROM dmhr.employee WHERE sal > 10000;
正确实例:
SELECT * FROM
(SELECT email as emna, salary as sal FROM dmhr.employee) WHERE sal > 10000;
限制查询返回行数
方法一:可使用LIMIT关键字实现
SELECT employee_id, employee_name, salary FROM dmhr.employee LIMIT 2
方法二:使用虚拟列ROWNUM实现
SELECT employee_id, employee_name, salary FROM dmhr.employee WHERE ROWNUM <=2
查询结果排序
排序关键字为ASC和DESC,ASC代表升序排序,DESC代表降序排序
列如:按员工生日进行升序排列,工资降序,限制5条
SELECT employee_name,hire_date,salary FROM dmhr.employee
WHERE employee_name is not null ORDER BY hire_date ASC, salary DESC LIMIT 5;
注:多列排序,若前面的列有重复,后面的排序才有用。即先通过前面的列将数据分组,再按照后面的列进行排序。
union 和 union all
union和union all都用于合并结果集。区别是union去除,union all不去重。合并结果集时,对应的列数必须一致,列的数据类型必须匹配。如果合并列数不一致时,可以用NULL或者''填充替代。
列如:
SELECT employee_name, department_id FROM dmhr.employee WHERE ROWNUM <5UNIONALLSELECT'DM2021', NULLFROM DUAL;
SELECT employee_name, department_id FROM dmhr.employee WHERE ROWNUM <5UNIONALLSELECT'DM2021', ''FROM DUAL;
上述两条sql输出一样
in、not in
IN 相当于 OR, 而 NOT IN 相当于 AND.
employee_id IN (1002, 1005, NULL)相当于employee_id=1002 or employee_id = 1005 or employee_id IS NULL
employee_id NOTIN (1002, 1005, NULL)相当于 employee_id =1002 and employee_id = 1005 and employee_id IS NULL
表连接
达梦数据库支持的连接类型包括:内连接、左连接、右连接、全连接、自连接 5 种类型
内连接:两张表满足连接条件的记录
左外连接:结果不仅包含满足条件的记录,还包含位于左表中不满足条件的记录,此时右表的记录显示为 NULL。
右外连接:结果不仅包含满足条件的记录,还包含位于右表中不满足条件的记录,对应的左表的记录显示为 NULL。
外连接:结果不仅包含满足条件的记录,还会包含位于两边表中所有不满足条件的记录,对应的两边表的记录显示为 NULL。
自连接:表和自身进行连接,自连接查询至少要对一张表起别名,否则,服务器无法识别要处理的是哪张表。