首先我们新建一张名为XIHONGSHISHOUFU
的表,这张表是评委会初步评选出的西虹市首富的候选人员,下面的SQL语句包含建表和插入数据的部分:
CREATE TABLE XIHONGSHISHOUFU (
REGION_ID INTEGER,
NAME VARCHAR(20),
MONEY DECIMAL(20,2),
AGE INTEGER
);
INSERT INTO XIHONGSHISHOUFU VALUES
(101,‘小明‘,100.00,30),
(102,‘小王‘,200.00,35),
(104,‘小李‘,300.00,25);
这张表的数据展示如下:
REGION_ID | NAME | MONEY | AGE |
---|---|---|---|
101 | 小明 | 100.00 | 30 |
102 | 小王 | 200.00 | 35 |
104 | 小李 | 300.00 | 25 |
我们这里简单地解释一下上面的数据,XIHONGSHISHOUFU
这张表包含了如下信息:
- REGION_ID:区号;
- NAME:这个区目前评审出的最有钱人的姓名;
- MONEY:这个区最有钱的人的资产估值;
- AGE:这个人的年龄。
然而呢,接下来评委会收到了一张新的名单,是之前以往的一些有钱人的清单。
所以评委会现在需要做的是更新一下数据,从而得到新的西渱市首富清单。
新的有钱人清单的表结构和上面的表是一样的,下面是这张表SHOUFU_BACKUP
的建表和插入数据的SQL语句:
CREATE TABLE SHOUFU_BACKUP (
REGION_ID INTEGER,
NAME VARCHAR(20),
MONEY DECIMAL(20,2),
AGE INTEGER
);
INSERT INTO SHOUFU_BACKUP VALUES
(101,‘丁丁‘,50.00,20),
(102,‘东东‘,500.00,30),
(103,‘可可‘,700.00,25),
(104,‘乐乐‘,800.00,15);
这张表的数据展示如下:
REGION_ID | NAME | MONEY | AGE |
---|---|---|---|
101 | 丁丁 | 50.00 | 20 |
102 | 东东 | 500.00 | 30 |
103 | 可可 | 700.00 | 25 |
104 | 乐乐 | 800.00 | 15 |
接下来我需要将SHOUFU_BACK
表中的数据更新到XIHONGSHISHOUFU
表中,使得,新的数据能够体现出每个区对应的首富,并且18岁以下的人不能参与这次评选(18岁以下的人应该在学校里面好好读书),所以接下来我们可以使用MERGE INTO
语句来实现这个“能改就改,不能改就插”的效果,SQL语句如下:
MERGE INTO XIHONGSHISHOUFU A
USING SHOUFU_BACKUP B
ON A.REGION_ID=B.REGION_ID
WHEN MATCHED AND b.AGE>=18 THEN UPDATE SET
(REGION_ID,NAME,MONEY,AGE)=(B.REGION_ID,B.NAME,B.MONEY,B.AGE)
WHEN NOT MATCHED AND B.AGE>=18
THEN INSERT VALUES (B.REGION_ID,B.NAME,B.MONEY,B.AGE)
此时再去查看一下XIHONGSHISHOUFU
的清单,得到结果如下:
REGION_ID | NAME | MONEY | AGE |
---|---|---|---|
101 | 丁丁 | 50.00 | 20 |
102 | 东东 | 500.00 | 30 |
104 | 小李 | 300.00 | 25 |
103 | 可可 | 700.00 | 25 |
可以看到,首富的信息,能更新的都已经更新了,能新增的都已经新增了,并且18岁以下的青少年并没有参与本次评选。
原文地址:https://www.cnblogs.com/zifeiy/p/10337866.html
时间: 2024-10-29 11:03:33