mysql - SQL "Table_Name.Column_name"VS "Column_name"性能和语法

标签 mysql sql mysql-workbench

我是 SQL 新手,目前正在阅读“自学 SQL 书籍”

书中提到有时您需要用列名指定表名(紧接在 SELECT 行之后)以获得您想要的结果。还提到无论如何这样做通常是很好的做法。这是一个具体的例子:

SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;

SELECT Vendors.vend_name, Products.prod_name, Products.prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;

两个代码块实现相同的结果。我的问题是是否存在性能差异,以及全名是否更好。

提前致谢。

最佳答案

首先,学习正确的 join 语法。简单规则:永远不要在 from 子句中使用逗号。

其次,学会使用表别名。这些应该是表格的缩写。表别名使查询更易于编写和阅读。

第三,始终使用限定的列名。使用列名对性能没有影响。哦,如果你只有一张 table 或类似的东西,也许你会破例。但是,包括表别名是一个很好的主意,一种最佳实践。为什么?

  • 您或其他人将来可能会查看查询,但不想弄清楚哪些名称来自哪些表。
  • 您或其他人可以将新列添加到其中一个表中,以匹配另一个表中的列。而且,查询神秘地停止工作。
  • 您或其他人可能会说“多么好的查询,但我需要添加另一个表”。另一个表有命名冲突,只是引入了更多的工作。

所以,我会将查询写成:

SELECT v.vend_name, p.prod_name, p.prod_price
FROM Vendors v JOIN
     Products p
     ON v.vend_id = p.vend_id;

或者,如果你愿意:

SELECT v.vend_name, p.prod_name, p.prod_price
FROM Vendors v JOIN
     Products p
     USING (vend_id)

关于mysql - SQL "Table_Name.Column_name"VS "Column_name"性能和语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594793/

相关文章:

MySql WorkBench "Execute Query into Text Output"选项未显示完整结果

mysql - 多个 INSERT INTO 语句删除数据

asp.net - 将免费提供的 Asp.Net 论坛与 MySQL 数据库上的 Asp.net Web 应用程序集成

c++ - 将 Raspberry Pi 2 连接到外部远程数据库

php - SQL SELECT 仅具有来自两个不同表的列的 MAX 值的行

mysql - 如何使用动态 LIMIT 编写 SQL 查询

mysql - 在 mysql 索引上优化 key_len

mysql - Perl + DBI + MySQL : How To Run Multiple Queries/Statements

php - SQL查询哪里不同

mysql - 不使用 MySQL Workbench 创建新数据库