SQL 查找两表中不同的数据
1,2,3
1,2,4
b表
1,2,3
1,2,4
1,2,5
目的找出1,2,5
数据量很大要效率高的语句 展开
使用except函数,select * from B where (select count(1) from A where A.ID = B.ID) = 0.
方法一(推荐)
WITH C AS ( SELECT Name
FROM ConsumerCouponApply A
WHERE NOT EXISTS ( SELECT 1
FROM ConsumerCouponApply B
WHERE B.Name = A.Name
GROUP BY B.Name )
GROUP BY A.Name
)
SELECT COUNT(1)
FROM C
方法二
WITH C AS ( SELECT A.Name
FROM ConsumerCouponApply A
GROUP BY A.Name
EXCEPT
SELECT B.Name
FROM ConsumerCouponApply B
GROUP BY B.Name
)
SELECT COUNT(1)
FROM C
方法三
SELECT COUNT(A.Name)
FROM ConsumerCouponApply A
LEFT JOIN ConsumerCouponApply B ON A.Name = B.Name
WHERE B.ID IS NULL
扩展资料:
高级查询运算词:
A: UNION 运算符:
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个
结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行
不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当
ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
我随便举两个例子
假设a表中有一列‘aa’,数据是1,2,3
1,2,4
b表中有一列‘bb’,数据是1,2,3
1,2,4
1,2,5
目的是找出这个1,2,5
其实就是找出唯一值
方法1:写个子查询嵌套
select * from (select a.aa as 'ccc',b.bb as 'bbb'
from a full join b on a.aa = b.bb) c where c.ccc is null or c.bbb is null
这个语句就是找出2张表中的唯一值
方法2:利用union连接再分组having,取得唯一值
select c.aa,count(*) from (select aa from a
union all
select bb from b) c group by c.aa having count(*) = 1
查询出的就是两张表中的唯一值【其实也就是重复次数 = 1的】
方法是通用的~参数sql是你sql查询语句 tablename是输出地表明 可以随便添
public static string ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=数据库文件路径;Integrated Security=True;Connect Timeout=30;User Instance=True";
public DataSet GetDataSet(string sql, string tablename)
{
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection(DataAccess.ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(sql, con);
try
{
da.Fill(ds, tablename);
if (ds.HasChanges()) da.Update(ds);
}
catch (Exception ex)
{
MessageBox.Show("打开数据库表错误:" + ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
con.Close();
con.Dispose();
da.Dispose();
}
return ds;
}
使用方法 datagridview1.datasource=GetDataSet("select * from student where name="姚明"","table1") //datagridview1当然是你winfrom里的一个datagridview
SELECT * FROM b
EXCEPT
SELECT * FROM a