第一关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表)
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT S.*,J.*
FROM S,J
WHERE S.city=J.city;
########## End ##########
第2关:查询供应情况,并显示供应商、零件和工程三者的名称
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成; P表如下图:
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。 J表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT SNAME,PNAME,JNAME,QTY
FROM S,P,J,SPJ
WHERE SPJ.sno=S.sno AND SPJ.pno=P.pno AND SPJ.jno=J.jno;
########## End ##########
第3关:找出上海厂商供应的所有零件号码(注意去重)
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT PNO
FROM S,SPJ
WHERE SPJ.sno=S.sno AND city='上海';
########## End ##########
第4关:找出使用上海产的零件的工程名称,结果按工程名称降序排序。
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。 J表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT JNAME
FROM S,SPJ,J
WHERE SPJ.sno=S.sno AND J.jno=SPJ.jno AND S.city='上海';
########## End ##########
第5关:找出没有使用天津产的零件的工程号码
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT JNO
FROM SPJ
WHERE JNO NOT IN(
SELECT JNO
FROM SPJ
WHERE SNO IN(
SELECT SNO
FROM S
WHERE CITY='天津'
)
);
########## End ##########
第6关:求供应工程J1零件为红色的供应商号码SNO
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成; P表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT SNO
FROM SPJ
WHERE JNO='J1' AND PNO IN(
SELECT PNO
FROM P
WHERE COLOR='红'
);
########## End ##########
第7关:求没有使用天津供应商生产的红色零件的工程号 JNO
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成; P表如下图:
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:
USE mydata;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT JNO
FROM SPJ
WHERE JNO NOT IN(
SELECT JNO
FROM SPJ
WHERE PNO IN(
SELECT PNO
FROM P
WHERE COLOR='红') AND SNO IN(
SELECT SNO
FROM S
WHERE CITY='天津'
)
);
########## End ##########
第8关:查询每个选手的信息及其提交的解答信息,没做题的选手不显示 (查询结果仅显示前50条,即在查询语句末尾加LIMIT 50)
users为选手信息表;
solution为选手提交的题目解答文章来源:https://www.toymoban.com/news/detail-733913.html
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT*
FROM users,solution
WHERE users.user_id=solution.user_id
LIMIT 50;
########## End ##########
第9关:查询做了1001题且耗时大于500(time)的选手信息
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT DISTINCT users.user_id,reg_time,name
FROM users,solution
WHERE users.user_id=solution.user_id AND solution.problem_id=1001 AND solution.time>500;
########## End ##########
第10关:查询所有选手信息及其提交的解答信息,没做题的选手也要显示 (查询结果仅显示前50条,即在查询语句末尾加LIMIT 50)
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT *
FROM users
LEFT JOIN solution
ON users.user_id=solution.user_id
LIMIT 50;
########## End ##########
第11关:查询每个选手的信息、交的题目、和提交的结果,没做题的选手不显示 (查询结果仅显示前50条,即在查询语句末尾加LIMIT 50)
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;
#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。
########## Begin ##########
SELECT users.user_id,reg_time,name,problem_id,result
FROM users,solution
WHERE users.user_id=solution.user_id
LIMIT 50;
########## End ##########
第12关:用嵌套查询查找和problem_id为 1009 的题目属于同一个比赛的题目信息,结果按problem_id升序排序。
problem为题目表;
contest_problem为比赛-题目关系;
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT problem.*
FROM problem
WHERE problem_id IN(
SELECT problem_id
FROM contest_problem
WHERE contest_id IN(
SELECT contest_id
FROM contest_problem
WHERE problem_id=1009
)
ORDER BY problem_id ASC
)
########## End ##########
第13关:用连接查询查找和problem_id为 1009 的题目属于同一个比赛的题目信息,结果按problem_id升序排序。
problem为题目表;
contest_problem为比赛-题目关系;
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT problem.problem_id,title,description,hint,time_limit,memory_limit
FROM problem,contest_problem A,contest_problem B
WHERE A.problem_id=1009 AND A.contest_id=B.contest_id AND problem.problem_id=B.problem_id
ORDER BY B.problem_id ASC;
########## End ##########
第14关:用 EXISTS 实现查询做了 1032 号题的选手信息
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT user_id,reg_time,name
FROM users
WHERE EXISTS(
SELECT *
FROM solution
WHERE users.user_id=solution.user_id AND problem_id=1032
);
########## End ##########
第15关:用 EXISTS 实现查询没做 1032 号题的选手信息
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT user_id,reg_time,name
FROM users
WHERE NOT EXISTS(
SELECT *
FROM solution
WHERE users.user_id=solution.user_id AND problem_id=1032
);
########## End ##########
第16关:用 EXISTS 实现查询和problem_id为 1009 的题目属于同一个比赛的题目信息,结果按problem_id升序排序。
problem为题目表;
contest_problem为比赛-题目关系;
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT problem.*
FROM problem
WHERE problem_id IN(
SELECT problem_id
FROM contest_problem
WHERE contest_id IN(
SELECT contest_id
FROM contest_problem
WHERE problem_id=1009
)
ORDER BY problem_id ASC
)
########## End ##########
第17关:用 EXISTS 实现查询参与过所有比赛的选手信息
users为选手信息表;
contest为比赛信息表;
solution为选手提交的题目解答
文章来源地址https://www.toymoban.com/news/detail-733913.html
USE `sqlexp-sztuoj`;
#请在此处添加实现代码
########## Begin ##########
SELECT users.user_id,reg_time,name
FROM users
WHERE NO EXISTS(
SELECT *
FROM contest
WHERE NO EXISTS(
SELECT *
FROM solution
WHERE user_id=users.user_id AND contest_id=contest.contest_id
)
);
########## End ##########
到了这里,关于数据库系统头歌实验二 SQL的多表查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!