达梦(DM) SQL数据及字符串操作

简介: 继续讲述DM数据库Sql操作

这里继续讲解DM数据库的操作,主要涉及插入、更新、删除操作。

数据操作

插入数据,不指定具体列的话就需要插入除自增列外的其他列,当然自增列也可以直接指定插入

INSERTINTO SYS_USER VALUES(110,'test002','test002','00',null,'13522266688',0,null,'dfhgjhsfjg','12323',0,0,null,null,'test002','2023-10-23 10:11:11',null,null,null);

执行成功后查看数据

image.png

插入多行,比如创建测试表

CREATETABLE test
ASSELECT user_id,          user_name,          login_name,          phonenumber,          dept_id
FROM sys_user
WHERE1=2;

创建成功后查询可以看到表创建成功,带WHERE 1 = 2条件的话,实测是只创建指定字段表结构,不带WHERE条件的话会携带对应字段的数据

image.png

CREATETABLE test1
ASSELECT user_id,          user_name,          login_name,          phonenumber,          dept_id
FROM sys_user;

执行结果

image.png

批量插入test表数据

insertinto test VALUES(1,'test','test','13511122211',1),(2,'test1','test1','13511122222',1),(3,'test2','test2','13511122233',1);

执行成功后

image.png

可以按指定列插入行,未指定值的列上若定义了默认值,则插入默认值。没有指定默认值,为 NULL,则插入 NULL 值

insertinto test (user_id,login_name)VALUES(4,'test3'),(5,'test4');

执行结果如图

image.png

如需快速复制表结构且不需要数据,如需表机构和数据的话 WHERE 1 = 1; 或者不要WHERE条件

CREATETABLE test2 ASSELECT*FROM test WHERE1=0;

查询表数据库看到

image.png

使用 SP_TABLEDEF 过程查看 test2 的结构,所有定义在 test 列上的约束均没有被新表继承。

为表语句添加约束条件

ALTERTABLE test  ADD PRIMARY KEY (user_id);ALTERTABLE test  ALTER COLUMN user_name SET DEFAULT 'dm2020';ALTERTABLE test  ALTER COLUMN login_name SETNOTNULL;ALTERTABLE test  ALTER COLUMN phonenumber SET DEFAULT '13511122255';

使用 MERGE INTO 语法可合并 UPDATE 和 INSERT 语句,使用 MERGE 可以实现记录“存在则 update,不存在则 insert”的逻辑。

通过 group by + having 子句分组查询的方式,查找员工名称相同的记录

select user_name,count(*)FROM TEST groupby USER_NAME HAVINGcount(*)>1;

查询结果如图

image.png

查询重复数据,通过 group by + rowid 的方式,查找员工名称重复的记录

select*from test where ROWID notin(select max(ROWID)from test groupby user_name);

查找到重复记录后直接删除

deletefrom test where ROWID notin(select max(ROWID)from test groupby user_name);

执行完再查询发现重复的1 2 3 4 已经删除了

image.png

字符串操作

使用函数 regexp_count、regexp_replace 或 translate 统计字符串个数

创建视图

CREATEOR REPLACE VIEW v ASSELECT'STUDENT,TEACHER,TEAM'AS str FROM DUAL;select*from V;

看到创建成功的视图

image.png

使用函数 regexp_count 统计子串个数

SELECT regexp_count(str,',')+1as cnt FROM v;

执行结果如图

image.png

使用 regexp_replace 迂回求值统计子串个数

SELECT length(regexp_replace(str,'[^,]'))+1as cnt FROM v;

使用 translate 统计子串个数

SELECT length(translate(str,','|| str,','))+1AS cnt FROM v;

使用 translate 或者 regexp_replace 在某个字段中去掉不需要的字符,先创建视图

CREATEOR REPLACE VIEW v
ASSELECT'CLARK' ename FROM DUAL
UNION ALL
SELECT'MILLER'FROM DUAL
UNION ALL
SELECT'KING'FROM DUAL;

创建成功如图

image.png

去掉ename中的元音字母

SELECT ename,translate(ename,'1AEIOU','1') stripped1 FROM v;

可以看到元音字母已经去掉了

image.png

使用正则函数 regexp_replace [] 内列举的字符替换为空

SELECT ename,regexp_replace(ename,'[AEIOU]')AS stripped FROM v;

使用 regexp_replace 正则表达式实现字符串中字符与数字分离,创建测试视图

CREATEOR REPLACE VIEW v
ASSELECT'CLARK10' data FROM DUAL
UNION ALL
SELECT'MILLER20'FROM DUAL
UNION ALL
SELECT'KING30'FROM DUAL;

查询结果如图

image.png

使用 regexp_replace 正则表达式

SELECT REGEXP_REPLACE (data,'[0-9]','') dname,       REGEXP_REPLACE (data,'[^0-9]','') deptno
FROM v;

执行结果如图

image.png

使用 regexp_like 实现查询只包含字母或者数字型的数据,创建测试视图

