达梦(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

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

相关文章
|
2月前
|
SQL
开发指南057-执行SQL返回结果集
业务实践中除了返回实体类外,经常需要通过SQL语句返回结果集
|
1月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
2月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
2月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
2月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
2月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
490 4
|
2月前
|
SQL 关系型数据库 MySQL
SQL批量插入测试数据的几种方法?
SQL批量插入测试数据的几种方法?
159 1
|
2月前
|
SQL 安全
开发指南038-防SQL注入
这个是检查某个字符串是否含注入的SQL,为基本函数
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
51 0