SQL 概观


关系代数不是一种成熟的SQL语言,而是一种获得理论上对关系处理理解的方法。因此,它不应该引用表,记录和字段等物理实体;它应该引用抽象结构,如关系,元组和属性。说这些,我不会使用本文档中的学术术语,并将坚持更广为人知的外行术语 - 表格,记录和字段。

我们开始之前的几个关系代数规则:

  • 关系代数中使用的运算符在整个表而不是单个记录上工作。
  • 关系表达式的结果将始终是一个表(这称为闭包属性

在本文档中,我将参考以下两个表:

示例表

选择

select运算符返回主表的子集。
选择 <table> where <condition>

例如,检查表达式:

选择,其中 DepartmentID的= 2

这可以写成:
在此处输入图像描述

这将导致表的记录包含People表中DepartmentID值等于2的所有记录:
在此处输入图像描述

条件也可以加入以进一步限制表达式:

选择,其中 StartYear> 2005年 DepartmentID的= 2

将产生下表:
在此处输入图像描述

项目

项目操作员将从表中返回不同的字段值。
项目 <table> over <field list>

例如,检查以下表达式:
项目人员超过 StartYear

这可以写成:
在此处输入图像描述

这将导致一个表包含People表的StartYear字段中保存的不同值。
在此处输入图像描述

由于closure属性创建了一个关系表,因此从结果表中删除了重复值:关系表中的所有记录都必须是不同的。

如果字段列表包含多个单个字段,则结果表是这些字段的不同版本。
项目人员超过 StartYear,DepartmentID将返回:
在此处输入图像描述
由于2006 StartYear和1 DepartmentID的重复,删除了一条记录。

GIVING

可以通过使用giving关键字命名单个表达式,或通过将一个表达式嵌入另一个表达式中来将关系表达式链接在一起。

<关系代数表达式> 给出 <别名>

例如,请考虑以下表达式:
选择,其中 DepartmentID的= 2 给出
项目 A over PersonName B

这将导致下面的表B,表A是第一个表达式的结果。
在此处输入图像描述

计算第一个表达式,并为结果表提供别名A.然后在第二个表达式中使用该表,为最终表提供别名B.

编写此表达式的另一种方法是将第二个表达式中的表别名替换为括在括号中的第一个表达式的整个文本:
项目选择,其中 DepartmentID的= 2) PERSONNAME

这称为嵌套表达式

天然加入

自然连接使用表之间共享的公共字段将两个表粘在一起。

join <table 1> <table 2> ,其中 <field 1> = <field 2>
假设<field 1>在<table 1>中,<field 2>在<table 2>中。

例如,以下连接表达式将根据相应表中的DepartmentIDID列加入PeopleDepartments
参加 人和部门,其中 DepartmentID的ID =

在此处输入图像描述

需要注意的是从人民表只DepartmentID的部门表中,而不是ID。只需要显示一个要比较的字段,这通常是连接操作中第一个表的字段名称。

尽管在该示例中未示出,但是连接表可能导致两个字段具有相同的标题。例如,如果我使用标题Name来标识PersonNameDept字段(即标识Person Name和Department Name)。出现这种情况时,我们使用表名来使用点表示法限定字段名称: People.NameDepartments.Name

加入结合selectproject可以一起使用来拉取信息:

参加 人和部门,其中 DepartmentID的= ID 给人一种
选择 A ,其中 StartYear = 2005 Dept ='Production' 给出 B
项目 B 通过 PersonName 给出 C

或作为组合表达式:

项目选择参加 人和部门,其中 DepartmentID的= ID), 其中 StartYear = 2005 部门=“生产”) PERSONNAME Ç

这将导致此表:
在此处输入图像描述

ALIAS

划分

联盟

路口

区别

更新(:=)

TIMES