方法一:IN子查询
表《question_practice_detail》中的device_id全部来自于表《user_profile》中的浙江大学的device_id。
SELECT
    device_id,
    question_id,
    result
from question_practice_detail
where device_id in (
    select device_id from user_profile
    where university = '浙江大学')
代码运行时间44ms。
方法二:谓词exists 替换 IN子查询。
SELECT
    device_id,
    question_id,
    result
from question_practice_detail qpd
where EXISTS (
    select * from user_profile up
    where up.university = '浙江大学'
    and qpd.device_id = up.device_id)
方法一中的device_id in ()等价于方法二中的qpd.device_id = up.device_id。
代码运行时间42ms。
方法三:外连接。
SELECT
    qpd.device_id device_id,
    qpd.question_id question_id,
    qpd.result result
from question_practice_detail qpd
left join user_profile up
on qpd.device_id = up.device_id
where up.university = '浙江大学'
代码运行时间43ms。
方法四:case表达式+子查询(纯粹为了练习使用case表达式)
SELECT
    device_id,
    question_id,
    result
from
    (select
    case when device_id in (
    select device_id from user_profile
    where university = '浙江大学')
    then device_id
    else null end as device_id,
    case when device_id in (
    select device_id from user_profile
    where university = '浙江大学')
    then question_id
    else null end as question_id,
    case when device_id in (
    select device_id from user_profile
    where university = '浙江大学')
    then result
    else null end as result
from question_practice_detail) T
where device_id is not null
代码运行时间43ms。