达梦(DM) SQL查询及联合查询

简介: 继续讲解达梦(DM)数据库SQL查询操作

这里继续讲解DM数据库的Sql查询操作

查询结果排序

为提高查询结果可读性,我们可以对查询结果按照一定顺序排列,或者也可以将列名替换成数字,例如 ORDER BY 1 DESC,意思是按第一列进行升序排序

SELECT*FROM PY_PERIOD_CLAZZ WHERE ROWNUM <5ORDERBY ID DESC;SELECT*FROM PY_PERIOD_CLAZZ WHERE ROWNUM <5ORDERBY1DESC;

执行结果如图

image.png

如果想要进行多列排序的话,可以在 order by 后加两列,并分别标明 ASC, DESC。其中 ASC 表示升序,DESC 表示降序

SELECT*FROM PY_PERIOD_CLAZZ WHERE ROWNUM <5ORDERBY2ASC,1DESC;

执行结果如图

image.png

说明:多列排序,若前面的列有重复,后面的排序才有用。即先通过前面的列将数据分组,再按照后面的列进行排序。

如果想按照客户手机号尾号的顺序排列,缩小查询范围,可以通过如下函数实现子串排序

SELECT USER_NAME AS 姓名, SUBSTR (PHONENUMBER,-4)AS 尾号 FROM SYS_USER WHERE ROWNUM <5ORDERBY2;

查询结果如图

image.png

TRANSLATE 可实现字符替换,语法格式:TRANSLATE(expr,from_string,to_string),from_string 与 to_string 以字符为单位,对应字符逐个替换

SELECT TRANSLATE ('ab你好bcadefg','abcdefg','1234567')AS new_str FROM DUAL;

执行结果如图

image.png

如果 to_string 为空,则直接返回空值

SELECT TRANSLATE ('ab你好bcadefg','abcdefg','')AS new_str FROM DUAL;

执行结果如图

image.png

如果 to_string 对应的位置没有字符,from_string 中列出的字符将会被删除

SELECT TRANSLATE('11ab你好bcadefg','1abcdefg','1')AS new_str FROM DUAL;

查询结果如图

image.png

多表联合查询

使用 union 或者 union all 关键字合并多个结果集时,对应的列数必须一致,列的数据类型必须匹配。当其中一个结果集的列数不满足要求时,可以使用 NULL 或者 空字符串 填充

// 使用 NULL 填充
SELECT USER_ID, USER_NAME FROM SYS_USER WHERE ROWNUM <5UNION ALL
SELECT11,NULLFROM DUAL;

查询结果如图

image.png

// 使用 '' 填充
SELECT USER_ID, USER_NAME FROM SYS_USER WHERE ROWNUM <5UNION ALL
SELECT11,''FROM DUAL;

查询结果如图

image.png

注意:如果存在 order by 子句,必须添加到 union 和 union all 的最后。

union all 用于合并两个结果集,但是会出现重复数据,比如

SELECT*FROM SYS_USER WHERE USER_ID=1OR USER_NAME='若依';

or查询返回一条数据,结果正确

image.png

使用union all 合并结果集的话

SELECT*FROM SYS_USER WHERE USER_ID=1UNION ALL
SELECT*FROM SYS_USER WHERE USER_NAME='若依';

查询结果重复了

image.png

使用union的话就可以了

SELECT*FROM SYS_USER WHERE USER_ID=1UNIONSELECT*FROM SYS_USER WHERE USER_NAME='若依';

查询结果

image.png

说明:使用 union all 替换 or,执行计划更高效,出现重复行时,使用 union 去重。

EXCEPT 获取第一个结果集的数据,然后排除第二个结果集的数据,类似减法运算

CREATETABLE dept ASSELECT dept_id FROM SYS_USER;INSERTINTO dept VALUES(888),(999),(3004); COMMIT;SELECT dept_id FROM dept EXCEPT SELECT dept_id FROM SYS_USER;

查询结果如图

image.png

