首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中从联接表中选择时,连接操作是否发生在选择之前?

在MySQL中从联接表中选择时,连接操作是否发生在选择之前?
EN

Stack Overflow用户
提问于 2019-03-01 19:45:47
回答 1查看 69关注 0票数 0

我意识到这可能是一个有点愚蠢的问题,但我正在学习SQL,我很难理解加入表的想法。

下面是一个示例查询:

代码语言:javascript
复制
select name, title from instructor natural join teaches, course 
  where teaches.course_id = course.course_id;

连接发生在选择之前,对吗?因此,如果我想要从不同表中存在的属性生成查询,我可以简单地选择我想要的属性,而不必指定它们在不同的表中,因为一旦它们被连接,select命令就可以在连接关系上工作,而不是两个单独的关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 19:58:02

您可以将连接看作是创建一个新的虚拟行,其中两个连接表中的所有列都是并排的。

假设您有桌子:

代码语言:javascript
复制
mysql> create table A (c1 int, c2 int, c3 int);
mysql> create table B (c4 int, c5 int, c6 int);
mysql> insert into A values (1,2,3); 
mysql> insert into B values (4,5,6);

您可以查询FROM A JOIN B ON ...condition...,现在您的WHERE子句和SELECT子句应用于一组有六列的行。

代码语言:javascript
复制
mysql> select * from a join b;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c4   | c5   | c6   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |    4 |    5 |    6 |
+------+------+------+------+------+------+

这样你就可以做这样的事情:

代码语言:javascript
复制
WHERE c1 = 123 AND c4 = 456

它测试每个已连接的行,因此您可以引用任一表中的任何列,就好像它们位于同一行一样。实际上,它们在连接结果中位于同一行。

同样,可以在选择列表中引用这些列中的任何一列。

代码语言:javascript
复制
SELECT c2, c6 FROM ...

如果两个表中都存在同名的列,该怎么办?这时,您应该用table.column语法限定列名,这样就不会对您所指的列名模棱两可。

PS:您应该养成对所有表使用联接语法的习惯。不要使用旧的逗号样式的联接语法。混合这两种语法样式会给您带来意外的问题,因为优先顺序。在“联接比逗号运算符(,).”一节中,请阅读https://dev.mysql.com/doc/refman/8.0/en/join.html

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

https://stackoverflow.com/questions/54951343

复制
相关文章

相似问题

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