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

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

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

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

相关推荐
九皇叔叔17 分钟前
MySQL 数据库 Read View 详解
数据库·mysql·mvcc·read view
Elastic 中国社区官方博客1 小时前
Elasticsearch:圣诞晚餐 BBQ - 图像识别
大数据·数据库·elasticsearch·搜索引擎·ai·全文检索
cui_win2 小时前
Prometheus实战教程 - Redis 监控
数据库·redis·prometheus
JIngJaneIL2 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
TG:@yunlaoda360 云老大2 小时前
华为云国际站代理商备份策略设置过程中遇到问题如何解决?
服务器·数据库·华为云
SelectDB2 小时前
Doris Catalog 已上线!性能提升 200x,全面优于 JDBC Catalog,跨集群查询迈入高性能分析时代
数据库·数据分析·apache
TAEHENGV3 小时前
进度跟踪模块 Cordova 与 OpenHarmony 混合开发实战
android·javascript·数据库
神秘面具男033 小时前
MySQL 从基础到实践
数据库·mysql
Hello.Reader3 小时前
Flink Process Table Functions(PTF)实战详解:把 SQL 变成“可编程算子”,状态、时间、定时器一把梭
网络·sql·flink
2301_767902644 小时前
MySQL 入门
数据库·mysql