前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(1)

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(1)

作者头像
百里丶落云
发布2022-11-14 17:10:16
2850
发布2022-11-14 17:10:16
举报
文章被收录于专栏:享~方法享~方法

前言

作为一个程序员,时时刻刻都要忙碌于将实际业务转化为代码的繁忙工作中.你可能从事前端工作,展示漂亮的界面, 你是后端,可能按照业务逻辑疯狂封装着接口. 最终种种数据落地都要涉及到数据,

将CURD 到数据库中. 现在很多框架集成了多种SQL功能,但是逻辑复杂的业务仍然要使用原生SQL.

结合多年经验,百里这里列举出你可能未发现的SQL一些'用法'!!

大家好,这里是百里,SQL 碎碎念, 希望大家喜欢.

一 、 多表嵌套关系乱,修改起来'真'复杂

工作中会遇到非常多的多种业务相互嵌套,然后按照条件在修改某个表的数据, 然而传统的书,视频学习资料中,告诉的你就是

UPDATA 字段1 = 内容1 , 字段2 = 内容2 FROM 表 where 条件1 条件2

这样的内容. 对于新手来说肯定看到的一个头两个大 .

解决办法

创建临时表,将复杂的数据逻辑写入到临时表中,并将需要改的关联字段去重,设定好条件,

使用UPDATA 被修改表字段1 = 临时表内容1 , 被修改表2 = 临时表内容2 from 表1 inner join 临时表 on 关系1 = 关系2 where 条件1 条件2

例子:

假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price;另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。  在Mysql中我们有几种手段可以做到这一点,一种是update table1 t1, table2 ts ...的方式: ···

代码语言:javascript
复制
UPDATE product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId 
SET pp.price = pp.price * 0.8 
WHERE p.dateCreated < '2022-11-01' 

二、 数据增加‘真’麻烦,只能逐条INSERT ?

我们知道数据库中是有WHILE ,和游标的, 结合新增数据我们也是按照传中的insert (字段1,字段2..) into values(值1,值2...) ,循环逐条新增数据反倒麻烦, 可能对于很多高手来说这条可能觉得小题大做!但是百里当入手时,领导让我批量增加数据,我这还where 加条件判断呢....ε=(´ο`*)))唉究极黑历史 .

解决办法

在SQL 中 可以使用 ,INSERT INTO 表 select 值 ... from (表) where 条件1 的形式批量增加数据,前提要保证字段位置对的上.

例子

假定我们有3张表,

表A : 工号,姓名,性别,年龄. 表B : 工号,地址,电话, 这个时候有个接口需要自建立表C, 取工号,姓名,地址电话 其他字段. 这个时候就使用批量增加的方式, 减少代码量

代码语言:javascript
复制
insert into 表C from
select a.姓名 , b.地址,b.电话 from  表A a inner join  表b on a.工号 = b.工号 where  条件...

三、 复杂数据真麻烦,转换格式‘真’头疼

工作中肯定会遇到各种奇葩数据,然后又需要你整理成领导想要的数据,其中最常规也是最头疼的就是,行列转换了. 比如这种

image.png
image.png

让你统计出 user ,no, type 对应的数量, 这时就很麻烦.

解决办法

代码语言:javascript
复制
#定义数据
declare @t table(usser int ,no int ,a int,b int, c int)  
insert into @t select 1,1,21,34,24  
union all select 1,2,42,25,16
#转换
SELECT usser,no,Type=attribute, Num=value  
FROM @t  
  UNPIVOT  
  (  
    value FOR attribute IN([a], [b], [c])  
  ) AS UPV
image.png
image.png

今天的不开心就到此为止吧, 明天依旧光芒万丈~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一 、 多表嵌套关系乱,修改起来'真'复杂
    • 解决办法
      • 例子:
      • 二、 数据增加‘真’麻烦,只能逐条INSERT ?
        • 解决办法
          • 例子
          • 三、 复杂数据真麻烦,转换格式‘真’头疼
            • 解决办法
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档