当前位置:首页 > 开发 > 数据库 > 正文

一个sql问题研究

发表于: 2013-11-30   作者:asialee   来源:转载   浏览次数:
摘要:             假设有下面的数据表:               create table test ( ID` bigint(20) NOT NULL AUTO_INCREMENT, NAME varchar(20) not null, HO

            假设有下面的数据表: 

            

create table test (
ID` bigint(20) NOT NULL AUTO_INCREMENT,
NAME varchar(20) not null, HOBBY varchar(20) not null);  
 insert into test values('Adam','basketball');
 insert into test values('Bill','basketball');
 insert into test values('Bill','football');
 insert into test values('Cyper','basketball');
 insert into test values('Cyper','badminton');
 insert into test values('David','basketball');
 insert into test values('David','badminton');
 insert into test values('David','table tennis');

 

    用SQL语句查出哪些人即会玩basketball又会玩badminton,找出这样的name组合,即输出:

   Cyper,David. 我想到了用下面的一些方法:

  •  使用最简单的方式,这个里面由于使用了group by,个人感觉不需要加distinct
select name FROM TEST 
WHERE hobby in ('basketball','badminton') 
group by name having count(name) = 2;

 

 

  • 使用比较简单的in子查询来实现,需要加distinct
select distinct(name)
from Test
where name in (
          select name from Test
          where hobby in('basketball','badminton')
          group by name 
          having count(name) = 2
);

 

 

 

  •  使用子查询,个人感觉此处不需要加distinct
select from Test a
WHERE hobby = 'basketball'
AND EXISTS (SELECT * from TEST_test b
WHERE a.name = b.name AND b.hobby = 'badminton');

 

 

  •  使用复杂的子查询,但是效率不敢恭维
select distinct(name) from Test as t1
where exists (
    select 1 from Test as t2
    where t2.name = t1.name and hobby = 'basketball')
and exists (
    select 1 from Test as t3
     where t3.name = t1.name and hobby = 'badminton'
);

 

 

  •  使用表联合查询
select distinct(t1.name)
from Test t1,Test t2,Test t3
where t1.name = t2.name and t1.name = t3.name and 
t2.hobby = 'basketball' and t3.hobby = 'badminton';

 

 

  •  根据题目的要求进行枚举分析
select t1.* from Test t1, Test t2 where t1.name=t2.name 
and( 
t1.hobby='basketball' and t2.hobby='badminton' or 
t2.hobby='basketball' and t1.hobby='badminton' 
)

 

 

 

 

 

一个sql问题研究

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
sora的rpc机制打算使用celery处理,celery+rabbitmq。最近开始研究它的文档,试着写了段代码; from
首先,这只是一个很小很小的细节问题,但我们可以于细微处见精神,发散一下,如... 是这样的,今天
我在面试的的时候一般都会问下候选人对sql的掌握情况,其中有一个这样的题目,也是很常见的。 表结
我在面试的的时候一般都会问下候选人对sql的掌握情况,其中有一个这样的题目,也是很常见的。 表结
[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/4595084.html] 在项目管理系
1 问题背景 我们都知道,Java平台一大亮点就在于其类装载器体系结构,这使得JVM可以在运行期从Java
一直以来,以为sequence是不间断地持续增长的;但今天发现sequence是会跳号,这种情况发生在RAC环境
最近研究了缓存工具:memcached跟redis。两者都是基于数据存储在内存中供客户端进行使用的缓存工具
一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两
  前段时间,同事遇到一个 Sql语句的问题,一个列表分页功能响应在30 s以上,看数据库里面的数据
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号