sql中exists和in的比较

exists : 强调的是是否返回结果集,返回的结果只有两种值,要么为真要么为假.例如以下两个查询子句的查询效果是相同的,与select的字段没有关系。

select  id from test a where mark exists(select 1 from test b where a.id=b.id);

select  id from test a where mark exists(select 2 from test b where a.id=b.id);

in : 强调的是返回存在的结果集,而且查询子句只能返回一个字段中符合条件的内容

select  id from test a where mark in (select mark from test b where a.id=b.id  ..);

以下表为例,用sql查找itemsSold相同的product:

mysql> desc productSummary;

+-----------+-------------+------+-----+---------+-------+

| Field     | Type        | Null | Key |Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| product   | varchar(50) | NO   | PRI | NULL    |      |

| itemsSold | int(11)     | NO   |     | NULL   |       |

+-----------+-------------+------+-----+---------+-------+

2 rows in set (0.01 sec)

 mysql> select * from  productSummary;

+---------+-----------+

| product | itemsSold |

+---------+-----------+

| a       |         1 |

| c       |         1 |

| d       |         7 |

+---------+-----------+

3 rows in set (0.00 sec)

 mysql> select * from  productSummary a where exists( 

       select 1 from  productSummary b wherea.itemsSold=b.itemsSold );

+---------+-----------+

| product | itemsSold |

+---------+-----------+

| a       |         1 |

| c       |         1 |

| d       |         7 |

+---------+-----------+

3 rows in set (0.00 sec)

 mysql> select * from  productSummary a where exists( 

       select 1 from  productSummary b wherea.itemsSold=b.itemsSold and a.product!=b.product);

+---------+-----------+

| product | itemsSold |

+---------+-----------+

| a       |         1 |

| c       |         1 |

+---------+-----------+

2 rows in set (0.00 sec)

 mysql> select * from  productSummary a where itemsSold in (

        select itemsSold from  productSummaryb where a.itemsSold=b.itemsSold and a.product!=b.product);

+---------+-----------+

| product | itemsSold |

+---------+-----------+

| a       |         1 |

| c       |         1 |

+---------+-----------+

2 rows in set (0.00 sec)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值