sqlserver查询(删除)一个表在另一个表中不存在的记录几种方式比较

博主:jhchinajhchina 2023-10-14 605 0条评论
摘要: 删除A表在B表中不存在的记录第一种方式select * from A where not exists (se...

删除A表在B表中不存在的记录

第一种方式

select * from A where not exists (select 1 from B where A.ID = B.ID)

第二种方式

select * from  A where (select count(1) as num from B where B.ID = A.ID) = 0

删除只需要把select * 换为delete即可

不同方式速度比较:

方法一:使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~

SELECT COUNT(1) FROM A WHERE A.id NOT IN (SELECT B.id FROM B);

方法二:使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录  ~执行时间:0.739秒~

SELECT COUNT(1) FROM A LEFT JOIN B ON A.id=B.id WHERE B.id IS NULL;

方法三:逻辑相对复杂,但是速度最快  ~执行时间: 0.570秒~

SELECT COUNT(1) FROM A WHERE (SELECT COUNT(1) AS num FROM B WHERE B.id=A.id) = 0;

提高SQL查询效率,掌握“Not exists”语句的使用方法

"Not exists"是SQL中的一种常用语句,它用于检查指定条件的行是否不存在于指定的表格中。这种语句通常用于查询某个表格中不包含特定数据的行。在本文中,我们将详细介绍"Not exists"语句的使用方法和注意事项。

"Not exists"语句的语法格式如下:

SELECT column1, column2
FROM table1
WHERE NOT EXISTS (
SELECT *
FROM table2
WHERE table2.column1 = table1.column1
)

其中,SELECT语句用于查询需要的列,FROM语句指定需要查询的表格,WHERE语句用于指定筛选条件。"Not exists"语句则用于子查询中,其作用是检查table2表格中是否有与table1表格中column1相同的行,如果没有,则返回table1表格中的对应行。

"Not exists"语句通常用于处理大型数据集时提高查询效率。在处理大型数据集时,使用"Not exists"语句比使用INNER JOIN语句更为高效。因为INNER JOIN语句需要对两个表格进行联接,并查找符合指定条件的行。而使用"Not exists"语句则只需要对其中一个表格进行查询,然后在结果集中查找不符合条件的行。

使用"Not exists"语句时需要注意以下几点:

1、子查询中应该使用SELECT * FROM table2而不是SELECT column1 FROM table2。因为如果使用SELECT column1 FROM table2,则"Not exists"语句只会检查table1表格中column1对应的值是否存在于table2表格中,而不会检查其他列是否匹配。

2、在使用"Not exists"语句时,应该使用适当的索引来提高查询效率。例如,在上述例子中,可以为table2表格中的column1列创建索引,以提高查询效率。

3、如果使用"Not exists"语句时,table2表格中的列有NULL值,则可能会导致查询结果不准确。因此,在使用"Not exists"语句时应该格外小心。

4、在使用"Not exists"语句时,应该注意子查询中的WHERE语句中的列名是否正确。如果列名不正确,则可能导致查询结果不准确。

总之,使用"Not exists"语句可以帮助我们快速高效地查询不包含特定数据的行。在使用时,我们应该遵循上述注意事项,以确保查询结果的准确性。

文章最后编辑时间:2023-10-16 23:54:44