有如下的用户信息表 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_detail
和 user_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 = '浙江大学';
查询结果和子查询的返回是一致的,这里不再赘述。
网友评论