草庐IT

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

coder 2023-10-11 原文

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

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/

有关MySQL - 另一种减少连接数量的方法? - 或简写语法的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  6. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  7. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  8. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

随机推荐