第一关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表)
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:
USE mydata;#请在此处添加实现代码########## Begin ##########SELECT S.*,J.*FROM S,JWHERE 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,QTYFROM S,P,J,SPJWHERE 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,SPJWHERE 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 JNAMEFROM S,SPJ,JWHERE 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 JNOFROM SPJWHERE 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 SNOFROM SPJWHERE 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 JNOFROM SPJWHERE 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为选手提交的题目解答
USE `sqlexp-sztuoj`;#请在此处添加实现代码,在语句末尾加LIMIT 50,即可显示查询结果前50条。########## Begin ##########SELECT*FROM users,solutionWHERE 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,nameFROM users,solutionWHERE 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 usersLEFT JOIN solutionON 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,resultFROM users,solutionWHERE 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 problemWHERE 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_limitFROM problem,contest_problem A,contest_problem BWHERE A.problem_id=1009 AND A.contest_id=B.contest_id AND problem.problem_id=B.problem_idORDER BY B.problem_id ASC;########## End ##########
第14关:用 EXISTS 实现查询做了 1032 号题的选手信息
users为选手信息表;
solution为选手提交的题目解答
USE `sqlexp-sztuoj`;#请在此处添加实现代码########## Begin ##########SELECT user_id,reg_time,nameFROM usersWHERE 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,nameFROM usersWHERE 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 problemWHERE 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为选手提交的题目解答
USE `sqlexp-sztuoj`;#请在此处添加实现代码########## Begin ##########SELECT users.user_id,reg_time,nameFROM usersWHERE NO EXISTS( SELECT * FROM contest WHERE NO EXISTS( SELECT * FROM solution WHERE user_id=users.user_id AND contest_id=contest.contest_id ) );########## End ##########
来源地址:https://blog.csdn.net/m0_53227534/article/details/128419664