只需掌握四个查询,就能解决 95% 的 SQL 问题

在数据分析和管理中,掌握复杂查询逻辑是关键技能。即使在人工智能应用中,80%以上的时间都用于数据处理。 所谓 “garbage in, garbage out” 说明了数据质量的重要性。 而写好查询是数据处理的第一步。一个错误的查询可能毁掉整个模型。

今天,我将通过一个有趣的案例,向你展示如何从自然语言到SQL查询的转化。这不仅是一次技术之旅,更是一场逻辑的魔法秀。

关系模式 (Relational Schema)

学生表:Student(Sid, Name, Major, Birthdate)
课程表:Course(Cid, CName, Dept)
课程选修表:Enroll(Sid, Cid, Quarter, Grade)

查询的自然语言描述 (Queries)

Q1: 查找那些选修了Sid 为 928521 的同学选修的课程,并且在相同学期内选修这些课程的学生。

Q2: 查找那些选修了Sid 为 928521 的同学选修的所有课程,并且在相同学期内选修这些课程的学生。

Q3: 查找那些选修了Sid 为 928521 的同学选修的课程,并且在相同学期内选修这些课程的学生。

Q4: 查找那些选修了Sid 为 928521 的同学选修的所有课程,并且在相同学期内选修这些课程的学生。

查询中的逻辑解读

韦恩图:学生  选修的课程 与 928521 选修的课程 的关系。 表示所有学生:图片

Q1:  的课程要与 928521 的课程有交集。

Q2: 928521 的课程是  的课程的子集,928521 的任何课程都被  选修了。

Q3:  的课程是928521 的课程的子集,928521 的任何没有选修的课程, 不可能选修。

Q4:  的课程和 928521 的课程是同一个集合。

解决问题步骤

1.将自然语言查询翻译成一阶逻辑 (First Order Language) 语言表达 (一阶逻辑表达式不包含 全称量词 和 逻辑蕴含);

2.将一阶逻辑语言翻译成关系代数 (Relational Algebra) 语言表达;

3.将关系代数语言翻译成 SQL 查询。

Step1. 自然语言 –> 一阶逻辑

这里我先规定一些变量和谓词:

  • 变量: 来表示某个学生,  表示某个课程,  表示某个学期。
  • 谓词: 表达某个学生  在某个学期  选修了课程 。为了表达式的简单,我们不单独为学生和课程定义谓词了。图片

Q1:描述一个学生集合,这些学生要选修 928521 这个同学选修了的课程,并且还是在同一学期选修的:

Q2:根据  选修了 928521 的所有课程,如果 928521 选修了某门课, 必定也选修了 (因为  上了 928521 所有的课):

Q3:根据   选修 928521 的课,如果  选修了某门课,928521 必定也选修了:

Q4:Q2 和 Q3 条件的并:

 表示逻辑等价 (也可以用  表示):

Step2. 一阶逻辑 –> 关系代数

学生表:Student(Sid, Name, Major, Birthdate)
课程表:Course(Cid, CName, Dept)
课程选修表:Enroll(Sid, Cid, Quarter, Grade)

Q1:  这个一阶逻辑简化了关系代数的每个部分,我们可以把原查询拆分为多个关系代数表达式:

  •  对应一阶逻辑表达式  。其中  表示选择哪些列, 表示关系选择条件。
  •  对应一阶逻辑表达式 。
  •  对应一阶逻辑表达式 。
  •  对应一阶逻辑表达式 。
  •  对应整个 Q1 的一阶逻辑表达式。

Q2: 翻译这个一阶逻辑表达式有些难度,主要在于对全称量词  以及对逻辑蕴含  的转化。因为关系代数没有表达  的表达式,小编已知所有的查询语言都不支持  表达,因为计算它的计算代价很大。在翻译之前我们需要用到:

  • 全称量词和存在量词的转化
双重否定
  • 逻辑蕴含的等价
  • 摩根定律 (De Morgan’s laws)

