基础达梦SQL

本文详细介绍了在达梦数据库中进行SQL操作的方法,包括查看表结构、全表与部分列检索、行过滤、多条件查询、空值处理、别名使用、限制行数、排序、UNION和IN/NOTIN操作,以及各种连接类型如内连接、左连接、右连接、全连接和自连接。
摘要由CSDN通过智能技术生成

注:本文档中所有示例均在 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。

自连接:表和自身进行连接,自连接查询至少要对一张表起别名,否则,服务器无法识别要处理的是哪张表。

达梦社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值