sql查询一个表不包含另一个表的数据,两种方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询一个表不包含另一个表的数据,两种方法。相关的知识,希望对你有一定的参考价值。

参考技术A 1、用minus函数的方式:

select 



from 

CMN_FUND

where 

FUND_CODE_ in 

(select FUND_CODE_ from CMN_FUND minus select FUND_CODE_ from CMN_PROMOTION_FUND where FUND_CODE_ in 

(select FUND_CODE_ from CMN_PROMOTION_FUND where SELLPROMOTE_CODE_ = #promotionCode))

and 

FUNDCOMP_CODE_ = #fundCompCode 

order by 

FUND_CODE_

2、用not in来处理:

select 

f.FUND_CODE_, f.SHORT_NAME

from

CMN_FUND f, CMN_PROMOTION_FUND p

where

f.FUND_CODE_ = p.FUND_CODE_

and

f.FUND_CODE_ not in (SELECT FUND_CODE_ from CMN_PROMOTION_FUND where PROMOTION_CODE = #promotionCode)

and 

f.FUNDCOMPCODE = #fundCompCode

sql 用union合并合并查询结果

合并操作与连接相似,因为他们都是将两个表合并起来的另一个表的方法,然而他们的合并方法有本质的区别,

合并是两个表的相加,连接时时两个表的相乘;

01 在合并中两个表原列的数量与数据类型必须相同;在连接中一个表的行可能与另一个表的行有很大的区别,结果表列可能来自第一个表,第二个表或者是两个表的都有;

02在合并中行的最大数量是和 在连接中行的最大数量是积

select name,sex from [user] union select chinese,english from score

 

使用union all 加上关键字all 功能是不删除重复行也不对进行自动排序加上all 关键字需要计算资源少所以尽可能的使用它 尤其是处理大型表的时候 下列情况应使用union all情况

union加上关键字:

01 知道有重复行但是想保留这些行,

02 知道不可能有重复行,

03 不在乎是否用重复行

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex=‘男‘

Union 中的order by子句

合并表时有且只有一个order by 子句并且必须将它放置语句的末尾 他的两个select 语句都提供了用于合并所有行的排序下面的order by子句可以使用排序依据

01 来自第一个select子句别名

02 来自第一个select子句列别名

3 union 中列的位置编号

前两种更常用、更容易理解。

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex=‘男‘
order by address

union中的自动类型转化:

在合并表的时候两个标源中对应的每个列数据类型必须相同吗 答案是不是的 但是需要数据兼容

首先说文本数据类型 假设合并的两个表源中的第一列数据类型都是文本类型 但长度不一致党合并表时字符长度短的列等于字符长度长的列的不会丢失数据

其次说数值类型当合并两个表源中第一个列数据类型是数值类型的时候但长度不同在合并表的时候所有数字保持所有数字都允许的长度来消除他们数据类型的差别

因为这种都是自动数据类型的转化 所以说任何两个文本都是兼容的 任何数字列都是兼容的

不同类型表的union

当合并的表的时候 两个表源的对应的列即使数据类型也不一定致命 这时候要借助于数据类型转化函数

当合并两个表源相对应的列数据类型不一致一个数值型一个字符型 如果数值型的被转化成为本类型完全可以合并两个表

use student

select 姓名,性别 from student

union

select 学号,str(学期) from grade

有不同列数的两个表union

当合并两个表源的列数不同 只要向其中一个标源列添加就行了 就可以使得两个表源的列数相同

use student

select 姓名,性别,年龄 from student

union

select 课程代号,课程内容,null from course

三个或者更多的表union

可以把很多数量的表合并起来表的数量可以达到10个之多 然还是要尊徐一定的规则

use student

select 姓名,性别 from student

union

select 课程代号,课程内容 from course

union

select 学号,课程代号 from grade

以上是关于sql查询一个表不包含另一个表的数据,两种方法。的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个表的查询结果插入到另一个表中?

mysql 查询一个表中没有存在在另一个表的数据

Sql语句优化-查询两表不同行NOT INNOT EXISTS连接查询Left Join

SQL语句 一个表的值与另一个表的字段一致,怎么把两一个表的值作为条件,限定查询的字段

从另一个表中选择一个表的否定以及oracle的主表sql查询中的数据

第二十二章 使用视图