现在有这样的三张表:
A:id1 (id1 是主键)
B: id1,id2 (id1是外键,id1+id2是联合主键)
C: id1,id2,id3 (id1+id2+id3是联合主键)
需求:
从C表中查询数据,同时关联A和B表
sql实现:
select *
from a,b,c
where a.id1=b.id1
and b.id1=c.id1
and b.id2=c.id2
从真实数据反映的结果:
219304800(没有写任何查询条件)
11944(没有添加 b.id2=c.id2)
990(所有条件都有的条数)
39458(没有添加b和c表的连接条件 b.id1=c.id1)
只加 a.id1=b.id1 and b.id1=c.id1 条件的情况就是这三张表中id1都是唯一的
问题还有很多:比如说,id2在表b中也是不可以重复的,又是该怎样处理呢,答案还是上面的sql语句。
提出出问题是由于对表的结构不了解所引发了冗余数据的现象,只是想提醒一下,在关联多张表的时候需要算一下笛卡尔积,如果笛卡尔积是唯一,那么你的答案就是对的。
insert into a values(1)
insert into a values(2)
insert into b values(1,1)
insert into b values(1,2)
insert into b values(2,1)
insert into b values(2,2)
insert into c values(1,1,1)
insert into c values(1,1,2)
insert into c values(1,2,1)
insert into c values(1,2,2)
insert into c values(2,1,1)
insert into c values(2,1,2)
insert into c values(2,2,1)
insert into c values(2,2,2)
使用笛卡尔积来分析一下下面的三张表:
笛卡尔积:简单来说就是一个矩阵,更专业的可以查看相关的资料
如果什么都不加会出现 2*4*8=64条数据
如果添加了查询条件a.id1=b.id1 and b.id1=c.id1结果会出现多少呢?
16 为什么会变成16呢? 差值为48,48是怎么去掉的
原因是除掉了b.id2=c.id2所冗余的信息 就上面的数据来说,减少了1(a.id1)对应了2(c.id1)的情况
如果添加了a.id1=b.id1 and b.id1=c.id1 and b.id2=c.id2结果会是多少呢?
8 完全没有重复
归根结底还是理论知识,扎实的理论知识是你今后发展的基石,所有我们一定要深入了解理论,不可停留在事物的表面。
总体上来说还是有点不太明白,希望有人能指点一下。自己也在查找资料,如果解决了跟大家分享。
分享到:
相关推荐
自己学习的笔记--查询计算机系CS男学生学号、姓名和考试成绩 SELECT A.Sno,A.Sname,B.degree FROM student A,sc B WHERE A.Sdept = 'CS' AND A.Ssex = '男' AND A.Sno = B.sno SELECT A.Sno,A.Sname,B.degree FROM ...
批处理文件(如.bat文件)在Windows环境中是一种高效的方式,可以自动化执行一系列命令,包括连接数据库和执行SQL语句。在这个场景中,我们可以利用批处理文件来简化Oracle数据库的操作,如删除用户、创建用户、创建...
本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...
在Visual Studio 2005 (VS2005) 中使用SQL语句连接数据库并创建表是一项基础但至关重要的任务,特别是在开发基于数据库的应用程序时。本篇将详细讲解如何实现这一过程,并重点关注SQL SERVER 2005环境下创建表的步骤...
Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,通过了解字符串和数字的比较、分组查询、HAVING 子句、查询顺序、Oracle 中的伪列、子查询和表连接等知识点,可以帮助我们更好地编写 SQL 语句,...
在开发数据库应用程序时,SQL语句是至关重要的工具,用于查询、插入、更新和删除数据库中的数据。本文将深入探讨SQL语句命令及其在数据库操作中的应用,特别是使用ADO.NET框架进行数据库交互。 首先,我们需要了解...
通常情况下,SQL语句会被分割成多个片段,该查询可以帮助我们查看这些片段的详细内容。注释中的`machine`过滤器可以根据实际需求进行调整。 2. **查找最耗时的SQL语句** ```sql SELECT * FROM ( SELECT ...
"hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...
- **联接查询**:JOIN操作将两个或更多表的数据结合在一起,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。 - **子查询**:在主查询内部嵌套的查询,可以用来比较、过滤或计算。 3. **DDL语句** - **创建表*...
3. **报表生成**:生成复杂的报表时,往往需要从多个表中抽取数据并进行复杂的联接操作,从而构建出超长SQL语句。 4. **历史数据分析**:在分析历史数据时,为了确保数据准确性,可能会涉及到大量的JOIN操作以及复杂...
### Access一次执行多条SQL语句 在Access数据库管理中,有时我们需要在同一事务中执行多条SQL语句来确保数据的一致性和完整性。例如,在更新某个记录后可能还需要执行其他操作,如增加日志记录等。本文将详细介绍...
### Delphi ADOQuery 处理多条 SQL 语句 在 Delphi 开发环境中,ADOQuery 是一种常用的数据库查询组件,它支持多种数据库操作,包括执行 SQL 语句、查询数据等。本文将详细解释如何使用 Delphi 的 ADOQuery 组件来...
在编程领域,动态拼接SQL语句是一种常见的技术,它允许程序在运行时根据需要构建SQL查询。在易语言这个中国本土化的编程环境中,动态拼接SQL同样具有重要的应用价值。易语言以其独特的汉字编程风格,降低了编程的...
JDBCTools工具类是Java执行SQL语句实现查询的通用方法的辅助工具类,该类提供了获取数据库连接的方法getConnection()。在getConnection()方法中,使用Properties对象来存储数据库连接的配置信息,然后使用...
在SQL语言中,多表连接查询是数据库操作中不可或缺的一部分,尤其在处理复杂的数据关联时显得尤为重要。这个主题主要涉及到如何将多个数据表中的信息整合在一起,以满足特定的查询需求。下面我们将深入探讨这个话题...
- 批量执行SQL语句,可以创建一个包含多条SQL语句的字符串,然后一次性提交。这可以通过调用`ExecuteNonQuery`(不返回结果集的SQL,如INSERT、UPDATE、DELETE)或`ExecuteSQL`(可以返回结果集的SQL)实现。 3. *...
Python 使用 SQL 语句对 MySQL 数据库多条件模糊查询 Python 是一种广泛使用的编程语言,而 MySQL 是一种常用的关系型数据库管理系统。在实际应用中,我们经常需要使用 Python 连接 MySQL 数据库,并执行多条件...
在IT领域,数据库是存储和管理...总的来说,连接各种数据库的SQL语句涉及了数据库连接、SQL通用语法、特定数据库的方言、性能优化以及安全性等多个方面。理解并掌握这些知识,对于任何IT专业人士来说都是至关重要的。
Visual Studio的SQL Server Object Explorer工具提供了一个直观的方式来查看连接到的数据库并监视执行的SQL语句。在运行LINQ查询时,可以通过该工具实时查看到生成的SQL。 4. **Entity Framework SQL Server Query...
SQL语句包括SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等基本操作,还有JOIN(连接)、GROUP BY(分组)、HAVING(分组后的条件过滤)等高级功能。 C#,另一方面,是微软公司推出的一种面向...