如何用SQL语句查找在一个表中有记录在而另外一个表中没有记录

作者&投稿:貂学 (若有异议请与网页底部的电邮联系)
SQL中,如何查询存在一个表而不在另一个表中的数据记录~

首先,在SQL中(以SQL Server为例),查询存在一个表而不在另一个表中的数据记录的方法有很多,介绍其中4种:
1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低
如:select A.ID from A where A.ID not in (select ID from B);
2、方法二(适用多个字段匹配):使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录。
如:select A.ID from A left join B on A.ID=B.ID where B.ID is null ;
3、方法三(适用多个字段匹配)
如:select * from B where (select count(1) as num from A where A.ID = B.ID) = 0;
4、方法四(适用多个字段匹配)
如:select * from A where not exists(select 1 from B where A.ID=B.ID)
接着,我们来分析你的SQL语句为什么返回数据不准确的原因。
从你的SQL基础语句来看,你使用了方法一和方法四这两种,两种语法本身都是正确的,但是却没有达到预期的效果,初步分析,问题可能出在gsdj和swdj这两张表的qymc字段的判断比较上。
举个例子:'企业名称'和'企业名称 '这两个字符串看似相同,实际却并不相同,因为第二个“企业名称 ”的后面跟了一个空格字符。就因为这个空格字符导致这个"'企业名称'='企业名称 '"等式不成立。
考虑到你qymc这个字段的类型是字符型,建议你在原有sql基础上做一个微调如下:
select * from gsdj gs where not exists (select * from swdj sw where rtrim(ltrim(sw.qymc )) )=rtrim(ltrim(gs.qymc )));
其中Ltrim()可以去除左侧空格,rtrim()可以去除右侧的空格,也就是说我们是对去除空格后的企业名称进行比较,排除了空格的干扰。

扩展资料:
在SQL中,对于字符型文本数据,经常需要用到去空格的操作,对ORACLE数据来说可以通过TRIM()函数来简单实现,而SQL SERVER中并没有TRIM()函数,只有LTRIM()和RTRIM()两个函数。
SQL 中使用ltrim()去除左边空格 ,rtrim()去除右边空格 ,没有同时去除左右空格的函数,要去除所有空格可以用replace(字符串,' ',''),将字符串里的空格替换为空。
例:去除空格函数
declare @temp char(50)
set @temp = ' hello sql '
print ltrim(@temp) --去除左边空格
print rtrim(@temp) --去除右边空格
print replace(@temp,' ','') --去除字符串里所有空格
print @temp
>> 输出结果 hello sql
hello sql
hellosql
hello sql

select * from 表a where not exists (select 1 from 表b where 表b.key=表a.key)

如果是关联的话,可以用左连接或右连接
如果不关联的话,就查询公共字段

select * from table1 where id not in (select id from table2)

select *
from 表1
minus
select *
from 表2

得出表1中有表2中没有的记录,前提是表1和表2结构相同。
如果结构不同可以用
select * from 表1 where not exists (select 'a' from 表2 where 表1.id=表2.id)
或者
select * from 表1 where id not in (select id from 表2)

select * from table1 where id not in (select id from table2)

select * from table1 where id not in (select id from table2)
这样是对的

select * from A
WHERE A.列名 not in (select b.列名 from b)


SQL语句如何查询某一字符串字段长度等于某个值的所有记录
可以使用length()函数。比如:select * from test where length(name)=6。select * from table where length(column) = 某个值,length()是计算字符串长度的函数,不同的数据库,可能不一样。如图:

用sql语句,查询每个班级成绩排名前三名的学生姓名
1、首先在打开的SQL Server中,假设有两条数据中,包含有【张】,但是这个张一前一后,如下图所示。2、此时就能利用Select和From语句,查询数据,如下图所示。3、但是要查找姓名中包含有【张】,那么不能用等号,如下图所示。4、因此一定要必须使用Like关键字,才能查询SQL的数据。5、这个时候,如果...

sql语言中,实现数据检索的语句是
一、检索单个列 命令:SELECT 列名 FROM 表名;注意:语句将返回表中所有行,数据没有过滤(过滤将得出结果集的一个子集),也没有排序。二、检索多个列 命令:SELECT 列名1,列名2,…… FROM 表名;注意:在选择多个列时,一定要在列名之间加上逗号,但是最后一个列名后不加。三、检索所有列 命令...

sql语句怎么在一个数据库中查找拥有同一字段名的所有表
NAME='test_name'SQL语言是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。

SQL中如何查找一个字段在另一张表中找不到的字段?
首先,在SQL中(以SQL Server为例),查询存在一个表而不在另一个表中的数据记录的方法有很多,介绍其中4种:1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低 如:select A.ID from A where A.ID not in (select ID from B);2、方法二(适用多个字段匹配):使用 left...