CREATEOR REPLACE VIEW v
ASSELECT'123'AS data FROM DUAL
UNION ALL
SELECT'abc'FROM DUAL
UNION ALL
SELECT'123abc'FROM DUAL
UNION ALL
SELECT'abc123'FROM DUAL
UNION ALL
SELECT'a1b2c3'FROM DUAL
UNION ALL
SELECT'a1b2c3#'FROM DUAL
UNION ALL
SELECT'3$'FROM DUAL
UNION ALL
SELECT'a 2'FROM DUAL;

查询执行结果如图

image.png

在上面的语句中,有些数据包含了空格、逗号、$ 等字符。现在要求只返回其中只有字母及数字的行,使用 regexp_like 语句

SELECT data FROM v WHERE REGEXP_LIKE (data,'^[0-9a-zA-Z]+$');

查询结果如图

image.png

注意下方内容

image.png

通过正则表达式或者 translate 函数实现按字符串中的数值排序,创建视图

CREATEOR REPLACE VIEW v
ASSELECT'ACCOUNTING 10 NEW YORK' data FROM DUAL
UNION ALL
SELECT'OPEARTINGS 40 BOSTON'FROM DUAL
UNION ALL
SELECT'RESEARCH 20 DALLAS'FROM DUAL
UNION ALL
SELECT'SALES 30 CHICAGO'FROM DUAL;

执行后查询结果如图

image.png

用正则表达式替换非数字字符

SELECT data, TO_NUMBER (REGEXP_REPLACE (data,'[^0-9]',''))AS deptno FROM V ORDERBY2;

执行结果如图

image.png

使用 translate 函数,直接替换掉非数字字符

SELECT data,TO_NUMBER (TRANSLATE (data,'0123456789'|| data,'0123456789'))AS deptno FROM V ORDERBY2;

通过 listagg 分析函数实现多行字段的合并显示,创建视图

CREATEOR REPLACE VIEW v
ASSELECT'10' deptno,'CLARK' name,'800' sal FROM DUAL
UNION ALL
SELECT'10','KING','900'FROM DUAL
UNION ALL
SELECT'20','JAMES','1000'FROM DUAL
UNION ALL
SELECT'20','KATE','2000'FROM DUAL
UNION ALL
SELECT'30','JONES','1150'FROM DUAL;

执行结果如图

image.png

使用 listagg 分析函数实现合并显示

SELECT deptno,SUM (sal)AS total_sal,LISTAGG (name,',') WITHIN GROUP(ORDERBY name)AS total_name FROM v GROUPBY deptno;

执行结果如图

image.png

同 sum 一样,listagg 函数也起到汇总结果作用。sum 将数值结果累计求和,而 listagg 是把字符串的结果连在一起。

通过 regexp_substr 实现第 n 个子串的分割,创建测试视图

CREATEOR REPLACE VIEW v ASSELECT'CLARK,KATE,JAMES''CLARK,KATE,JAMES'AS name;

执行结果如图

image.png

使用 regexp_substr 分割子串

SELECT REGEXP_SUBSTR (v.name,'[^,]+',1,2)AS 子串 FROM v;

执行结果如图

image.png

说明:

参数 1:“^”在方括号里表示否的意思,+ 表示匹配 1 次以上。第二个参数表示匹配不包含逗号的多个字符。

参数 2:“1”表示从第一个字符开始。

参数 3:“2”表示第二个能匹配目标的字符串,也就是 KATE。


使用 regexp_substr 实现字符串拆分。比如将 IP 地址“192.168.1.111”中的各段取出来

SELECT REGEXP_SUBSTR (v.ip,'[^.]+',1,1)a,       REGEXP_SUBSTR (v.ip,'[^.]+',1,2)b,       REGEXP_SUBSTR (v.ip,'[^.]+',1,3)c,       REGEXP_SUBSTR (v.ip,'[^.]+',1,4)d
FROM(SELECT'192.168.1.111'AS ip FROM DUAL) v;

执行结果如图

image.png

到这里数据新增,修改,删除的操作以及字符串的相关操作就介绍完了。

相关文章
|
22天前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
251 1
|
8天前
|
SQL druid Java
传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
13 1
|
11天前
|
SQL 数据库
零基础学习数据库SQL语句之操作表中数据的DML语句
零基础学习数据库SQL语句之操作表中数据的DML语句
15 0
零基础学习数据库SQL语句之操作表中数据的DML语句
|
15天前
|
SQL 存储 数据库
如何在SQL中添加数据:一个初学者指南
如何在SQL中添加数据:一个初学者指南
26 3
|
27天前
|
SQL 数据管理 数据库
SQL 语言:数据操作
SQL 语言:数据操作
24 4
|
27天前
|
SQL 存储 数据库
SQL 语言:基本概述和数据定义
SQL 语言:基本概述和数据定义
52 4
|
26天前
|
存储 SQL 关系型数据库
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
237 1
|
27天前
|
SQL 存储 安全
SQL 语言:数据控制
SQL 语言:数据控制
25 1
|
7天前
|
SQL
sql语句按指定某个字段分组后删除重复数据只保留id最小/最大的一条数据
sql语句按指定某个字段分组后删除重复数据只保留id最小/最大的一条数据
7 0
|
9天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如何使用MaxCompute SQL客户端删除分区数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。