sqlserver查询(删除)一个表在另一个表中不存在的记录几种方式比较
删除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"语句可以帮助我们快速高效地查询不包含特定数据的行。在使用时,我们应该遵循上述注意事项,以确保查询结果的准确性。