【SQL】大小表查询、更新表语句

1、更新表时,根据另一张表的数据进行更新update from where

UPDATE B表 SET B表.字段名 =

(SELECT A表.字段名 FROM A表 WHERE A表.ID = B表.ID);

UPDATE A

SET A.field_name = B.field_name

FROM B

WHERE A.matching_field = B.matching_field;

UPDATE employees AS A

SET A.department_id = departments.id

FROM departments AS B

WHERE A.department_name = B.department_name;

sql 复制代码
update IM_CS_SYSTEM_NEXTHAN_CONFIG_temp x set x.login_id = y.login_id from (
select b.LOGIN_ID,b.login_code,a.supply_org_code from IM_CS_SYSTEM_NEXTHAN_CONFIG_temp a
left join EP_R_USER_LOGIN b on a.supply_org_code= b.login_code
) y
where 
x.supply_org_code= y.login_code and y.LOGIN_ID is NOT NULL;

2、sql 查询大表有这个数据,但是小表没有

在数据库中处理大表和小表的数据比较问题时,通常涉及到查找大表中存在但在小表中不存在的记录。这可以通过几种不同的SQL查询方法来实现,具体取决于你使用的数据库系统(如MySQL、PostgreSQL、SQL Server等)。以下是一些常见的方法:

1. 使用 NOT EXISTS 子查询

如果你想要找出所有在大表中存在但在小表中不存在的记录,可以使用 NOT EXISTS 子查询。例如,假设有两个表:large_table 和 small_table,并且它们都有一个共同的字段 id:

SELECT l.*

FROM large_table l

WHERE NOT EXISTS (

SELECT 1

FROM small_table s

WHERE s.id = l.id

);

这个查询会返回所有在 large_table 中但不在 small_table 中的记录。

2. 使用 LEFT JOIN 和 IS NULL

另一种方法是使用 LEFT JOIN,然后检查连接结果中的小表部分是否为空:

SELECT l.*

FROM large_table l

LEFT JOIN small_table s ON l.id = s.id

WHERE s.id IS NULL;

这个查询也会返回所有在 large_table 中但不在 small_table 中的记录。

3. 使用 EXCEPT(在SQL Server和PostgreSQL中)

如果你使用的是支持 EXCEPT 关键字的数据库系统(如SQL Server或PostgreSQL),你可以使用它来找出差异:

SELECT id FROM large_table

EXCEPT

SELECT id FROM small_table;

这会返回所有在 large_table 中但不在 small_table 中的 id。

4. 使用 MINUS(在Oracle中)

如果你使用的是Oracle数据库,可以使用 MINUS 操作符:

SELECT id FROM large_table

MINUS

SELECT id FROM small_table;

  1. 使用 NOT IN(不推荐,性能可能不佳)

虽然在一些情况下可以使用 NOT IN,但这种方法在处理大数据集时可能会非常慢,因为它需要多次扫描小表来检查每个值是否不在其中。因此,除非其他方法不可行,否则不推荐使用:

SELECT l.*

FROM large_table l

WHERE l.id NOT IN (SELECT s.id FROM small_table s);

性能注意事项:

索引:确保用于连接的列(如上述示例中的 id 字段)在两个表中都已建立索引。这可以显著提高查询性能。

查询优化:对于非常大的表,考虑查询优化策略,如分批处理数据或使用临时表来存储中间结果。

数据库特性:不同数据库系统有不同的优化技术和最佳实践,了解并利用你的数据库系统的特性可以提升查询效率。

通过上述方法,你可以有效地找出大表中存在而小表中不存在的数据记录。选择最适合你具体情况和数据库系统的查询方法。

相关推荐
这个DBA有点耶1 分钟前
核心系统的高可用与容灾架构:从主从到两地三中心全面解析
java·开发语言·数据库·sql·mysql·架构·运维开发
是店小二呀2 分钟前
零门槛快速接入主流大模型:基于 AI Ping 平台一键集成 GLM-5.1 与多场景应用深度实战
大数据·数据库·人工智能
asdfg12589636 分钟前
BeanListHandler的通俗理解
java·数据库·oracle
KaMeidebaby10 分钟前
卡梅德生物技术快报|羊驼免疫:分子生物学实战:基于羊驼免疫的重链抗体制备与全流程验证方案
前端·网络·数据库·人工智能·算法·百度
jieyucx20 分钟前
数据库专题开篇:零基础迈入 MySQL 的第一步
数据库·mysql
ClouGence25 分钟前
Oracle BLOB 实时同步为什么这么难?一次看懂背后的 5 个技术挑战
数据库·oracle
jnrjian25 分钟前
index skip scan 和oracle partition index 未加分区键类似
数据库
不剪发的Tony老师33 分钟前
SQLQueryStress:一款SQL Server查询压力测试工具
数据库·sqlserver·压力测试
minji...40 分钟前
MySQL数据库 (六) MySQL表的约束(下),自增长约束,唯一键约束,外键约束,索引
数据库·mysql·索引·外键·唯一键·外键约束·自增长约束
赵渝强老师1 小时前
【赵渝强老师】崖山数据库的逻辑存储结构
数据库·oracle