首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学生为CSC考试寻求建议

学生为CSC考试寻求建议
EN

Stack Overflow用户
提问于 2019-11-13 01:48:57
回答 2查看 28关注 0票数 0

我是一名学生,正在学习SQL和DB课程。我的问题是:如何才能擅长手写查询?我们的期末考试将由许多这样的问题组成,我想做好。我们也不允许任何形式的参考表,只是供参考。

我想我要问的是:你将如何处理这个问题?

EN

回答 2

Stack Overflow用户

发布于 2019-11-13 01:56:13

简而言之,您需要练习使用sql。

票数 0
EN

Stack Overflow用户

发布于 2019-11-13 02:15:10

你可能会从别人那里得到很多关于这方面的意见。除了练习和阅读之外,试着确保你理解查询的绝对基础和顺序。

始终使用table.column或alias.column来帮助防止对来自何处的任何模棱两可。

了解编写查询的总体基本部分,例如

代码语言:javascript
复制
select
      [all your alias.columns comma separated]
   from
      [your primary and/or JOIN/LEFT JOIN/etc tables]
   where
          [what is the criteria you are looking for]
      AND [use proper parenthesis to prevent ambiguity if so needed]
   group by
      [any columns if doing aggregates such as count, min, max, avg, etc]
      [you need to list all NON-AGGREGATE alias.columns]
   having
      [if any, such as count(*) > someValue]
   order by
      [any specific columns and ascending or descending order]
      [such as orderDate DESC to put most recent order at top]

在我看来,获取FROM子句是最重要的之一,我总是尝试在第一个表/别名=第二个表/别名上列出我的表连接子句。缩进在这里很有帮助,这样您就可以看到如何从一个表转到下一个表。在这一点上,不要考虑您的过滤(还没有),只考虑表是如何相关的。然后,您可以为您从该来源特别查找的内容添加"AND“标准。

订单的一个示例。寻找在过去30天内订购的客户。从源代码开始,将其作为第一个FROM table,其他所有内容都在此基础上。所以我从订单开始,因为我关心的是什么时候订购。然后我可以加入到客户那里去获取他们的名字。

代码语言:javascript
复制
select
      c.LastName,
      c.FirstName,
      o.OrderDate
   from
      Orders o
         JOIN Customers c
            on o.CustomerID = c.CustomerID
   where
      o.OrderDate > [sql-specific current date - 30 days]
   order by
      c.LastName,
      c.FirstName

在过去30天内订购特定项目的订单的另一个示例。在这种情况下,我可以颠倒细节的顺序,因为被排序的特定事物可能是更小的粒度而不是所有的东西。因此,修改上面的内容,比如

代码语言:javascript
复制
select
      c.LastName,
      c.FirstName,
      o.OrderDate
   from
      Items i
         JOIN OrderDetails od
            on i.ItemID = od.ItemID
            JOIN Orders o
               on od.OrderID = o.OrderID
               AND o.OrderDate > [sql-specific current date - 30 days]
               JOIN Customers c
                  on o.CustomerID = c.CustomerID
   where
      i.ItemDescription = 'SomeThing'
   order by
      c.LastName,
      c.FirstName

注意我的缩进嵌套。个人风格偏好,但至少你可以看到如何别名i到od,od到o,o到c。在我的偏好中,更容易看到表的轨迹以及每个表是如何直接相关的。我还添加了"AND“子句,以便直接在连接到orders表中筛选出过去30天内的订单。

左连接,我做同样的事情,并将条件直接保持在连接级别。如果您将左连接的条件放入WHERE子句中(没有显式处理NULL或条件,它会将左连接转换为内连接。

希望这篇基本指南能帮助您更好地编写自己的查询和课程/考试准备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58824054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档