SQL primer:为什么以及如何使用join语句?

And*_*rew 1 mysql sql join

我有一个MySQL数据库,如下所示:

users
    ( id , name )
groups
    ( id , name )
group_users
    ( id , group_id , user_id )
Run Code Online (Sandbox Code Playgroud)

现在要查找用户所属的所有组,我会这样做:

select * from 'group_users' where 'user_id' = 47;
Run Code Online (Sandbox Code Playgroud)

这可能会返回如下内容:

( 1 , 3 , 47 ),
( 2 , 4 , 47 ),
Run Code Online (Sandbox Code Playgroud)

但是当我想向用户显示这个时,我想要显示它们所属的组的名称而不是group_id.在循环中,我可以使用group_id返回的组来获取每个组,但这似乎是错误的方法.这是一个join应该使用声明的情况吗?我应该使用哪种类型的连接以及如何使用它?

Wel*_*bog 7

通常,您希望通过使每个查询执行更多操作来减少对数据库的查询总数.这是一件好事有很多原因,但主要的原因是关系数据库管理系统专门设计为能够快速连接表,并且比其他语言中的等效代码更好.另一个原因是,打开许多小查询通常比运行一个包含您最终需要的所有内容的大型查询更昂贵.

您希望利用RDBMS的优势,因此您应该尝试在几个大查询中推送数据访问,而不是大量的小查询.

现在,这只是一般的经验法则.有些情况下,在数据库之外做一些事情会更好.重要的是,当且仅当它们出现时,通过查看瓶颈来确定哪种情况适合您的情况.在发现性能问题之前,不要花时间担心性能问题.

但是,一般来说,最好在数据库本身处理联接,查找和所有其他与查询相关的任务,而不是尝试用通用语言处理它.

也就是说,你想要的那种连接就是内连接.您可以像这样构建连接查询:

SELECT groups.name, group_users.user_id
FROM group_users
INNER JOIN groups
  ON group_users.group_id = groups.group_id
WHERE groups.user_id = 47;
Run Code Online (Sandbox Code Playgroud)