SQL查询中出现笛卡尔积现象的解决方法
作者:十年砍柴MMWS 发布时间:2024-01-13 04:16:49
标签:SQL,笛卡尔积
一、 笛卡尔积
笛卡尔积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。 简单的说就是两个集合相乘的结果。
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
二、笛卡尔积在sql中是这样的
我们对数据库表进行操作时,经常会对多张表进行关联,多表连接查询大家肯定不会陌生,但是一不小心很容易出来庞大冗余的数据。
比如有两张表:student 表和subject 表
查询的时候
select studentname, Subjectname from Student ,Subject ;
会出现下面的情形,也就是笛卡尔现象,表一有5条记录,表二有3条记录,那么对于第一张表而言有5种选择,而对于第二张表来说有3种选择。所以结果就是5*3种选择了,也就是笛卡尔积。
三、解决办法
这样冗余的数据可不是我们想要,所以想要你的结果避免笛卡尔积,既要做到以下几点:
1.在使用条件的时候注意格式为:表名.列名=表名.列名
因为有时候两张表会出现同样的表名,会导致MySQL没法区分,加上表名调用列名就会不造成歧义
具体命令格式
SELECT 列名1, 列名2 FORM 表名1,表名2 WHERE 表名1.列名1=表名2.列名2
2.使用内连接
语法
Select 表1.*,表2.* ... From 表1 [Inner] Join 表2 on 表与表之间的关联
SELECT st.stuname 姓名, s.subjectname 科目名称,r.score from `subject` s JOIN result r on s.id=r.s_id
JOIN student st on r.stuno=st.studentno
3.外连接
(1)左外连接
SELECT 字段…… FROM 表一 left [outer] JOIN 表2 ON 连接条件
当出现两个表中未匹配的信息,以左表为主(保证左表信息全部能够展示),右表中未匹配信息被省略
(2).右外连接
SELECT 字段…… FROM 表一 RIGHT [outer] JOIN 表2 ON 连接条件
当出现两个表中未匹配的信息,以右表为主(保证右表信息全部能够展示),左表中未匹配信息被省略
来源:https://www.cnblogs.com/JackZhangBJ/p/14148564.html
0
投稿
猜你喜欢
- 本文实例讲述了python获得一个月有多少天的方法。分享给大家供大家参考。具体分析如下:在python的datetime模块中没有一个月有多
- 1.Cuda的下载安装及配置 首先我们要确定本机是否有独立显卡。在计算机-管理-设备管
- Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行全面地管理。按照本文
- python 不能写new_loss=old_loss=[]这样 两个变量实际上是同一个list要分开写new_loss=[]Old_los
- 所有数据库和状态文件都包含在其中。但是,在确定数据目录内容的布局中管理员有某些职责。本文讨论为什么要移动数据目录的各个部分(甚至是字典本身)
- python list筛选包含字符的字段l = [‘123a',‘456b',‘789c']ll = [s for
- python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能。python中:print(
- 图片版PDF无法复制,转化成文字版的PDF后使用更方便. 我们需要用到python3.6,pypdf2,ghostscript,Python
- 前言关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题
- 一、基本(1)利用pytorch建好的层进行搭建import torchfrom torch import nnfrom torch.nn
- 简述公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交
- 识别快递单号这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号。首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barco
- 首先,eval模式和train模式得到不同的结果是正常的。我的模型中,eval模式和train模式不同之处在于Batch Normaliza
- 作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好
- 相信很多人像我一样在学习python,pandas过程中对数据的选取和修改有很大的困惑(也许是深受Matlab)的影响。。。到今天终于完全搞
- 应用场景:实验中不断得到新数据,想将数据图形化,但随着时间推移,数据越来越多,此时需要我们等距选择数据列表中固定数量的数据,来进行图形化。注
- 【OpenCV】⚠️高手勿入! 半小时学会基本操作⚠️图像处理概述OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天
- 前言写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它。命令行
- 前言其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在
- 好多网友问起来,·深度学习网址导航·深度学习整站系统 的后台管理能否增加批量删除功能,如何加:就是列出N篇文章或网址信息,每篇文章或网址前有