查询含有 null 值的行时,如果包含 IN、NOT IN 要注意两者的区别。IN 相当于 OR, 而 NOT IN 相当于 AND,比如

SELECT*FROM SYS_USER WHERE user_id IN(1,2,NULL);

查询出数据库的2条数据,

SELECT*FROM SYS_USER WHERE user_id notin(1,2,NULL);

并未查询出数据,因为 NOT IN 的逻辑是 1 AND 2 AND NULL。当 NOT IN 后面跟的子查询返回的列存在 NULL 值,可能得不到正确的结果。

内连接:完全满足连接条件的记录

SELECT*FROM SYS_USER t1,DEPT t2 WHERE t1.DEPT_ID=t2.DEPT_ID;SELECT*FROM SYS_USER t1 JOIN DEPT t2 on(t1.DEPT_ID=t2.DEPT_ID);

查询结果如图

image.png

左外连接:结果不仅包含满足条件的记录,还包含位于左表中不满足条件的记录,此时右表的记录显示为 NULL

SELECT t1.USER_NAME,t2.DEPT_IDFROM SYS_USER t1 LEFT OUTER JOIN DEPT t2 on(t1.DEPT_ID=t2.DEPT_ID);

查询结果如图

image.png

右外连接:结果不仅包含满足条件的记录,还包含位于右表中不满足条件的记录,对应的左表的记录显示为 NULL

SELECT t1.USER_NAME,t2.DEPT_IDFROM SYS_USER t1 RIGHT OUTER JOIN DEPT t2 on(t1.DEPT_ID=t2.DEPT_ID);

查询结果如图

image.png

全外连接:结果不仅包含满足条件的记录,还会包含位于两边表中所有不满足条件的记录,对应的两边表的记录显示为 NULL

SELECT t1.USER_NAME,t2.DEPT_IDFROM SYS_USER t1 FULL OUTER JOIN DEPT t2 on(t1.DEPT_ID=t2.DEPT_ID);

查询结果如图

image.png

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

相关文章
|
15天前
|
SQL 存储 程序员
SQL查询的一些基本知识和学习指导
【6月更文挑战第17天】SQL查询核心包括基础选择、连接(JOIN)、子查询、聚合函数与GROUP BY、模糊匹配(LIKE)、分页与排序。JOIN操作连接多表,GROUP BY配合聚合函数做统计,LIKE用于模糊搜索。理解存储过程、触发器及自动增长列等进阶概念,通过实践提升SQL技能。
42 2
|
2天前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之如何将硬编码的配置值(例如SQL查询中的固定值)更改为调度参数
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
26 7
|
4天前
|
SQL 运维 安全
数据管理DMS产品使用合集之执行SQL时,如何添加Hint来改变查询的执行计划
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
15 1
|
8天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何调整改变SQL查询的严格性
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
9天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如果oss文件过大,如何在不调整oss源文件大小的情况下优化查询sql
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
21天前
|
SQL 存储 安全
SQL入门与进阶:数据库查询与管理的实用指南
一、引言 在数字化时代,数据库已经成为各行各业存储、管理和分析数据的关键基础设施
|
23天前
|
SQL 弹性计算 分布式计算
实时数仓 Hologres操作报错合集之在执行SQL查询时遇到了问题,报错原因是“Invalid index column id: 2”,该怎么处理
在使用阿里云实时数仓Hologres时,可能会遇到不同类型的错误。例如:1.内存超限错误、2.字符串缓冲区扩大错误、3.分区导入错误、4.外部表访问错误、5.服务未开通或权限问题、6.数据类型范围错误,下面是一些常见错误案例及可能的原因与解决策略的概览。
|
4天前
|
SQL 搜索推荐 Java
什么是笛卡尔积及其在SQL查询中的应用
什么是笛卡尔积及其在SQL查询中的应用
|
6天前
|
SQL 缓存 关系型数据库
PolarDB产品使用问题之已经修改了expire_logs_days参数并确认已生效,但在SQL查询中仍然显示为0,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
9天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用问题之如何通过临时查询功能来书写和运行SQL语句
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。