数据库系统概念第六版记录 四

1.sql组成

SQL 是最有影响力的商用市场化的关系查询语言。SQL 语言包括几个部分:

数据定义语言(DDL) ,它提供了定义关系模式、删除关系以及修改关系模式的命令。

数据操纵语言(DML) ,它包括查询语言,以及往数据库中插入元组、从数据库中删除元组和修改数据库中元组的命令。

同时还包括 DCL(数据控制语言) 和 TCL(事务控制语言)

2. select from where 语句

select 子句用于列出查询结果中所需要的属性。
from 子句是一个查询求值中需要访问的关系列表。
Where 子句是一个作用在 from 子句中关系的属性上的谓词。

一个典型的sql查询具有如下形式:
每个 Ai 代表一个属性,每个 ri代表一个关系。p是一个谓词。如果省略 where 子句,则谓词 p为true。
在这里插入图片描述

举例

在这里插入图片描述

注意 dept_name 属性既出现在 instructor 关系中,也出
现在 department 中,关系名被用作前缀(在 instructor. dept_
name 和 department. dept_name 中)来说明我们使用的是哪个
属性。相反,属性 name 和 puilding 只出现在一个关系中,
因而不需要把关系名作为前缀。

运算顺序

尽管各子句必须以 select 、from 、where 的次序写出, 但理解查询所代表运算的最容易的方式是以
运算的顺序来考察各子句:首先是 from,然后是 where,最后是 select

可以通过下面的迭代过程来理解,此过程可为 from 子句的结果关系产生元组。
在这里插入图片描述
此结果关系具有来自 from 子句中所有关系的所有属性。由于在关系ri和rj中可能出现相同的属性名,正如举例中所看到的,我们在属性名前加上关系名作为前缀,表示该属性来自于哪个关系。
从from语句会构造多个关系的笛卡尔积,这会导致数据可能非常庞大,不是我们需要的。此时where 子句中的谓词用来限制笛卡儿积所建立的组合

理解

通常说来,一个 SQL 查询的含义可以理解如下 :

  1. 为 from 子句中列出的关系产生笛卡儿积。

  2. 在步骤 1 的结果上应用 where 子句中指定的谓词。

  3. 对于步骤 2 结果中的每个元组,输出 select 子句中指定的属性(或表达式的结果) 。

3. join.…using

natural join(自然连接)自动匹配所有同名列,这可能导致未知的错误。可以使用join … using …指定匹配的属性

考虑运算 r1 join r2 using( A1 , A2) 。它与 r1与 r2的自然连接类似, 只不过在t1.A1=t2.A1并且t1.A2=t2.A2成立的前提下,来自r1的元组t1和来自r2 的元组t2就能匹配,即使 r1与 r2的都具有名为A3的属性,也不需要t1.A3=t2.A3

SELECT name, title
FROM (instructor NATURAL JOIN teaches) JOIN course USING (course_id);
解析
分步执行:
(instructor NATURAL JOIN teaches) 先执