当前位置: 首页 > news >正文

达梦数据库sql高级语句实际应用

1.当字段为,分割需要取对应的值 案例*
在这里插入图片描述

第一种:incomeInfo.income_class_code值为 "00010001,00080042"
可以采用第一种:IF(rtp.RIGHT_NUMBER = 1, SUBSTRING_INDEX(incomeInfo.income_class_code, ',', 1), SUBSTRING_INDEX(incomeInfo.income_class_code, ',', -1)) 
如果rtp.right_number值为1取incomeInfo.income_class_code的值是"00010001"否则取最后一位"00080042"第二种:incomeInfo.income_class_code值为 "00010001,00080042,00060067"
可以采用第二种:
SUBSTRING_INDEX(SUBSTRING_INDEX(incomeInfo.INCOME_CLASS_CODE,',',rtp.RIGHT_NUMBER),',',-1)
当rtp.RIGHT_NUMBER1,incomeInfo.INCOME_CLASS_CODE取的值是"00010001"
当rtp.RIGHT_NUMBER2,incomeInfo.INCOME_CLASS_CODE取的值是"00080042"
当rtp.RIGHT_NUMBER3,incomeInfo.INCOME_CLASS_CODE取的值是"00060067"

2.分组WM_CONCAT与distinct和group by搭配写法 案例*

-- 多主键表时,假设SRUDENT表主键是STUDENT_IDID,肯定有一个主键重复另一个主键不重复的数据呀
ID STUDENT_ID NAME AGE
1   1001    张三  20
1   1002    李四  21
1   1003    张三  22     
2   1001    王五  25   
-- 然后编写sql语句   去重的话根据业务来,我这边需求要去重所以才加上,并且WM_CONCAT是转变为Text文本类型,我这边还要to_char将他变成字符串类型
select 
ID,
to_char(WM_CONCAT(distinct NAME)) AS USER_NAME,
to_char(WM_CONCAT(distinct AGE)) AS AGE
from STUDENT
group by ID;
-- 此时查出来的效果是   分组后自动,分割
ID NAME          AGE
1  张三,李四    20,21,22
2  王五         25

3.如果这样否则那样CASE WHEN ID=1 THEN 这样 ELSE 那样 END AS NAME 案例*

-- 依旧是多主键 IDSTUDENT_ID
ID STUDENT_ID NAME AGE
1   1001    张三  20
1   1002    李四  21
1   1003    张三  22     
2   1001    王五  25 SELECT 
CASE WHEN ID=1 THEN SRUDENT_ID||'_'||NAME ELSE NAME AS USER_NAME,
AGE
FROM STUDENT-- 效果
USER_NAME  AGE
1001_张三  20
1002_李四  21
1003_张三  22
王五       25

4.FIND_IN_SET精准查询值,比like查询效率高又准确 案例*

ID    MAN_ID
1001  10,20,30
1002  10,30,50 
-- 准确查到id为1001并且man_id中有10SELECT ID
FROM STUDENT
WHERE ID=1001 AND FIND_IN_SET('10',MAN_ID)-- 效果
ID 
1001
-- 准确查到id为1001并且man_id中有1SELECT ID
FROM STUDENT
WHERE ID=1001 AND FIND_IN_SET('1',MAN_ID)
-- 效果
ID
空值没查询到思路:如果用like查询man_id中有1的那能查询到,但是10中有1,符合带有1这个值都能查到,不符合想要的结果。在保存man_id数据时值,分割。查询数据不精准。如果利用 FIND_IN_SET('1',man_id) 是能查询必定为1,值是10不算,查询结果空值。符合想要的结果,所以可以用这种方式 

5.IFNULL为空赋值 案例*

-- 数据库数据
ID NAME AGE
1       20
2  李四 21
3  王五 22SELECT ID,IFNULL(NAME,'/') AS NAME  FROM STUDENT
-- 效果
ID  NAME
1   / 
2  李四
3  王五

6.Listagg拼接查询出来的数据按指定格式,比如/,并使用REGEXP_REPLACE函数去重 案例*

-- 人员类型是0001权利人的并且ID是202309260003的,符合要求的所有数据进行/拼接,拿到拼接好的人员姓名
select LISTAGG(ISNULL(MI.MAN_NAME,''),'/')WITHIN GROUP (ORDER BY MI.MAN_ID ASC) rightManName
from MAN_INFO MI ,RIGHT_INFO RRI 
where MI.ID=RRI.ID AND MI.RIGHT_NUMBER=RRI.RIGHT_NUMBER AND MI.MAN_CLASS='0001'
and RRI.ID='202309260003';
--效果:
rightManName
张三/李四/王五/李四-- 根据正则表达式进行对拼接好的人员姓名去重
select 
REGEXP_REPLACE(
LISTAGG(ISNULL(MI.MAN_NAME,''),'/')WITHIN GROUP (ORDER BY MI.MAN_ID ASC),
'([^/]+)(/\1)+', '\1') 
as rightManName
from MAN_INFO MI ,RIGHT_INFO RRI 
where MI.ID=RRI.ID AND MI.RIGHT_NUMBER=RRI.RIGHT_NUMBER AND MI.MAN_CLASS='0001'
and RRI.ID='202309260003';
-- 效果:把重复叫张三的给去重了
rightManName
张三/李四/王五

