美文网首页
【实践篇】子查询

【实践篇】子查询

作者: 山药鱼儿 | 来源:发表于2022-04-04 06:27 被阅读0次

有如下的用户信息表 user_profile

以及问题回答明细表 question_practice_detail

下面,我们希望检索出所有浙江大学用户的问题回答明细。

为此,我们首先需要检索出所有的浙江大学用户的 device_id ,并将该查询结果作为子查询。然后从 question_practice_detail 中检索出 device_id 位于该子查询结果集的记录。

SQL 实现如下:

SELECT 
    device_id, question_id, result
FROM 
    question_practice_detail
WHERE 
    device_id IN (SELECT device_id FROM user_profile WHERE university = '浙江大学');

子查询的结果集位于 IN 关键字之后,用于 WHERE 子句的过滤条件,检索结果如下。

除了使用子查询进行过滤完成检索外,我们也可以使用内连接来完成上述查询。

用户表 user_profile 和问题回答名字表 question_practice_detail 通过 device_id 字段关联,为一对多的关系;即一个用户对应多条回答,一个回答对应一个用户。

内连接查询 SQL 如下:其中 question_practice_detailuser_profile 都指定了简洁的别名,以方便在连接条件中引用。

SELECT 
    q.device_id, q.question_id, q.result
FROM 
    question_practice_detail AS q
INNER JOIN 
    user_profile AS u
ON 
    q.device_id = u.device_id AND u.university = '浙江大学';

内连接的另一种书写形式是 WHERE 子句的形式,在 FROM 后添加需要查询的多张表,在 WHERE 子句中指定过滤条件即可。

SELECT 
    q.device_id, q.question_id, q.result
FROM 
    question_practice_detail AS q,
    user_profile AS u
WHERE
    q.device_id = u.device_id AND u.university = '浙江大学';

查询结果和子查询的返回是一致的,这里不再赘述。

相关文章

网友评论

      本文标题:【实践篇】子查询

      本文链接:https://www.haomeiwen.com/subject/xhbgjrtx.html