首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Northwind数据库的SQL查询(Catch: Northwind)

使用Northwind数据库的SQL查询(Catch: Northwind)
EN

Stack Overflow用户
提问于 2015-01-20 18:36:20
回答 1查看 1.4K关注 0票数 1

首先也是最重要的--这是一项家庭作业,但我并没有要求任何人去做。相反,我需要帮助如何构造查询。

作为赋值的一部分,通过Microsoft Access使用Northwind数据库,我必须构造这个查询:

由姓Fuller的员工订购的所有产品的产品ID、产品名称和数量。

现在,当我在设计模式中构造查询时,我得到的代码如下:

代码语言:javascript
复制
SELECT Products.ProductID, Products.ProductName, [Order Details].Quantity
FROM Products INNER JOIN ((Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID) INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID) ON Products.ProductID = [Order Details].ProductID
WHERE (((Employees.LastName)="Fuller"));

正如我前面提到的,我们不允许使用内部连接。到目前为止,在仔细阅读课文/笔记之后,我找不到该怎么做。(对SQL非常陌生)

我会重写FROM的声明吗?如果是,SELECT和WHERE语句会改变吗?

更新:这里是我重写它时的代码:

代码语言:javascript
复制
SELECT Orders.OrderID, Orders.CustomerID, Orders.ShipCity
FROM Products, Orders, [Order Details], Employees
WHERE
  Products.ProductID = [Order Details].ProductID
  AND Employees.EmployeeID = Orders.EmployeeID
  AND Ordes.OrderID = [Order Details].OrderID
  AND Employees.LastName = "Fuller";

不过,我遇到了语法问题。由于订单细节必须包含在括号中,所以它希望为我在WHERE语句中所写的内容请求参数值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-20 19:42:43

不使用INNER JOIN的要求有点奇怪,我不能保证这是为您的作业准备的。

另一种在两个表之间编写简单关系的方法是使用一个IN ()子查询,一般形式如下:

代码语言:javascript
复制
SELECT *
FROM a_table
WHERE some_column IN (
  SELECT some_related_column
  FROM b_table
  WHERE some_condition
)

但是,由于您必须表示SELECT列表中4个表中的多个表中的一个以上的列,所以该表单不会适用于您。另一种不显式使用INNER JOIN的方法是使用较早的隐式连接语法,在FROM子句中列出多个表,用逗号分隔,并将它们的连接条件放在WHERE子句中而不是ON中。

一般形式是:

代码语言:javascript
复制
SELECT 
  a_table.col1,
  a_table.col2,
  b_table.col1
FROM
  a_table,
  b_table
WHERE
 a_table.some_column = b_table.some_related_column
 AND some_other_conditions

这是一项任务,我将由你来计算整条语句,但你的表格如下

代码语言:javascript
复制
SELECT
  Orders.OrderID,
  Orders.CustomerID
FROM 
  Products,
  Orders,
  [Order Details],
  Employees
WHERE
  Products.ProductID = [Order Details].ProductID 
  AND ... (the other table relationships)
  AND Employees.LastName = 'Fuller'

尽管它在功能上与显式INNER JOIN的相同,但这是一种较旧的语法,而且现在经常被禁止使用。More discussion is available in this question

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

https://stackoverflow.com/questions/28052735

复制
相关文章

相似问题

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