SQL 使用 Northwind 数据库查询(注意:没有内连接)
SQL Query with the Northwind database (Catch: no Inner Join)
首先 - 这是一项家庭作业,但我不要求任何人去做。相反,我需要有关如何构建查询的帮助。
作为作业的一部分,通过 Microsoft Access 使用 Northwind 数据库,我必须构造此查询:
The product ID, product name, and quantity ordered for all products ordered on an order taken by an employee with last name Fuller.
现在,当我在设计模式下构造查询时,这是我得到的代码:
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"));
正如我之前提到的,我们不允许使用 Inner Join。到目前为止,在搜索 text/notes 之后,我找不到如何去做。 (对 SQL 很陌生)
我会重写 FROM 语句吗?如果是这样,SELECT 和 WHERE 语句会改变吗?
更新:这是我重写的代码:
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";
不过我遇到了某种语法问题。由于Order Details必须用括号括起来,所以它要问的是我在WHERE语句中写的参数值。
不使用 INNER JOIN
的要求有点特殊,我不能保证这是为您的作业设计的。
另一种编写两个表之间简单关系的方法是使用 IN ()
子查询,一般形式为:
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
.
一般形式为:
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
这是一个作业,我会把它留给你来计算整个陈述,但你的形式会像
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
s 相同,但这是一种较旧的语法,现在通常不鼓励使用。 More discussion is available in this question
首先 - 这是一项家庭作业,但我不要求任何人去做。相反,我需要有关如何构建查询的帮助。
作为作业的一部分,通过 Microsoft Access 使用 Northwind 数据库,我必须构造此查询:
The product ID, product name, and quantity ordered for all products ordered on an order taken by an employee with last name Fuller.
现在,当我在设计模式下构造查询时,这是我得到的代码:
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"));
正如我之前提到的,我们不允许使用 Inner Join。到目前为止,在搜索 text/notes 之后,我找不到如何去做。 (对 SQL 很陌生)
我会重写 FROM 语句吗?如果是这样,SELECT 和 WHERE 语句会改变吗?
更新:这是我重写的代码:
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";
不过我遇到了某种语法问题。由于Order Details必须用括号括起来,所以它要问的是我在WHERE语句中写的参数值。
不使用 INNER JOIN
的要求有点特殊,我不能保证这是为您的作业设计的。
另一种编写两个表之间简单关系的方法是使用 IN ()
子查询,一般形式为:
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
.
一般形式为:
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
这是一个作业,我会把它留给你来计算整个陈述,但你的形式会像
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
s 相同,但这是一种较旧的语法,现在通常不鼓励使用。 More discussion is available in this question