所以我完成了一项家庭作业(下面有提示和更多详细信息),我的其中一个答案如下所示:
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/
我正在学习如何使用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
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类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
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>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
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我正在使用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].有没有一种方法可以