第1关 查询每个选手的信息及其提交的解答信息,没做题的选手不显示

sql
1
2
3
4
5
6
7
8
9
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT *
FROM users u,solution s
WHERE u.user_id = s.user_id
LIMIT 50;

########## End ##########

第2关 查询做了1001题且耗时大于500(time)的选手信息

sql
1
2
3
4
5
6
7
8
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT u.user_id,u.reg_time,u.name
FROM users u,solution s
WHERE u.user_id = s.user_id AND s.time>500 AND s.problem_id = 1001;

########## End ##########

第3关 查询所有选手信息及其提交的解答信息,没做题的选手也要显示

sql
1
2
3
4
5
6
7
8
9
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT *
FROM users u
LEFT JOIN solution s
    ON u.user_id = s.user_id
LIMIT 50;
########## End ##########

第4关 查询每个选手的信息、交的题目、和提交的结果,没做题的选手不显示

sql
1
2
3
4
5
6
7
8
9
10
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT u.user_id,u.reg_time,u.name,s.problem_id,s.result
FROM users u
JOIN solution s
    ON u.user_id = s.user_id
LIMIT 50;

########## End ##########

第5关 用嵌套查询查找和problem_id为 1026 的题目属于同一个比赛的题目信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT *
FROM problem p
WHERE problem_id IN(
    SELECT problem_id
    FROM contest_problem
    WHERE contest_id IN(
        SELECT contest_id
        FROM contest_problem
        WHERE problem_id = '1026'
    )
)
ORDER BY problem_id;

########## End ##########

第6关 用连接查询查找和problem_id为 1026 的题目属于同一个比赛的题目信息

sql
1
2
3
4
5
6
7
8
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT p.problem_id,title,description,hint,time_limit,memory_limit
FROM problem p,contest_problem cpA,contest_problem cpB
WHERE cpA.problem_id = 1026 AND cpA.contest_id = cpB.contest_id AND cpB.problem_id = p.problem_id
ORDER BY p.problem_id
########## End ##########

第7关 用 EXISTS 实现查询做了 1032 号题的选手信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT *
FROM users u
WHERE EXISTS(
    SELECT *
    FROM solution
    WHERE problem_id = 1032 AND u.user_id = user_id
);

########## End ##########

第8关 用NOT EXISTS实现查询没做 1032 号题的选手信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT *
FROM users u
WHERE NOT EXISTS(
    SELECT *
    FROM solution s
    WHERE problem_id = 1032 AND u.user_id = s.user_id
);

########## End ##########

第9关 用 EXISTS 实现查询和problem_id为 1026 的题目属于同一个比赛的题目信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT *
FROM problem p
WHERE EXISTS(
    SELECT *
    FROM contest_problem cpA,contest_problem cpB
    WHERE cpA.problem_id = 1026 AND cpA.contest_id = cpB.contest_id AND p.problem_id = cpB.problem_id
);

########## End ##########

第10关 用 NOT EXISTS 实现查询参与过所有比赛的选手信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT *
FROM users u
WHERE NOT EXISTS(
    SELECT *
    FROM contest c
    WHERE NOT EXISTS(
        SELECT *
        FROM solution s
        WHERE u.user_id = s.user_id AND c.contest_id = s.contest_id
    )
);

########## End ##########