SQL模糊查询语句怎么写啊
2、select * from (表名) where (搜索名称)like '%%' and id like '%(简介)%'3、用 Like 子句。比如:Select * from [TableName] where [名称] Like '%SQL%' and [简介] like '%Software%'这就是查询 [名称]字段中包含 “SQL”、并且[简介]字段中包含 “Software” 的记录。4、...

sql中select语句怎么使用?
查出两个日期之间的数据的sql示例:select * from table_name where date>'2010-1-1' and data<'2010-5-1';其中table_name是表名,date是日期字段,and符号表示且,连接两个日期表示既满足大于2010-1-1又满足小于2010-5-1,在两个之间的数据。

怎么用sql语句查询一个学生没有选的课
select c_name from course where c_id not in (select c_id from choice where sid in(select sid from stu where name='张三'))把张三换成你要查的人就好了

Access程序中,如何用SQL查询出每门成绩都大于80分的学生姓名?
代码如下:select name from stu where name not in(select name from stu where fenshu<=80 group by name having count(*)>=1) group by name 先查到任何一门不足80的学生,再排除这些学生。select name from stu group by name having min(fs)>=80。还有这些简单语句。简单基本的sql语句 ...

帮忙用SQL语句查询出想要的的数据!!
where 姓别='男' and convert(varchar(10),日期,120)=convert(varchar(10),getdate(),120) group by 栋号 ) a order by 订餐人数 desc )ORDER BY 层次 怎么找出 定餐人数最多的 栋楼!!然后在按这栋楼的层来排序呢??这就是!这是今天男士订餐最多的一栋楼的按楼层排序的订餐明细 ...

澄城县13639727361: 如何用SQL语句查找在一个表中有记录在而另外一个表中没有记录 -
宇底青柏: select * from table1 where id not in (select id from table2)

澄城县13639727361: 怎样把sql数据库中某一个表中有多少条记录通过sql语句查询出来? -
宇底青柏: select * from accuont where VIP = 1 //上面的1 是在你表中的类型为数字类型的时候 select * from accuont where VIP='1' //上面的1 是在你表中的类型为非数字类型的时候 请参考

澄城县13639727361: 在SQL中怎么查询一条记录 -
宇底青柏: 查询表记录的语句一般就是select * from 【表名】 where 【条件】;任何数据库入门的书上都有. 如果查不到那你先查看一下你的这个表是不是属于你当前登录数据库的用户的(以oracle为例): sel...

澄城县13639727361: sql找出同一表中相同记录 -
宇底青柏: 多语句可以轻松实现,这里给一个语句实现的办法(列出[表名]中[字段名]相同的记录) select * from 表名 where 字段名 in ( select 字段名 from (select Count(*) as num, 字段名 from 表名 Group by 字段名) as temptable where num>1) sql server测试通过

澄城县13639727361: 如何使用SqlServer查询数据库表所有或指定记录 -
宇底青柏: 一般右键点sqlserver里面的表会有查询表数据,点一下后会出来所有表数据,在表数据那边右键选择窗口->sql会在上方生产一个sql语句,在这里输入后按F5可以查询.select * from table查看所有 select * from table where col1=“?” and或者 or col2=“?” table是表名, col1、2是字段名

澄城县13639727361: 用sql语句怎么查一个表的信息 -
宇底青柏: 1、 查询所有列. sql语句:SELECT * FROM user. 2、查询指定列 sql语句:SELECT nickname, mobile, sex FROM user 3、将查询结果按字段的值进行排序 sql语句:SELECT * FROM emp ORDER BY deptno, sal DESC; (按序号升序...

澄城县13639727361: 如何在一个SQL数据库中搜索到特定值的记录
宇底青柏: 这样的话,给你一个思路,你先根据这个库,查找里面所有表名,然后再根据表名,查找字段名,然后再查找所有不是数字或者是二进制的字段进行搜索,当然这个需要多次循环,多次调用,肯定是很麻烦的!肯定得使用游标,虽然效率低,...

澄城县13639727361: 如何写sql语句查询一个表的中的最后一条记录 -
宇底青柏: 实现思路:如果是正序的取出最后一条,那么就是倒叙取出第一条.所以拍下序,之后取出第一条就可以了. sql:select top 1 username from tablename order by username desc ; 以上就是取出来第一条记录,如果想取出来最后一条:sql:select top 1 username from tablename order by username asc;

澄城县13639727361: sql不同表结构如何查询某个字段在一个表中有而另外一个没有的记录 -
宇底青柏: 查询含一个'已知字段名'的表名select a.name from sysobjects a,syscolumns b where a.id=b.id and b.name='已知字段'

澄城县13639727361: 一个表中有重复记录如何用SQL语句查询出来...?
宇底青柏: select * from tablename where 重复字段1 in (select 重复字段1 from tablename group by 重复字段1,重复字段2 having count(*)>1)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网