【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 字段)在两个表中都已建立索引。这可以显著提高查询性能。

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

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

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

相关推荐
HackTwoHub8 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t8 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK8 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)8 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X10 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK10 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
yaodong51811 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
BU摆烂会噶11 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t12 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper12 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程