gpt4 book ai didi

MySQL - 另一种减少连接数量的方法? - 或简写语法

转载 作者:可可西里 更新时间:2023-11-01 07:35:00 25 4
gpt4 key购买 nike

所以我完成了一项家庭作业(下面有提示和更多详细信息),我的其中一个答案如下所示:

SELECT Student.SSN, FirstName, LastName, Section.SectionNo, Section.Instructor
FROM Course Join Enrolls ON Course.CourseNo = Enrolls.CourseNo
JOIN Student ON Student.SSN = Enrolls.SSN
JOIN Section ON Section.SectionNo = Enrolls.SectionNo AND Section.CourseNo = Course.CourseNo
WHERE CourseName = 'Data structure and Algorithms'

我在想,有没有另一种方法可以完成同样的事情,同时又不会让代码看起来那么困惑?是否有更有效或至少是简写的语法方式来完成我所做的事情?


提示:获取参加“数据结构与算法”类(class)的学生的信息(SSN、名字和姓氏)。还可以获取他们在类(class)中注册的部分编号以及该部分的讲师。

这是我的表格的样子:

学生

SSN         FirstName    LastName    Street            City         State    Zip
1237456787 Dilly Dob 1233 Revem Court Sacramento CA 56123
1237456788 Filly Fob 1243 Roasm Road Sacramento CA 21234
1237456789 Billy Bob 1234 Random Lane Sacramento CA 12145

部分

CourseNo    SectionNo    Instructor
CSC300 1 Prof Cool
CSC300 2 Prof Cool
CSC300 3 Prof Cool
CSC133 2 Prof SuperCool
CSC133 1 Prof SuperCool
CSC133 3 Prof SuperCool
CSC137 2 Prof NotSoCool

注册

SSN         SectionNo   CourseNo
1237456787 1 CSC300
1237456788 1 CSC300
1237456789 1 CSC300
1237456789 2 CSC133
1237456789 2 CSC137

类(class)

CourseNo   CourseName                                 Department
CSC300 Advanced Database Management Systems Computer Science
CSC133 Data Structure and Algorithms Computer Science
CSC137 Computer Organization and Digital Circuits Computer Science

结果应该是

SSN        FirstName    LastName    SectionNo    Instructor
123456789 Billy Bob 2 Prof SuperCool

最佳答案

根据描述和限定词,您的查询尽可能少。一些注意事项,特别是对于学习和长期理智。每当在查询中处理多个表时,请养成始终使用 table.column(或 alias.column)限定可读性的习惯,特别是如果表名很长,请应用较短的“别名”。

其次,这更像是一种时尚的格式,非常适合连接以了解事物的来源。 INDENT...而且,在联接中,我总是尝试将我的第一个表列为联接相等性的第一端。稍后在您的教育中阅读和实现 LEFT JOIN 标准时会更容易......

SELECT 
S.SSN,
S.FirstName,
S.LastName,
Section.SectionNo,
Section.Instructor
FROM
Course C
Join Enrolls E
ON C.CourseNo = E.CourseNo
JOIN Student S
ON E.SSN = S.SSN
JOIN Section
ON C.CourseNo = Section.CourseNo
AND E.SectionNo = Section.SectionNo
WHERE
C.CourseName = 'Data structure and Algorithms'

注意 enrolls 表是类(class)的子关系。 Student 是 Enrolls 的子关系,但 Section child 也是 Enrolls 的子关系。但是“ON”子句同时查看类(class)表和注册表。

同样,个人学习偏好的查询方式。此外,通过排列所有列,如果您要查找特定的列,请直接向下查看列表并根据需要添加/删除。

此外,对于表格,我强烈建议为 ID 获取自动递增列,尤其是当 SSN(私有(private)信息)可能不正确时,例如非法或没有此类 SSN 可供学生使用。您仍然可以按姓名查找一个人,并让这个内部自动递增成为登记表的基础。如果某人确实有 SSN(或绿卡号、学生签证等),则内部 ID 不会有任何冲突。

关于MySQL - 另一种减少连接数量的方法? - 或简写语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com