SQL怎么从大表里面 查询包含小表的内容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL怎么从大表里面 查询包含小表的内容?相关的知识,希望对你有一定的参考价值。

表1里面有很多数据, 表2里面假如有10条记录, 怎么从表1里面查到包含表2所包含的信息?
表1
A B C D ……………………后面有很多列
1 2 3 4
1 3 1 3
4 2 4 3
8 5 4 6

表2
X
5
4
3
类似这样的,两个表,怎么从表1中查询包含表二 5.或者4或者.3 的内容

--一个方案可才用IN关键字(针对单个字段信息是否包含)
SELECT * FROM FROM 表1 WHERE 字段名 in(SELECT 字段名 FROM 表2)
--第二个方案采用inner join 连接(可多个字段同时一样)
SELECT *
FROM 表1
INNER JOIN 表2 on 表1.字段A=表2.字段A and 表1.字段B=表2.字段B
--(上面的语句的意思是:查询出表1中字段A和字段B内容在表2都存在的数据)

如有什么问题可以追问,谢谢。
--补充回答
SELECT *
FROM 表1
INNER JOIN 表2 on 表1.A=表2.X or 表1.B=表2.X or 表1.C=表2.X or 表1.D=表2.X
或者
SELECT *
FROM 表1
where A in(SELECT X FROM 表2)
OR B in(SELECT X FROM 表2)
OR C in(SELECT X FROM 表2)
OR D in(SELECT X FROM 表2)追问

表1中 ,不止abcd 后面有很多,表2中,只有一列。

追答

你可以继续新增OR的条件。

如果不限制在一个语句内可以用下面语句写成查询函数效率会高很多(如果不是字符类型请转化为字符类型)

参考技术A --表的字段名称
select name from syscolumns where id=object_id( '表名 ')
--表的字段数
select count(name) from syscolumns where id=object_id( '表名 ')
最好改成:object_id(N '表名 ')
这样只是规范一些,一般不会出错
select name from syscolumns where id=object_id(N '表名 ')--列名
select name from sysobjects where xtype= 'U '--表名
select name from sysobjects where xtype= 'P '--存储过程
参考技术B select * from 表1
from A in (select x from 表2)
or B in (select x from 表2)
or C in (select x from 表2)
or D in (select x from 表2)
如果是只有表1中A列与表2中X列比较则不需要后面的3个or
如果表2的X是唯一键,也可改成join
select 表1.* from 表1 join 表2 on 表1.A=表2.X or B=X or C=x or D=x
有多少列要比较就or多个等于比较

SQL性能问题.现在表设计可以把一个大表按类型(各类型字段不相同)拆分成多个小表.拆分后比较方便.

问题是.查询的时候查询一个大表和多个小表有误性能差异(各小表查询没有关联关系)?

参考技术A 在数据量大的情况下是有性能差异的,多个小表相当于对大表进行了数据分片,所以不用访问所有大表的数据就可以返回结果。
但在数据量小的情况下使用索引扫描性能差异很小。
小表的另一个问题是如果需要在大表上执行全表查询,即跨小表的查询,则小表的数据结构处理可能比较麻烦。追问

小表的数据结构处理可能比较麻烦------指的是什么?
昨天正好测试了下。2个小表查询(各表1W条数据) 和直接一个大表(2W)条数据。没有差异。。

追答

小表的数据结构处理可能比较麻烦,指的是在有些业务逻辑需要查询覆盖多个小表的数据,且无法确定要访问那些小表的时候,查询语句不好写。
1W条数据是很小的量,看不出来差异的,有索引的话访问代价是相同的,一般小表要达到百万级,打表千万级数据量才有差异的

以上是关于SQL怎么从大表里面 查询包含小表的内容?的主要内容,如果未能解决你的问题,请参考以下文章

从大表的子集中对随机行进行最快查询 - postgresql

mysql 为啥小表放前面查询时间 比大表放前面查询时间长?

如何查询拆分为 2 个较小表的表?联盟?看法?

MySQL 对于千万级的大表要怎么优化

mysql在连表查询时是小表驱动大表吗

hive大表和小表MapJoin关联查询优化