当前位置:   article > 正文

项目开发常用数据库SQL语句:通用SQL、MySQL、SQLServer、MyBatis_软件开发最常见sql

软件开发最常见sql

目录

数据库操作

1.完整数据库备份:

2.数据库还原:

3.新建数据库表

 SQL语句

 1、通用SQL    

(1)like 模糊查询,  in

(2)sql拼接

(3)数据库表 存储m³

2、MySQL

(1)将mysql数据库中的一个表导入到另一个数据库表中

(2)mysql库表设计变更

(3)mysql库表数据格式化处理

(4)字段格式化处理

(5)删除查询出来的数据

(6)多表使用集合处理

3、SQLServer

 (1)sqlserver 删除表中  指定字符串

 (2)sqlserver 将  “用  特定字符  分隔的一个字段”  拆分成多个字段,然后两个表之间数据更新

4、Oracle

(1)oracle语法

(2)分组查询 

(3)分组去重

5、MyBatis

(1)mybatis返回数据库自动生成主键


数据库操作

1.完整数据库备份

打开sqlserver 》本地连接\其他服务器连接》数据库》某数据库 右键》任务》备份(B)...》直接点击确定。

2.数据库还原:

打开sqlserver 》本地连接\其他服务器连接》数据库 右键》附加(A)...》点击添加》选择**.bak文件。

3.新建数据库

Navicat for MySQL

连接》点击右键》新建数据库...》

新建数据库
数据库名:自定义
字符集:utf8 -- UTF-8 Unicode
排序规则:utf8_general_ci

 SQL语句

 1、通用SQL    

(1)like 模糊查询,  in

[{"互联网":["网络媒体","微博","墨迹天气","河北天气","其他"]},{"气象部门":["灾害大典","灾情普查","灾情直报","其他"]}]

 **.java文件

  1. if(StringUtil.isNotEmpty(dataSource)){
  2. if(dataSource.equals("互联网")){
  3. sql_dataSource = " AND 数据来源 = '互联网' ";
  4. if(StringUtil.isNotEmpty(infoSource)){
  5. //infoSource = infoSource.replaceAll(" +", ""); //去除字符串空格
  6. if(infoSource.equals("其他")){
  7. //like 模糊查询
  8. sql_infoSource = " AND 信息来源 not like '网络媒体' and 信息来源 not like '%微博%' and 信息来源 not like '墨迹天气' and 信息来源 not like '河北天气' ";
  9. } else{
  10. sql_infoSource = " AND 信息来源 like '%"+ infoSource +"%' ";
  11. }
  12. }
  13. }else if(dataSource.equals("气象部门")){
  14. sql_dataSource = " AND 数据来源 = '气象部门' ";
  15. if(StringUtil.isNotEmpty(infoSource)){
  16. if(infoSource.equals("其他")){
  17. //in
  18. sql_infoSource = " AND 信息来源 not in "+ "("+"'灾害大典'"+","+"'灾情直报'"+","+"'灾情普查'"+") ";
  19. }else{
  20. sql_infoSource = " AND 信息来源 = '" + infoSource +"' ";
  21. }
  22. }
  23. }else{
  24. sql_dataSource = " AND 数据来源 = '" + dataSource +"' ";
  25. if(StringUtil.isNotEmpty(infoSource)){
  26. sql_infoSource = " AND 信息来源 = '" + infoSource +"' ";
  27. }
  28. }
  29. }

