数据库系统头歌实验二 SQL的多表查询

第一关:等值连接:求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为选手提交的题目解答

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为选手提交的题目解答

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 ##########

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stearm210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值