7.LEFT JOIN左连接应用 案例*

SELECT DISTINCT 
RII.ID AS YWH,
QLR.QLSX QLRSX,
QLR.RYMC AS QLRMC,
RRTP.PRO_TYPE AS PTYPEFROM INCOME_INFO RIIINNER JOIN RIGHT_TO_PROPERTY RRTP ON RII.ID=RRTP.ID
LEFT JOIN (
SELECT DISTINCTRY.ID AS YWH,RY.RIGHT_NUMBER AS QLSX,REGEXP_REPLACE(LISTAGG(RY.MAN_NAME, '/') WITHIN GROUP(ORDER BY RY.MAN_NAME), '([^/]+)(/\1)+', '\1') AS RYMC
FROM MAN_INFO RYLEFT JOIN MAN_RELATION GL ON RY.ID=GL.ID AND RY.MAN_ID=GL.RELATION_MAN_IDLEFT JOIN MAN_INFO FR ON GL.ID=FR.ID AND GL.MAN_ID=FR.MAN_ID AND FR.MAN_CLASS IN ('0005','0006')
WHERE RY.MAN_CLASS ='0001' AND RY.DELETE_DATE IS NULL 
GROUP BY RY.ID,RY.RIGHT_NUMBER
) AS QLR ON QLR.YWH=RRTP.ID AND QLR.QLSX=RRTP.RIGHT_NUMBERWHERE  RII.Status_Code='0002' --状态为0002
and RII.DELETE_DATE IS NULL
and RRTP.DELETE_DATE IS NULL
and RII.ID like '2005%'    --id编写是年月日+4位当天顺序 比如200501010001
limit 0,1000;-- 效果:
YWH           QLRSX  QLRMC  PTYPE
200501090001   1      张三  0001
200503080012   2      李四  0003
200509050001   1      王五  0001

8.根据模式名查询该模式下所有表名称 案例*

-- 根据模式名为DREMIS_CODE,查询出该模式下所有表名称
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = 'DREMIS_CODE';-- 效果:
TABLE_NAME
CODE_MAN_CLASS
CODE_RIGHT_TYPE
CODE_PAYER

9.字符串截取SUBSTRING从第几位截取几个 案例*

SELECT SUBSTRING('130208007006', 7, 3)--效果:从第7位开始截取 截取3个
007

10.将查询到的结果排序并自增 案例*

-- 根据student表的stu_id主键排序,将符合要求的数据进行模拟自增
SELECT
(ROW_NUMBER() OVER(ORDER BY STU.STU_ID)) AS BSM,
STU_NAME AS MC
FROM STUDENT AS STU
WHERE STU_NAME LIKE '张%'--效果
BSM MC
1  张三
2  张某
3  张总
4  张工
5  张先生

11.查询语句虚拟列的应用 案例*

-- Student表只有字段 stu_id,stu_name,stu_age  然后查询语句可以创建虚拟列进行查询展示   其中||能把两边拼接
SELECT 
STU_ID,STU_NAME,STU_AGE,(STU_ID||STU_NAME) AS CARD
FROM STUDENT-- 效果
STU_ID  STU_NAME  STU_AGE  CARD
1      张三       20      1张三
2      李四       21      2李四

相关文章:

  • vue中数据已经改变了,但是table里面内容没更新渲染!
  • SecureFX 9.5.2 SecureCRT 9.5.2 官方下载
  • Java18新特性
  • LIMS系统能解决实验室管理的哪些痛点
  • JavaScript异步编程——03-Ajax传输json和XML的技术文档
  • python给图片加上图片水印
  • 第二证券今日投资参考:5月国产游戏版号发放 猪价加速上涨
  • 农林乙级资质换证新动态:行业趋势与机遇
  • 【C++刷题】优选算法——递归第三辑
  • Python高克勒-曼宁-斯特里克勒公式计算一维流量
  • JAVA面试题大全(二)
  • Java基础入门day52
  • 网络协议——Modbus-RTU
  • angr使用学习
  • 基于Python flask的豆瓣电影数据分析可视化系统,功能多,LSTM算法+注意力机制实现情感分析,准确率高达85%
  • 【刷算法】求1+2+3+...+n
  • Android优雅地处理按钮重复点击
  • C++入门教程(10):for 语句
  • JavaScript 基础知识 - 入门篇(一)
  • python大佬养成计划----difflib模块
  • tab.js分享及浏览器兼容性问题汇总
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 半理解系列--Promise的进化史
  • 基于 Babel 的 npm 包最小化设置
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 那些年我们用过的显示性能指标
  • 使用SAX解析XML
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 小程序测试方案初探
  • 在Unity中实现一个简单的消息管理器
  • Android开发者必备:推荐一款助力开发的开源APP
  • puppet连载22:define用法
  • ​2020 年大前端技术趋势解读
  • ​如何在iOS手机上查看应用日志
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $ git push -u origin master 推送到远程库出错
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2)nginx 安装、启停
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第61天)多租户架构(CDB/PDB)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (九)One-Wire总线-DS18B20
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)平衡树
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net Application的目录
  • .Net Core 中间件验签
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 事件模型教程(二)