(2)sql拼接

  1. --SQL1.选择字段原值
  2. select [yaosuNames] from T_ShebeiInfo
  3. --SQL2.将SQL1原值中|替换成','
  4. select [yaosuNames] = REPLACE([yaosuNames], '|', ''',''') from T_ShebeiInfo
  5. --SQL3.选择字段不为空,且在字段首尾添加'
  6. select (''''+ REPLACE(aa.yaosuNames, '|', ''',''') +'''' ) as yaosuNames from (select yaosuNames from T_ShebeiInfo where yaosuNames is not null and datalength(yaosuNames)<>0) aa
  7. select yaosuId,showTitle,FieldName
  8. from T_YaosuInfo
  9. where yaosuId in ( select (''''+ REPLACE(aa.yaosuNames, '|', ''',''') +'''' ) as yaosuNames from (select yaosuNames from T_ShebeiInfo where yaosuNames is not null and datalength(yaosuNames)<>0) aa )

-----*****************************************************---------------------------*****************************************--------------------------

  1. --SQL1.选择字段原值
  2. select [yaosuNames] from T_ShebeiInfo
  3. --SQL2.将SQL1原值中|替换成','
  4. select [yaosuNames] = REPLACE([yaosuNames], '|', ''',''') from T_ShebeiInfo
  5. --SQL3.选择字段不为空,且在字段首尾添加'
  6. select (''''+ REPLACE(aa.yaosuNames, '|', ''',''') +'''' ) as yaosuNames from (select yaosuNames from T_ShebeiInfo where yaosuNames is not null and datalength(yaosuNames)<>0) aa
  7. --------------------------------------------------------------
  8. --SQL4.
  9. SELECT b.yaosuId, b.showTitle, b.FieldName
  10. FROM T_YaosuInfo b
  11. WHERE yaosuId IN (
  12. SELECT ('''' + REPLACE(aa.yaosuNames, '|', ''',''') + '''') AS yaosuNames
  13. FROM (
  14. SELECT yaosuNames
  15. FROM T_ShebeiInfo
  16. WHERE yaosuNames IS NOT NULL
  17. AND datalength(yaosuNames) <> 0
  18. ) aa
  19. )
  20. --SQL5.
  21. SELECT yaosuId, showTitle, FieldName
  22. FROM T_YaosuInfo
  23. WHERE yaosuId IN (
  24. '1005','1001','1006')
  25. -------------------------------------------------------------
  26. -----------------------------------------------------------
  27. --先取要素,再取数据.查询结果为空
  28. select b.showTitle,c.rq,c.TurangShidu,c.Guangzhaodu
  29. from T_ShebeiInfo a,(
  30. SELECT yaosuId, showTitle, FieldName
  31. FROM T_YaosuInfo
  32. WHERE yaosuId IN (
  33. SELECT ('''' + REPLACE(aa.yaosuNames, '|', ''',''') + '''') AS yaosuNames
  34. FROM (
  35. SELECT yaosuNames
  36. FROM T_ShebeiInfo
  37. WHERE yaosuNames IS NOT NULL
  38. AND datalength(yaosuNames) <> 0
  39. ) aa
  40. )
  41. ) b,T_ShebeiData c
  42. where a.shebeiId=c.shebeiId
  43. --------------
  44. --先取要素,再取数据.自定义要素Id,可查询结果
  45. select b.showTitle,c.rq,c.TurangShidu,c.Guangzhaodu
  46. from T_ShebeiInfo a,(
  47. SELECT yaosuId, showTitle, FieldName
  48. FROM T_YaosuInfo
  49. WHERE yaosuId IN (
  50. '1005','1001','1006')
  51. ) b,T_ShebeiData c
  52. where a.shebeiId=c.shebeiId
  53. ------------------------------
  54. --先取数据,再取要素:实时表c的多个字段名,为要素表b中表字段名称的值

(3)数据库表 存储m³

1.存储m³的字段类型,不能为varchar,需改成nvarchar

2_方式1.手动操作修改字段值:表》右键》编辑前200行(E)》m³

2_方式2.sql语句: 插入insert into 表名  (字段名) values(N'm³')

                              修改update 表名 set 字段名=N'm³'  where 主键名=主键值

--完整示例

  1. --新建表名tableName,字段名fieldName
  2. create table tableName (fieldName nvarchar(10))
  3. --插入字段值m³,N将字符改为unicode字符
  4. insert into tableName select N'm³'
  5. --列表查询
  6. select * from tableName
  7. --删除表tableName
  8. drop table tableName

2、MySQL

(1)将mysql数据库中的一个表导入到另一个数据库表中

  1. 源数据库db1,源表source_table.sql;目标数据库db2,目标表target_table.sql
  2. 1.方法一:
  3. 登录导出到的数据库,执行
  4. create table target_table select * from db1.source_table;
  5. select * from db2.target_table;
  6. 2.方法二:
  7. 在cmd下执行,mysqldump -u 用户名 -p db1 source_table file=d:/source_table.sql; 输入密码。
  8. 登录db2 执行 source d:/source_table.sql;
  9. 3.方法三:
  10. 登录db1 执行 select * from source_table into outfile "d:/source_table.txt"; 导出纯数据格式。
  11. 建一张和源表结构一样的空目标表;
  12. 登录db2 执行 load data infile d:/source_table.txt into table target_table。
  13. 4.方法四:
  14. 建一个odbc连接,先导出到access中,再导出到另一个库中。
  15. 目标表没有主键,更新表主键:
  16. update t_air_station set 修正的字段和值 where 所有文件和旧值 limit 1

(2)mysql库表设计变更

  1. # 1、更改字段名
  2. ALTER TABLE 表名 RENAME column 旧新段 to 新字段 ; (推荐)
  3. ALTER TABLE 表名 CHANGE column 旧新段 新字段 字段类型 ; (这种办法COMMENT会清空,不建议用)
  4. # 2、修改字段类型
  5. # 修改表company的字段company_name,varchar长度100、不为空、备注为单位名称
  6. ALTER TABLE company MODIFY column company_name VARCHAR(100) NOT NULL COMMENT '单位名称';
  7. # 修改表sys_oper_log的字段json_result,为text、 备注为返回参数
  8. ALTER TABLE sys_oper_log MODIFY column json_result text COMMENT '返回参数';
  9. # 3、新增字段
  10. # tb_work_order_info表,新增字段work_order_detail,varchar长度100、可为空、默认初始值为NULL、备注为工单详情
  11. ALTER TABLE tb_work_order_info add work_order_detail varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工单详情';
  12. # tb_work_order_info表,新增字段remark,varchar长度50、可为空、默认初始值为NULL、备注为备注
  13. ALTER TABLE tb_work_order_info add remark varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注';
  14. # tb_shop表,新增一个字段remark,varchar长度100、可为空、默认初始值为NULL、备注为备注
  15. ALTER TABLE tb_shop add shop_remark varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注';

(3)mysql库表数据格式化处理

  1. # 1、将A表某列字段,全部插入到B表某列字段
  2. insert into t_b (id,qyyhid) SELECT id id1,id id2 from t_a;
  3. # 2、根据表tb_xunjian_info中,字段purchase_order_url以"http://"开头,查询数据;
  4. select count(*) from tb_xunjian_info
  5. where shop_id=94610 and purchase_order_url like "http://%";
  6. UPDATE tb_xunjian_info SET purchase_order_url = (REPLACE(purchase_order_url,'http://jrxjfw.enuoyun.com:80/prod-api',''))
  7. where shop_id=94610 and purchase_order_url like "http://%";
  8. # 3、根据表tb_xunjian_info中,字段purchase_order_url以"http://"开头,查询数据;并修改替换shop_sign_url中的字符串。
  9. UPDATE tb_xunjian_info SET purchase_order_url = (REPLACE(purchase_order_url,'http://jrxjfw.enuoyun.com:80/prod-api',''))
  10. where purchase_order_url like "http://%";
  11. UPDATE tb_xunjian_info SET shop_sign_url = (REPLACE(shop_sign_url,'http://jrxjfw.enuoyun.com:80/prod-api',''))
  12. where shop_sign_url like "http://%";
  1. # 1、必须先执行步骤(1
  2. # 查询用户表sys_user中字段user_id、bank_id;然后将查询结果,新增到用户银行关联表sys_user_bank
  3. insert into sys_user_bank (user_id,bank_id) SELECT user_id ,bank_id from sys_user;
  4. # 根据bank_id为空,删除sys_user_bank表中的数据行
  5. delete from sys_user_bank where bank_id is null;
  6. # 根据bank_id,查询t2表的数据字段parent_id、ancestors;然后将查询结果,更新到t1表中
  7. UPDATE sys_user_bank t1 JOIN sys_bank t2 ON t1.bank_id = t2.bank_id SET t1.parent_id = t2.parent_id, t1.ancestors = t2.ancestors;
  8. # 2、才能再执行步骤(2
  9. # 用户表sys_user,修改bankId字段值为空
  10. update sys_user set bank_id=null;
  1. # 根据字段qysh、spbm、jfnd,两表关联查询;
  2. select *
  3. from dkhyw_dqjfgl t1
  4. left JOIN dkhyw_fwf_order t2 ON (t1.qysh = t2.qysh and t1.spbm = t2.spbm and t1.jfnd = t2.jfnd)
  5. GROUP BY t1.id
  6. # 根据字段qysh、spbm、jfnd,两表关联查询;然后更新查询结果,t1表中的字段ifInput
  7. UPDATE dkhyw_dqjfgl t1
  8. left JOIN dkhyw_fwf_order t2 ON (t1.qysh = t2.qysh and t1.spbm = t2.spbm and t1.jfnd = t2.jfnd)
  9. SET t1.ifInput ='0';

(4)字段格式化处理

  1. # 根据'-'将表字段shop_no,拆分成新的2个字段merchant_code、terminal_code
  2. SELECT tsv.shop_no,
  3. substring_index( tsv.shop_no, '-', 1 ) merchant_code,
  4. tsv.shop_name,
  5. if(LOCATE('-',tsv.shop_no)<>0,substring_index( tsv.shop_no, '-', - 1 ),'') terminal_code,
  6. tsv.id
  7. FROM
  8. `tb_shop_view` tsv

(5)删除查询出来的数据

  1. -- 根据条件,查询数据
  2. SELECT * from
  3. tb_work_order_info
  4. where 1=1
  5. and (work_order_status='0' or work_order_status='2')
  6. and create_date BETWEEN '2022-07-01 00:00:00' and '2022-07-10 23:59:59';
  7. -- 使用delete替换SELECT * ;将直接删除查询出来的数据
  8. delete from
  9. tb_work_order_info
  10. where 1=1
  11. and (work_order_status='0' or work_order_status='2')
  12. and create_date BETWEEN '2022-07-01 00:00:00' and '2022-07-10 23:59:59';

(6)多表使用集合处理

  1. ## 查询表1和表2的交集;即查询所有订单中,有效的订单号。(推荐使用,查询速度快)
  2. SELECT t1.ddh ddh1,t2.ddh ddh2
  3. FROM tb_ddh1_order t1
  4. inner join tb_ddh2_effect t2 on t2.ddh=t1.ddh;
  5. ## 查询表1和表2的交集,和表三的差集;即查询所有有效订单中,未使用过的订单号。(不推荐使用,加上left join后查询速度慢)
  6. SELECT t1.ddh ddh1,t2.ddh ddh2,t3.ddh ddh3
  7. FROM tb_ddh1_order t1
  8. inner join tb_ddh2_effect t2 on t2.ddh=t1.ddh
  9. left join tb_ddh3_rz t3 on t3.ddh=t2.ddh
  10. where t3.ddh is null;

3、SQLServer

 (1)sqlserver 删除表中  指定字符串

源表T

"单据编号"              "航班计划日期"      "航班号"          "起飞航站代码"          "降落航站代码"
"C-026413700"      "2013-2-11"           "CA1231"        "PEK"                        "XIY"
"C-026413699"      "2013-2-11"           "CA1231"        "PEK"                        "XIY"
"C-026413698"      "2013-2-11"           "CA1231"        "PEK"                        "XIY"
"C-026413697"      "2013-2-11"           "CA1231"        "PEK"                        "XIY"
"C-026413696"      "2013-2-11"           "CA1231"        "PEK"                        "XIY"

目标表T:

单据编号                    航班计划日期       航班号                起飞航站代码             降落航站代码
C-026413700            2013-2-11            CA1231              PEK                           XIY
C-026413699            2013-2-11            CA1231              PEK                           XIY
C-026413698            2013-2-11            CA1231              PEK                           XIY
C-026413697            2013-2-11            CA1231              PEK                           XIY
C-026413696            2013-2-11            CA1231              PEK                           XIY

  1. --如果数据库中存在 表T,则删除表T
  2. if not object_id(N'T') is null
  3. drop table T
  4. Go
  5. --新建表T
  6. Create table T(["单据编号"] nvarchar(33),["航班计划日期"] nvarchar(31),["航班号"] nvarchar(28),["起飞航站代码"] nvarchar(25),["降落航站代码"] nvarchar(25))
  7. SELECT * FROM dbo.T
  8. --新增数据
  9. Insert T
  10. select N'"C-026413700"',N'"2013-2-11"',N'"CA1231"',N'"PEK"',N'"XIY"' union all
  11. select N'"C-026413699"',N'"2013-2-11"',N'"CA1231"',N'"PEK"',N'"XIY"' union all
  12. select N'"C-026413698"',N'"2013-2-11"',N'"CA1231"',N'"PEK"',N'"XIY"' union all
  13. select N'"C-026413697"',N'"2013-2-11"',N'"CA1231"',N'"PEK"',N'"XIY"' union all
  14. select N'"C-026413696"',N'"2013-2-11"',N'"CA1231"',N'"PEK"',N'"XIY"'
  15. Go
  16. SELECT * FROM dbo.T
  17. --更新表T中数据:将数据中 双隐号 删除
  18. UPDATE T
  19. SET ["单据编号"] = REPLACE(["单据编号"], '"', '') ,
  20. ["航班计划日期"] = REPLACE(["航班计划日期"], '"', ''),
  21. ["航班号"] = REPLACE(["航班号"], '"', ''),
  22. ["起飞航站代码"] = REPLACE(["起飞航站代码"], '"', ''),
  23. ["降落航站代码"] = REPLACE(["降落航站代码"], '"', '')
  24. SELECT * FROM dbo.T
  25. --更新表T中头字段:将头字段中 双隐号 删除
  26. EXEC sp_rename 'T.["单据编号"]','单据编号'
  27. EXEC sp_rename 'T.["航班计划日期"]','航班计划日期'
  28. EXEC sp_rename 'T.["航班号"]','航班号'
  29. EXEC sp_rename 'T.["起飞航站代码"]','起飞航站代码'
  30. EXEC sp_rename 'T.["降落航站代码"]','降落航站代码'
  31. SELECT * FROM dbo.T
  32. --删除表T中数据
  33. delete from T
  34. SELECT * FROM dbo.T

执行结果:

sqlserver》单击数据库》新建查询(N)》复制SQL语句到空白处》 !执行(X)

 (2)sqlserver 将  “用  特定字符  分隔的一个字段”  拆分成多个字段,然后两个表之间数据更新

将源TXT文件sourceFile_table.txt导入数据库,生成新表dbo.sourceFile_table。新增字段lon、lat、shi、xian

源表dbo.sourceFile_table

源表dbo.GeographyInfo

SQL语句:

  1. --删除表dbo.sourceFile_table中 双隐号
  2. UPDATE sourceFile_table
  3. SET [s_id] = REPLACE([s_id],'"','') ,
  4. [s_lon_lat] = REPLACE([s_lon_lat],'"','') ,
  5. [s_shi_xian] = REPLACE([s_shi_xian],'"','')
  6. SELECT * FROM sourceFile_table
  7. --查询表dbo.sourceFile_table:将逗号分隔的一个字段拆分成多个字段 ;将空格分隔的一个字段拆分成多个字段
  8. SELECT TOP 1000 [s_id],
  9. [s_lon_lat],
  10. [s_shi_xian],
  11. substring([s_lon_lat],1,charindex(',',[s_lon_lat])) lon,
  12. substring([s_lon_lat],charindex(',',[s_lon_lat]) +1,30) lat,
  13. substring(s_shi_xian,1,charindex(' ',s_shi_xian)) shi,
  14. substring(s_shi_xian,charindex(' ',s_shi_xian) +1,30) xian
  15. from sourceFile_table
  16. --更新表dbo.sourceFile_table:将逗号分隔的一个字段拆分成多个字段 ;将空格分隔的一个字段拆分成多个字段
  17. UPDATE sourceFile_table
  18. SET lon=substring([s_lon_lat],1,charindex(',',[s_lon_lat])),
  19. lat=substring([s_lon_lat],charindex(',',[s_lon_lat]) +1,30),
  20. shi=substring([s_shi_xian],1,charindex(' ',[s_shi_xian])),
  21. xian=substring([s_shi_xian],charindex(' ',[s_shi_xian]) +1,30)
  22. SELECT * FROM dbo.sourceFile_table
  23. --更新表dbo.sourceFile_table:将拆分后, 字段lon数据中 逗号 删除,字段shi数据中 空格 删除
  24. UPDATE sourceFile_table
  25. SET [lon] = REPLACE([lon],',',''),
  26. [shi] = REPLACE([shi],' ','')
  27. SELECT * FROM dbo.sourceFile_table
  28. --更新表dbo.GeographyInfo:两个表之间数据更新,更新表dbo.GeographyInfo中字段shi、xian、lon、lat数据
  29. update GeographyInfo
  30. set GeographyInfo.shi=TS.shi,
  31. GeographyInfo.xian=TS.xian,
  32. GeographyInfo.lon=TS.lon,
  33. GeographyInfo.lat=TS.lat
  34. from GeographyInfo,sourceFile_table TS
  35. where GeographyInfo.rerid=TS.s_id
  36. --查询dbo.GeographyInfo:表更新后的数据,最新1000条数据,根据id降序排序
  37. SELECT TOP 1000 [id],
  38. [rerid],
  39. [shi],
  40. [xian],
  41. [lon],
  42. [lat]
  43. FROM [dbo].[GeographyInfo]
  44. order by id desc
  45. --删除表dbo.sourceFile_table数据
  46. delete from sourceFile_table

执行结果:

sqlserver》单击数据库》新建查询(N)》复制SQL语句到空白处》 !执行(X)

。。。

-----------------------------------------------------------------------简单示例1-----------------------------------------------------------------------

SQL语句1:

  1. --新建表test
  2. create table test(pp varchar(30))
  3. go
  4. select * from test
  5. --新增数据
  6. insert into test values('耐克 DS001'),('安踏 AT002'),('阿迪达斯 AD009')
  7. go
  8. select * from test
  9. --查询表test:将空格分隔的一个字段拆分成多个字段
  10. select
  11. substring(pp,1,charindex(' ',pp))pp1,
  12. substring(pp,charindex(' ',pp) +1,30) pp2
  13. from test
  14. go
  15. --删除表test
  16. drop table test
  17. go

执行结果:

sqlserver》单击数据库》新建查询(N)》复制SQL语句到空白处》 !执行(X)

SQL语句2:

  1. --
  2. SELECT LEFT(商品名称, CHARINDEX(' ', 商品名称 + ' ') - 1) AS 品牌 ,
  3. STUFF(商品名称, 1, CHARINDEX(' ', 商品名称 + ' ') + 1, '') AS 商品代码
  4. FROM ( VALUES ( '耐克 DS001'), ( '安踏 AT002'), ( '阿迪达斯 AD009') ) t ( 商品名称 );
  5. --
  6. select '耐克 DS001' as col1 into #Idontkonwthis
  7. select left(col1,(select charindex(' ',col1))), substring(col1,(select charindex(' ',col1)),(select len(col1))) from #Idontkonwthis

执行结果:

-----------------------------------------------------------------------简单示例2-----------------------------------------------------------------------

SQL语句:

  1. --①横向
  2. declare @str1 varchar(max)
  3. set @str1='福尔摩斯,tellme,他,在哪里'
  4. set @str1=REPLACE(@str1,',',''',''')
  5. exec ('select '''+@str1+'''')
  6. --②竖向
  7. declare @str2 varchar(max)
  8. set @str2='福尔摩斯,tellme,他,在哪里'
  9. set @str2='select '''+replace(@str2,',',''' as col union all select ''')
  10. --print @str
  11. exec(@str2+'''')
  12. --xml解法
  13. declare @a nvarchar(max)
  14. declare @xml xml
  15. set @a='aa;bb;cc;dd'
  16. set @xml=cast('<root><col val="'+replace(@a,';','" /><col val="')+'"></col></root>' as XML)
  17. -- select @xml
  18. select n=t.c.value('@val','varchar(255)') from @xml.nodes('/root/col') t(c)

执行结果:

sqlserver》单击数据库》新建查询(N)》复制SQL语句到空白处》 !执行(X)

4、Oracle

(1)oracle语法

  1. -- orcale表名、字段名必须大写,并且字母开头,否则要加英文双引号,不然无法识别
  2. -- orcale数据更新 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  3. -- 理论支持
  4. UPDATE DEMO_T1 t1
  5. SET (字段一,字段二,...) = (select 字段一,字段二,... from DEMO_T2 T2 where T2.FNAME = T1.FNAME)
  6. WHERE EXISTS(SELECT 1 FROM DEMO_T2 T2 WHERE T2.FNAME = T1.FNAME);
  7. -- 实际操作
  8. UPDATE SELF_NG_JR_PAD_SJGZ_20220907 t1
  9. SET t1.ISVALID=0 WHERE EXISTS
  10. (-- 当查询出来的数据b表的pkid等于原表的pkid时,更新数据
  11. SELECT 1 FROM
  12. (--取序号大于1的数据出来
  13. SELECT * FROM
  14. (-- 将符合条件的数据查出,并打上序号id
  15. select PKID,KHMC,row_number() over (partition by KHMC ORDER BY pkid ) as id
  16. from SELF_NG_JR_PAD_SJGZ_20220907
  17. WHERE SJJD='0' AND KHMC='三河市绿农园林苗木有限公司'
  18. ) a WHERE a.id>1
  19. ) b WHERE b.PKID=t1.PKID
  20. );
  21. -- orcale数据更新 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  22. -- orcale数据插入<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  23. INSERT INTO "20220907_jrsjcl" (PKID)
  24. SELECT a.PKID pkid FROM
  25. (-- 将符合条件的数据查出,并打上序号id
  26. select PKID,KHMC,row_number() over (partition by KHMC ORDER BY pkid ) as id
  27. from SELF_NG_JR_PAD_SJGZ_20220907
  28. WHERE SJJD='0' AND KHMC='三河市绿农园林苗木有限公司'
  29. ) a WHERE a.id>1 ;
  30. -- orcale数据插入>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

(2)分组查询 

  1. --查询条件,需与group by 后面的一致;
  2. --根据2个条件分组查询,结果数量为1
  3. select PKID,KHMC,COUNT(1) from SELF_NG_JR_PAD_SJGZ WHERE SJJD='0' GROUP BY PKID,KHMC;
  4. --根据1个条件分组查询,结果数量为>1
  5. select KHMC,COUNT(1) from SELF_NG_JR_PAD_SJGZ WHERE SJJD='0' GROUP BY KHMC ;

(3)分组去重

I、第1种数据去重 :同一客户名称KHMC,同一沟通阶段为(SJJD='0' or SJJD is null);此类客户只保留一个最新的。 

①先查询数据 

  1. --# 方式1、KHMC存在sameKhmcRowNo大于1,即为重复的客户
  2. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,除了最大的其他所有pkid2
  3. SELECT * FROM
  4. (
  5. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  6. row_number() OVER(PARTITION BY KHMC ORDER BY PKID desc) AS sameKhmcRowNo
  7. from SELF_NG_JR_PAD_SJGZ
  8. WHERE 1=1
  9. and KHLY='22白名单'
  10. and ISVALID=1
  11. and (SJJD='0' or SJJD is null )
  12. ) A
  13. WHERE A.sameKhmcRowNo>1;
  14. --# 方式2、KHMC存在sameKhmcRowNo大于1,即为重复的客户
  15. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,除了最大的其他所有pkid2
  16. SELECT * FROM
  17. (
  18. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  19. COUNT(1) OVER(PARTITION BY KHMC ORDER BY PKID desc) AS sameKhmcRowNo
  20. from SELF_NG_JR_PAD_SJGZ
  21. WHERE 1=1
  22. and KHLY='22白名单'
  23. and ISVALID=1
  24. and (SJJD='0' or SJJD is null )
  25. ) A
  26. WHERE A.sameKhmcRowNo>1;
  27. --# 方式3.1、KHMC存在khmcTotalCount大于1,即为重复的客户
  28. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,所有pkid2
  29. SELECT * FROM
  30. (
  31. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  32. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  33. from SELF_NG_JR_PAD_SJGZ
  34. WHERE 1=1
  35. and KHLY='22白名单'
  36. and ISVALID=1
  37. and (SJJD='0' or SJJD is null )
  38. ) A
  39. WHERE A.sameKhmcTotalCount>1;
  40. --# 方式3.2、KHMC存在khmcTotalCount大于1,即为重复的客户
  41. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,除了最大的其他所有pkid2
  42. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,所有pkid
  43. SELECT A.pkid2 FROM
  44. (
  45. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  46. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  47. from SELF_NG_JR_PAD_SJGZ
  48. WHERE 1=1
  49. and KHLY='22白名单'
  50. and ISVALID=1
  51. and (SJJD='0' or SJJD is null )
  52. ) A
  53. WHERE A.sameKhmcTotalCount>1
  54. --补集
  55. MINUS
  56. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,最大的pkid2
  57. select t.pkid2 from
  58. (
  59. select sj.khmc ,count(1) ,max(PKID) pkid2
  60. from SELF_NG_JR_PAD_SJGZ sj
  61. WHERE 1=1
  62. and KHLY='22白名单'
  63. and ISVALID=1
  64. and (sj.SJJD='0' or sj.SJJD is null )
  65. group by sj.khmc
  66. having count(1)>1
  67. )t;

  ②查询并修改数据 

  1. --# 方式1、KHMC存在sameKhmcRowNo大于1,即为重复的客户
  2. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,除了最大的其他所有pkid2
  3. SELECT * FROM
  4. (
  5. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  6. row_number() OVER(PARTITION BY KHMC ORDER BY PKID desc) AS sameKhmcRowNo
  7. from SELF_NG_JR_PAD_SJGZ
  8. WHERE 1=1
  9. and KHLY='22白名单'
  10. and ISVALID=1
  11. and (SJJD='0' or SJJD is null )
  12. and KHMC='霸州市海硕金属制品有限公司'
  13. ) A
  14. WHERE A.sameKhmcRowNo>1;
  15. --sql模板update N n set n.field_name='' where exists (select 1 from M m where m.id=n.id);
  16. --根据表M查询结果,修改表N中字段值
  17. update SELF_NG_JR_PAD_SJGZ n set n.ISVALID=0
  18. where exists
  19. (
  20. select 1 from
  21. (
  22. -------开始
  23. SELECT * FROM
  24. (
  25. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  26. row_number() OVER(PARTITION BY KHMC ORDER BY PKID desc) AS sameKhmcRowNo
  27. from SELF_NG_JR_PAD_SJGZ
  28. WHERE 1=1
  29. and KHLY='22白名单'
  30. and ISVALID=1
  31. and (SJJD='0' or SJJD is null )
  32. and KHMC='霸州市海硕金属制品有限公司'
  33. ) A
  34. WHERE A.sameKhmcRowNo>1
  35. -------结束
  36. ) m where m.pkid2=n.PKID
  37. );

II、第1、2种数据都去除 :同一客户名称KHMC,存在沟通阶段为(SJJD='0' or SJJD is null);此类客户都不保留。 

①先查询数据 

  1. --# 方式3.1、KHMC存在khmcTotalCount大于1,即为重复的客户
  2. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效);查到的重复客户中,所有pkid2
  3. SELECT * FROM
  4. (
  5. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  6. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  7. from SELF_NG_JR_PAD_SJGZ
  8. WHERE 1=1
  9. and KHLY='22白名单'
  10. and ISVALID=1
  11. ) A
  12. WHERE A.sameKhmcTotalCount>1;
  13. --# 方式3.2、KHMC存在khmcTotalCount大于1,即为重复的客户
  14. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,所有pkid2
  15. SELECT * FROM
  16. (
  17. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  18. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  19. from SELF_NG_JR_PAD_SJGZ
  20. WHERE 1=1
  21. and KHLY='22白名单'
  22. and ISVALID=1
  23. ) A
  24. WHERE A.sameKhmcTotalCount>1
  25. and (A.SJJD='0' or A.SJJD is null );
  26. --# 方式3.3、KHMC存在khmcTotalCount大于1,即为重复的客户
  27. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,所有khmc2
  28. SELECT B.khmc2 FROM
  29. (
  30. SELECT * FROM
  31. (
  32. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  33. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  34. from SELF_NG_JR_PAD_SJGZ
  35. WHERE 1=1
  36. and KHLY='22白名单'
  37. and ISVALID=1
  38. ) A
  39. WHERE A.sameKhmcTotalCount>1
  40. and (A.SJJD='0' or A.SJJD is null )
  41. ) B
  42. group by B.khmc2;

②查询并修改数据  

  1. --# 方式3.3、KHMC存在khmcTotalCount大于1,即为重复的客户
  2. --根据数据来源KHLY为22白名单、是否有效ISVALID为有效(0无效|1有效)、沟通阶段SJJD为未沟通过;查到的重复客户中,所有khmc2
  3. SELECT B.khmc2 FROM
  4. (
  5. SELECT * FROM
  6. (
  7. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  8. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  9. from SELF_NG_JR_PAD_SJGZ
  10. WHERE 1=1
  11. and KHLY='22白名单'
  12. and ISVALID=1
  13. ) A
  14. WHERE A.sameKhmcTotalCount>1
  15. and (A.SJJD='0' or A.SJJD is null )
  16. ) B
  17. group by B.khmc2;
  18. --sql模板update N n set n.field_name='' where exists (select 1 from M m where m.id=n.id);
  19. --根据表M查询结果,修改表N中字段值
  20. update SELF_NG_JR_PAD_SJGZ n set n.ISVALID=0
  21. where exists
  22. (
  23. select 1 from
  24. (
  25. -------开始
  26. SELECT B.khmc2 FROM
  27. (
  28. SELECT * FROM
  29. (
  30. select PKID pkid2,KHMC khmc2,SJJD, KHLY,ISVALID,
  31. COUNT(1) OVER(PARTITION BY KHMC) AS sameKhmcTotalCount
  32. from SELF_NG_JR_PAD_SJGZ
  33. WHERE 1=1
  34. and KHLY='22白名单'
  35. and ISVALID=1
  36. ) A
  37. WHERE A.sameKhmcTotalCount>1
  38. and (A.SJJD='0' or A.SJJD is null )
  39. ) B
  40. group by B.khmc2
  41. -------结束
  42. ) m where m.khmc2=n.KHMC
  43. );

5、MyBatis

(1)mybatis返回数据库自动生成主键 

  1. // 一、ShopInvoiceMapper.xml文件中
  2. <!--实体对象ShopInvoice的字段invoiceInfoId;对应表sys_shop_invoice的主键为invoice_info_id。-->
  3. <insert id="insertShopInvoice" parameterType="ShopInvoice" keyProperty="invoiceInfoId" useGeneratedKeys="true">
  4. insert into sys_shop_invoice ****
  5. </insert>
  6. // 二、**.java文件中
  7. // 数据库表sys_shop_invoice,新增一条数据
  8. shopInvoiceService.insertShopInvoice(shopInvoice);
  9. // 获取数据库表sys_shop_invoice,新增一条数据的invoiceInfoId
  10. Long invoiceInfoId=shopInvoice.getInvoiceInfoId();

(2)select in

  1. @Column
  2. @Schema(allowableValues = "菜单状态 1正常 2停用")
  3. String status;
  4. @Schema(allowableValues = "批量状态 逗号隔开的字符串")
  5. String statuss;
  6. @Schema(allowableValues = "批量状态 数组")
  7. String[] statussArr;
  1. <if test="statussArr != null">
  2. and res.status in
  3. <foreach collection="statussArr" item="item" index="index" open="(" separator="," close=")">
  4. #{item,jdbcType=VARCHAR}
  5. </foreach>
  6. </if>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/931459
推荐阅读
相关标签
  

闽ICP备14008679号