我有一个包含两个表的数据库
一个有游戏的人 和一个与参与者 游戏可以有更多的参与者,而这些参与者位于不同的表格中。
有没有办法将这两者合并为一个查询?
由于
答案 0 :(得分:3)
您可以使用JOIN运算符组合它们。
像
这样的东西SELECT *
FROM games g
INNER JOIN participants p ON p.gameid = g.gameid
关于JOIN运算符的说明
INNER JOIN - 匹配INNER中指定的两个表之间的行 基于一个或多个的JOIN语句 具有匹配数据的列。 优选地,连接基于 参照完整性强制执行 表之间的关系 确保数据完整性。 o只是为基本定义添加一些评论 以上,一般是INNER JOIN 选项被认为是最多的 应用程序中需要公共连接 和/或查询。虽然那是 在某些环境中,它是 真的依赖于数据库 设计,参考完整性和数据 申请所需。因此, 请花点时间了解一下 请求的数据然后选择 适当的加入选项。 o尽管大多数连接逻辑都基于匹配值 指定的两列,它是 也可以包括逻辑使用 大于,小于,不等于 等
LEFT OUTER JOIN - 基于连接中指定的两个表 子句,所有数据都从中返回 左桌。在右边的桌子上, 另外还返回匹配数据 到存在记录的NULL值 在左表中,但不在 右表。 o要记住的另一个项目是LEFT和RIGHT OUTER JOIN逻辑彼此相反。 所以你可以改变顺序 特定连接中的表 声明或从左边更改JOIN 向右,反之亦然 相同的结果。
RIGHT OUTER JOIN - 基于连接中指定的两个表 子句,所有数据都从中返回 右表。在左边的桌子上, 另外还返回匹配数据 到存在记录的NULL值 在右边的桌子上但不在左边 表
Self -Join - 在这种情况下,同一张表是 两次指定两次不同 别名以匹配数据 在同一张桌子里。
CROSS JOIN - 基于join子句中指定的两个表,a 如果a,则创建笛卡尔积 WHERE子句会过滤行。 笛卡尔积的大小是 基于乘以数量 左数表中的行数 右表中的行数。请 使用CROSS JOIN时请注意谨慎。
FULL JOIN - 基于join子句中指定的两个表, 从两个表返回所有数据 无论匹配数据如何。
答案 1 :(得分:1)
例如
表游戏有列(gameName,gameID)
table Participant包含列(participantID,participantName,gameID)
GameID列是2个表之间的“链接”。你需要一个可以在两个表之间加入的公共列。
SELECT gameName, participantName FROM Game g JOIN Participat p ON g.gameID = p.gameID
这将返回所有游戏的数据集以及这些游戏的参与者。 游戏列表将是多余的,除非由于该游戏的多个参与者而以其他方式构建游戏。
示例数据
WOW Bob WOW Jake StarCraft2 Neal Warcraft3 James Warcraft3 Rich Diablo Chris