SQL中MINUS的用法

minus指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。

MINUS 的语法如下:

[SQL 语句 1]

MINUS

[SQL 语句 2]

我们继续使用一样的例子:

Store_Information 表格

store_name  Sales  Date

Los Angeles  $1500  Jan-05-1999

San Diego  $250  Jan-07-1999

Los Angeles  $300  Jan-08-1999

Boston  $700  Jan-08-1999

Internet Sales 表格 Date  Sales

Jan-07-1999  $250

Jan-10-1999  $535

Jan-11-1999  $320

Jan-12-1999  $750

而我们要知道有哪几天是有店面营业额而没有网络营业额的。要达到这个目的,我们用以下的 SQL 语句:

SELECT Date FROM Store_Information

MINUS

SELECT Date FROM Internet_Sales

结果:

Date

Jan-05-1999

Jan-08-1999

"Jan-05-1999", "Jan-07-1999", and "Jan-08-1999" 是 "SELECT Date FROM Store_Information" 所产生的结果。在这里面,"Jan-07-1999" 是存在于 "SELECT Date FROM Internet_Sales" 所产生的结果中。因此 "Jan-07-1999" 并不在最后的结果中。

请注意,在 MINUS 指令下,不同的值只会被列出一次。

SQL中的UNION用法

UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。

UNION 的语法如下:

[SQL 语句 1]

UNION

[SQL 语句 2]

假设我们有以下的两个表格,

表格: Store_Information

store_name       Sales             Date

Los Angeles      $1500          Jan-05-1999

San Diego        $250           Jan-07-1999

Los Angeles      $300           Jan-08-1999

Boston           $700           Jan-08-1999

表格: Internet Sales

Date             Sales

Jan-07-1999      $250

Jan-10-1999      $535

Jan-11-1999      $320

Jan-12-1999      $750

而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句:

SELECT Date FROM Store_Information

UNION

SELECT Date FROM Internet_Sales

结果:

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 "SELECT DISTINCT Date" 的话,

那我们会得到完全一样的结果。

名字可以不一样。但是,数据类型必须相似。

也就是说主表(第一个表)第一列是varchar(100),副表(第一个以外的所有表)的第一列都要是varchar(100&&<100)(char好像也可以你试一下吧,或是可以自动转换数据类型),其它是不行的,

还有几个表的列数必须相同

++++++++++++++++++++++++

与MINUS功能类似的有

第一个

SELECT   表1.*

FROM     表1,   表2

WHERE    表1.主键=表2.主键(+)

AND   表2.主键   IS   NULL;

第二个

select   *   from   表1   where   not   exists(select   1   from   表2   where   表1.主键=表2.主键);

第三个

select   *   from   表1   where   表1.主键 not   in (select  主键   from   表2);

当然效率较高的还是MINUS。

时间: 2024-12-20 07:56:15

SQL中MINUS的用法的相关文章

SQL中MINUS的用法与UNION的用法

一:MINUS指令 其是运用在两个 SQL 语句上.它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL语句的结果中.如果有的话,那第一个SQL结果数据就被去除,而不会在最后的结果中出现.如果第一个 SQL 语句所产生的结果并没有存在于第二个 SQL 语句所产生的结果内,那第一个SQL结果数据就被保留,会在最后的结果中出现.MINUS 的语法如下:[SQL 语句 1]MINUS[SQL 语句 2]举例:Store_Information 表格store_name  Sa

SQL中if exists用法细节

用if exists建表[转] 1 判断数据库是否存在 Sql代码 if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名]  if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名] 2 判断表是否存在 Sql代码 if exists (select * from sysobjects w

linq to ef(相当于sql中in的用法)查询语句

select * from DoctorInfo doctor where doctor.HosDepartId in (select Id from HospitalDepartment hd where hd.DepartmentId=5) var a=from d in _entity.HospitalDepartment where d.DepartmentId==5 select d; List<int> lst=new List<int>();foreach(var b

sql中binary_checksum(*)的用法

sql中binary_checksum(*)的用法(转) binary_checksum(*)可以用来检查修改过的行. 同一行在update后,该行的binary_checksum(*)就不同. 如 select title_id,binary_checksum(*)  from titles where  title_id=1 时title_id=1 的该行的binaru_checksum(*) 的值为123456 若此时 update titles set title='ddd' where

SQL中的declare用法

平时写SQL查询.存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣. 大家都知道c#中的局部变量,在if中如果我们定义一个变量的话他的作用到if结束为止,if外是不识别这个变量的,else里都不能使用,简单的写一下. if (true)            {                Int32 i = 1;                Console.WriteLine(i)

SQL中Truncate的用法

转自:http://www.studyofnet.com/news/555.html 本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.下面介绍SQL中Truncate的用法 当你不再需要该表时, 用 drop:当你仍要保留该表,但要删除所有记

SQL中Truncate的用法(转)

转自:http://www.studyofnet.com/news/555.html 本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.下面介绍SQL中Truncate的用法 当你不再需要该表时, 用 drop:当你仍要保留该表,但要删除所有记

SQL中CASE 的用法 转载

sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.              例如,下面的语句显示中文年月 select getdate() as 日期,case month(getdate()) when 11 then '十一' when 12 then '十二' else substring('一二三四五六七八九十', month(getdate()),1) end+'月' as 月份 ===================

sql中IN的用法

1.和where配合使用 IN操作符允许我们在where的子句中规定多个值 SELECT * FROM Persons  WHERE LastName IN ('Adams','Carter') 这句sql的意思就是在persons表中取出LastName为Adams和Carter的这个两个人的信息. 2.第二种用法 大神补充