目录
编辑 1.4 交叉连接(CROSS JOIN)也称作笛卡尔积 慎用!!!
在步入主题之前我们先了解一下数据库的“实体”和“关系”。 在数据库中,我们经常听到“实体”和“关系”的概念,这分别来自于实体-关系模型(ER模型)的两个基本要素。为了帮助大家更好地理解它们,将详细地介绍“实体”和“关系”。
实体(Entity)
在数据库中,实体是由一组属性(Attributes)定义的可区分对象,代表现实世界之中存在或概念上存在、并可以被清楚定义和区分的东西。一个实体的每个属性都包含一个数据值。
举个例子,假如你正在建立一个关于学生信息的数据库,那么"学生"就是系统中的一个实体类型。“学生编号”,“姓名”,“地址”,“年龄”等就是此实体的属性。当你填充了具体的学生数据时, 每一个学生就是一个实体实例。
关系(Relationship)
在数据库中,关系描述了实体之间的交互方式。关系可能是一对一(1:1)、一对多(1:M)、多对一(M:1)以及多对多(M:N)等这样的互动模式。
让我们以简单的例子来理解这几种关系:
-
一对一(1:1):比如一个人只能拥有一个身份证,一个身份证也只能对应一个人。
-
一对多(1:M):一个母亲可以有多个孩子,但每个孩子只有一个母亲。
-
多对一(M:1):许多学生可能来自同一个城市,这是一个学生(多)对城市(一)的关系。
-
多对多(M:N):一个学生可以选修多门课程,同时一门课程也可以被多个学生选修。
在实际数据库设计中,每类型的关系都构筑数据之间的桥梁,承载着业务逻辑和需求,并为我们存取、处理和分析数据提供了便利。比如在学校系统中,“学生” 和 “课程” 就可能存在一个多对多的关系,在解决这样的复杂需求时,我们常常会引入第三个“关联表”。
理解实体和关系帮助我们在设计和操作数据库时保持清晰的思路。它们是创建有效、易于管理并能满足用户需求的数据库框架的基础。
此外,在将实体关系模型转换为具体的数据库模型时,实体通常被转换为数据库表, 实体的属性则转为表里的字段,而关系则通过主键(Primary Key)与外键(Foreign Key)的指定来实现。
例如,如果我们有一个 "学生" 实体和一个 "课程" 实体,它们之间存在多对多的关系,那么我们可以通过主键和外键的方式建立一个新的 "学生选课记录" 表。这个表会包含 "学生ID" 和 "课程ID" 这两个字段,并且这两个字段都分别是 "学生" 表和 "课程" 表的主键,但在 "学生选课记录" 表中成为了外键。
如图所示:
通过以上讲述,我们可以看出实体和关系在组织和操纵数据方面起到了重要作用。它们不仅使得数据更加方便地得以存储和操纵,另一方面也能够形象直观地描述出数据元素之间的联系,为数据的综合利用提供了可能。
理解实体和关系在数据库设计、和日常使用中都是重要的一环。所以,当我们再次遇到这些概念时,知道它们如何以及为何被使用将使我们受益匪浅。接下来,开启我们今天讲解的重点“表关联”。
此外,我们还将探讨如何优化这些关联,以便在保证查询质量的同时提高运行效率。
1. 数据库表关联的类型
当我们在使用数据库时,表间关联是必不可少的操作,它可以帮助我们从多个分散的数据库表中获取整合后的信息。SQL主要有三种形式的表连接:内连接、外连接和自连接。还有一种特殊的链接交叉连接。
1.1 内连接(INNER JOIN):
内连接是最常见的一种数据表查询方式,也是最容易理解的类型。正如其名字所示,它只返回那些在两个表中都有匹配的行。
SELECT