SQL查询(连接查询、嵌套查询)

以下SQL语句均在SQL2008环境下执行

按照《数据库系统概论》(第五版)P79页的学生课程数据库和P70-71页中的SPJ数据库完成以下查询

  1. P130    3:(3);(6)

3(3)

代码:

--表S和表T做自然连接

SELECT A,B,S.C,S.D,E,F

FROM S,T

WHERE S.C=T.C AND S.D=T.D

 

3(6)

代码:

--投影表S的C、D属性列,与表T做笛卡儿积

SELECT S.C,S.D,T.*

FROM S,T

 

  1. 查询所有供应商的姓名和所在城市。

代码:

--查询所有供应商的姓名和所在城市

SELECT SNAME,CITY

FROM S

 

  1. 查询使用上海供应的零件的工程名称。

代码:

--查询使用上海供应的零件的工程名称

SELECT DISTINCT JNAME 

FROM S,J,SPJ

WHERE S.SNO = SPJ.SNO AND S.SNO = 'S5' AND J.JNO = SPJ.JNO

 

  1. 查询每个工程的信息及相应的供应信息(包括列出尚未被供应零件的那些工程)。

查询结果形如下:

jno  jname     city   sno   pno  qty    

---- --------  ----   ----  ---- ------

j1   三建       北京   s1   p1   200

j1   三建       北京   s2   p3   400

……

j4   造船厂      天津   s5   p6   500

j5   机车厂      唐山   s2   p3   400

j6   无线电厂     常州   NULL NULL NULL

j7   半导体厂     南京   NULL NULL NULL

 

代码:

--查询每个工程的信息及相应的供应信息(包括列出尚未被供应零件的那些工程)

SELECT J.JNO, JNAME, CITY, SNO, PNO, QTY

FROM J LEFT OUTER JOIN SPJ ON(J.JNO = SPJ.JNO)

 

  1. 查询供应工程J1蓝色零件的供应商号SNO,请用两种方法实现。

 

代码:

--查询供应工程J1蓝色零件的供应商号SNO,方法一

SELECT DISTINCT SNO

FROM P, SPJ

WHERE P.PNO = SPJ.PNO AND SPJ.JNO = 'J1' AND P.COLOR = '蓝'

 

 

--查询供应工程J1蓝色零件的供应商号SNO,方法二

SELECT DISTINCT SNO

FROM P, SPJ

WHERE SNO IN

(SELECT SNO

 FROM SPJ

 WHERE PNO IN

(SELECT PNO

 FROM P

 WHERE COLOR = '蓝'

 )

 );

 

  1. 查询先行课的学分为4的课程信息。

代码:

--查询先行课的学分为的课程信息

SELECT *

FROM COURSE SECOND

WHERE SECOND.Cno IN

(SELECT Cpno

 FROM COURSE FIRST

 WHERE SECOND.Ccredit = 4

);

 

  1. 查询课程名称与其间接先行课的名称。

代码:

--查询课程名称与其间接先行课的名称

SELECT FIRST.Cname, THIRD.Cname

FROM COURSE FIRST, COURSE SECOND, COURSE THIRD

WHERE FIRST.Cpno = SECOND.Cno AND SECOND.Cpno = THIRD.Cno

 

  1. 查询非计算机科学系中比计算机科学系所有学生年龄都小的学生完整信息,用两种方法实现。

代码:

--查询非计算机科学系中比计算机科学系所有学生年龄都小的学生完整信息,方法一

SELECT *

FROM STUDENT

WHERE Sage < ALL

(SELECT Sage

 FROM STUDENT

 WHERE Sdept = 'CS'

 )

 AND Sdept != 'CS'

 

 

--查询非计算机科学系中比计算机科学系所有学生年龄都小的学生完整信息,方法二

SELECT *

FROM STUDENT

WHERE Sage <

(SELECT MIN(Sage)

 FROM STUDENT

 WHERE Sdept = 'CS'

)

AND Sdept != 'CS'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值