【发布时间】:2016-08-23 23:45:02
【问题描述】:
我们一直在数据库系统课程中学习 SQL Server 编程。教授走得特别快,而且对提问不是很开放。我确实问过他这个问题,但他只是建议我查看他给出的代码(实际上并没有回答问题)。
在进行查询时,使用术语 JOIN 和使用“=”运算符有什么区别?例如,我有以下查询:
SELECT VENDOR_NAME, ITEM_NAME, QTY
FROM VENDOR, VENDOR_ORDER, INVENTORY
WHERE VENDOR.VENDOR_ID = VENDOR_ORDER.VENDOR_ID
AND VENDOR_ORDER.INV_ID = INVENTORY.INV_ID
ORDER BY VENDOR_NAME
教授在课堂上使用了以下代码:
SELECT DISTINCT CUS_CODE, CUS_LNAME, CUS_FNAME
FROM CUSTOMER JOIN INVOICE USING (CUS_CODE)
JOIN LINE USING (INV_NUMBER)
JOIN PRODUCT USING (P_CODE)
WHERE P_DESCRIPT = 'Claw hammer';
在我看来,使用连接执行的功能与我的“=”相同?我是正确的还是有我不知道的差异?
编辑: 尝试根据我在 Google 上找到的内容使用 Inner Join。我最终得到了以下结果。
SELECT VENDOR_NAME, ITEM_NAME, QTY
FROM VENDOR, VENDOR_ORDER, INVENTORY
INNER JOIN VENDOR_ORDER USING (VENDOR_ID)
INNER JOIN INVENTORY USING (INV_ID)
ORDER BY VENDOR_NAME
现在我收到错误消息““VENDOR_ID”不是可识别的表提示选项。如果它打算作为表值函数或 CHANGETABLE 函数的参数,请确保您的数据库兼容模式设置为 90 . " 我用的是2014,所以我的兼容级别是120。
【问题讨论】:
-
您使用的是旧的旧连接语法。像教授一样使用显式连接语法
-
该语法在 SQL Server 类中?
-
所以他们在做同样的事情,但是 JOIN 是首选?此外,它会使大型查询运行得稍微快一些吗?
-
据我所知,
USING在 SQL Server 中不起作用。您应该使用带有ON子句的显式JOIN语法。
标签: sql-server join equals-operator