假设有下面的数据表:
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脚本(如`run_all.sql`),在这个脚本中,你可以通过嵌套`@`命令来调用其他SQL文件,同时传递参数。例如: ```sql DECLARE param1 VARCHAR2(100) := 'param_value1'; param2 ...
市场上存在许多这样的工具,如SSMA(SQL Server Migration Assistant) for Oracle,这是一个官方提供的迁移工具,能自动分析SQL Server的架构,并生成适合Oracle的DDL(Data Definition Language)和DML(Data ...
本文将深入探讨该工具的核心功能、使用场景以及T-SQL语言优化的相关策略。 SQL Optimizer for SQL Server 是一款强大的分析工具,它能够解析和比较不同的执行计划,为用户提供最佳的T-SQL查询路径。在SQL Server...
SQL注入是网络安全领域中的一个重要话题,它允许攻击者通过输入恶意的SQL语句来操纵数据库,获取敏感信息,甚至完全控制网站。 SQL注入通常发生在网站的输入验证不充分时,比如用户登录、搜索功能等。在这个ASP网站...
针对Oracle数据库,有一款名为SQLMonitor的工具,它专为跟踪和监控SQL语句而设计,帮助开发者和DBA们找出程序操作的数据表,从而提升程序性能并进行精准的问题定位。本文将深入探讨SQLMonitor的功能、使用方法及其在...
批量执行SQL是数据库管理中的一个常见需求,特别是在数据迁移、更新或维护时。本文将深入探讨批量执行SQL的概念、TSQL_Express的功能以及如何使用这款工具。 批量执行SQL是指一次性处理多个SQL命令或脚本,而不是...
【SQL注入攻击】是Web应用程序安全领域中的一个严重威胁,攻击者通过构造恶意的SQL语句,利用程序处理用户输入时的不安全性,控制或操纵数据库,获取敏感信息,甚至破坏整个系统。【SQL语法树】是理解这一问题的关键...
以下是对这个主题的详细探讨: 1. **SQL优化的重要性**: SQL语句是与数据库交互的基础,执行效率直接影响到应用程序的性能。优化SQL语句可以减少查询时间,降低服务器负载,提高用户体验,并节省硬件资源。 2. *...
【标题】:“这是一个用VS连接SQL_SERVER的一个简单demo” 在这个示例中,我们将探讨如何使用Visual Studio(VS)与Microsoft SQL Server进行交互。VS作为强大的开发环境,支持多种数据库连接,包括SQL Server。这...
这款插件专为SQL Server Management Studio (SSMS) 设计,版本10.1.5.14730表明它是该系列的一个特定更新,兼容SQL Server 2019以及SSMS 18.5。在学习和研究环境中,SQL Prompt提供了多种功能,包括自动完成、代码...
SQL2003是SQL语言的一个重要版本,它在数据库管理系统领域扮演着核心角色,尤其在数据查询、数据管理及数据分析方面。SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,而SQL2003是国际...
本文将深入探讨SQL数据库“置疑”问题的原因、分析、预防和解决方法。 首先,“置疑”状态通常表示数据库在尝试打开时遇到了问题,可能由于硬件故障、操作系统错误、文件权限问题或SQL Server服务异常等导致。SQL...
在数据库管理领域,SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言,而Transact-SQL(T-SQL)则是SQL的一个扩展,由Microsoft为它的SQL Server数据库管理系统所特有。本篇文章将深入探讨...
超长SQL语句并没有一个明确的长度界限来定义,通常指的是那些结构复杂、包含大量字段或条件的SQL查询语句。这类语句往往难以阅读与维护,且可能存在性能问题。 ##### 常见场景 1. **数据导出/导入**:在进行大批量...
标题中的“我国全部城市sql_sql全国城市_city.sql_全国城市数据及建表语句_city_源码”表明这是一个关于中国所有城市的SQL数据库文件,其中包含了创建表的SQL语句以及城市的数据。这个文件可能用于数据分析、地理...
在SQL的上下文中,批处理通常涉及将多个SQL语句写入一个文本文件,然后通过某种机制一次性执行这些语句。 1. **SQL Server Management Studio (SSMS)**:对于SQL Server用户,SSMS提供了一种直观的方式批量执行SQL...
本文将深入探讨如何通过编程方式获取SQL服务器的名称,重点介绍标题为“一个得到SQL服务器名称的类”的主题。该类的目标是能够检测并返回局域网内运行的SQL Server实例的名称。 首先,我们要理解SQL Server名称的...
本文将围绕“SQL2000修复”这一主题,深入探讨如何解决SQL Server 2000在运行过程中可能出现的各种问题,确保数据的安全性和完整性。 SQL Server 2000在企业级应用中广泛使用,它提供了强大的数据存储、管理和分析...
标题与描述均指向了一个具体的技术问题:“SQL2008不能附加SQL2005数据库的问题”。这涉及到数据库管理系统(DBMS)版本升级时可能遇到的兼容性问题,特别是从SQL Server 2005升级至SQL Server 2008。在本文中,我们...