变换一阶逻辑表达式:

全称量词转化逻辑蕴含等价摩根定律
图片
学生表:Student(Sid, Name, Major, Birthdate)
课程表:Course(Cid, CName, Dept)
课程选修表:Enroll(Sid, Cid, Quarter, Grade)

翻译转化后的一阶逻辑表达式  为关系代数表达式:

  •   表示全集  (所有可能的选修信息),其中  表示笛卡尔积
  •  对应一阶逻辑表达式 ,这里需要全集  来表达 negation ()。
  •  对应一阶逻辑表达式 ,其中  表示自然连接,等价于逻辑 “与” ()。
  •  对应一阶逻辑表达式 。
  •  对应一阶逻辑表达式 。
  •  对应整个转化后的 Q2 的一阶逻辑表达式。

Q3:   ,这里直接给出关系代数表达式:

  •  。
  •  。
  •  。

Q4: 答案为 Q3 与 Q2 的逻辑 “与”: 。

Step3. 关系代数 –> SQL 查询

学生表:Student(Sid, Name, Major, Birthdate)
课程表:Course(Cid, CName, Dept)
课程选修表:Enroll(Sid, Cid, Quarter, Grade)

以 Q2 为例子来写查询  :

CREATE VIEW T21 AS
SELECT Sid, Cid, Quarter
FROM Student, Course;

,其中 :

CREATE VIEW T22 AS
SELECT DISTINCT T21.Sid, T21.Cid, T21.Quarter 
EXCEPT
SELECT DISTINCT Sid, Cid, Quarter FROM Enroll;

,其中 :

CREATE VIEW T11 AS
SELECT Cid, Quater 
FROM Enroll
WHERE Sid = 928251;
CREATE VIEW T23 AS
SELECT T11.Sid, T11.Cid, T11.Quarter
FROM T11
NATURAL JOIN T22;

:

CREATE VIEW T24 AS
SELECT DISTINCT *
FROM T21
EXCEPT
SELECT DISTINCT *
FROM T23;

上面的 SELECT DISTINCT * 也可以是 SELECT DISTINCT Sid, Cid, Quarter

, :

SELECT DISTINCT Sid
FROM T24
WHERE Sid != 928521;

关系代数到 SQL 的对应表总结

这里根据 set semantics (集合语义) 给出的对应表。

图片

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88525.html

(0)
guozi's avatarguozi
上一篇 2024年6月3日 下午5:48
下一篇 2024年6月3日 下午5:49

相关推荐

  • sem扫描电镜

    SEM扫描电镜,作为搜索引擎优化行业中的重要工具,其原理和应用备受关注。它可以帮助我们更加深入地了解网页结构和内容,从而优化网站的排名。但是,你知道SEM到底是什么吗?它有哪些优势…

    行业资讯 2024年4月20日
    0
  • 外包建站

    云服务器行业的发展已经成为当今互联网领域中备受关注的热门话题。而在这个行业中,外包建站更是备受瞩目。那么,什么是外包建站呢?它有哪些优势和劣势?它的流程和注意事项又有哪些?常见问题…

    行业资讯 2024年4月18日
    0
  • 如何在上海优化云服务器配置?

    云服务器行业一直是IT领域的热门话题,随着上海地区云服务器市场的不断发展,如何在上海优化云服务器配置成为了众多企业关注的焦点。在这个快节奏的时代,性能优化是企业提高竞争力的必经之路…

    行业资讯 2024年3月24日
    0
  • 百度贴吧被禁止联网在哪里能更改?,百度贴吧怎么会被屏蔽

    随着互联网的发展,越来越多的人使用百度贴吧作为交流和分享的平台。不过,近日有用户反映,自己的百度贴吧域名被屏蔽,无法正常访问。那么什么是百度贴吧域名被屏蔽呢?更重要的是,什么是百度…

    行业资讯 2024年5月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注