【实验目的】
1、 熟悉基本的连接操作,掌握内连接与外连接的方法,学会应用自身连接;
2、 掌握相关子查询的使用方法;
3、 掌握嵌套子查询的使用方法;
【实验性质】
验证型实验
【实验内容】
完成如下查询:(将查询语句保存为题号.sql,如:A.sql、B.sql….)
基本连接查询:
A. 找出上海厂商供应的所有零件号码;
select pno from spj,s where spj.sno=s.sno and city=‘上海’
B. 取出供应商S1提供的零件的颜色;
select color from s,spj,p where s.sno=spj.sno and spj.pno=p.pno and s.sno=‘S1’
C. 取出天津的供应商提供给天津任一工程的零件的代号;
select pno from s,spj,j where s.sno=spj.sno and spj.jno=j.jno and s.city=‘天津’ and j.city=‘天津’
D. 找出工程项目J2所使用的各种零件的名称以及数量;
select pname,qty from p,spj where p.pno=spj.pno and spj.jno=‘J2’
E. 取出至少有一个和工程不在同一城市的供应商提供零件的工程代号;
select spj.jno from j,spj,s where s.sno=spj.sno and j.jno=spj.jno and s.city!=j.city group by spj.jno
F. 取出为工程J1提供红色零件的供应商代号;
select spj.sno from spj,p where spj.pno=p.pno and p.color=‘红’ and spj.jno=‘J1’
G. 取出为所在城市为北京的工程提供零件的供应商代号;
select spj.sno from spj,j where spj.jno=j.jno and j.city=‘北京’
H. 取出这样一些供应商代号,他们能够提供至少一种红色零件的供应商所提供的零件;
select sno from spj,p where spj.pno=p.pno and p.color=‘红’ group by sno
I. 取出由供应商S1提供零件的工程名称;
select j.jname from spj,j where spj.jno=j.jno and spj.sno=‘S1’
J. 取出为所在城市为上海或北京的工程提供红色零件的供应商代号;
select sno from spj,j,p where spj.pno=p.pno and spj.jno=j.jno and (j.city='上海’or j.city=‘北京’) and p.color=‘红’
K. 取出供应商与工程所在城市相同的供应商提供的零件代号;
select pno from s,spj,j where s.sno=spj.sno and spj.jno=j.jno and s.city=j.city
外连接操作:
L. 显示所有的项目以及其供应商、所用零件情况;
select jno,sno,p.pno,pname,color,weight from spj left outer join p on (spj.pno=p.pno)
M. 显示所有的零件以及所用于的项目、供应商商情况;
select pno,jno,s.sno,sname,status,city from spj left outer join s on (spj.sno=s.sno)
自连接:
N. 求和“东方红”在同一个城市的供应商的名称;
select A.sname from s A,s B where A.sname=B.sname and A.city =(select B.city from s B where B.sname=‘东方红’) and A.sname!=‘东方红’
O. 求和“螺母”的颜色相同的零件的的编号、名称以及重量;
select A.pno,A.pname,A.weight from p A,p B where A.pno=B.pno and A.color=(select B.color from p B where B.pname=‘螺母’) and A.pname!=‘螺母’
使用IN关键字:
P. 取出重量最轻的零件代号;
select pno from p where weight in( select min(weight)from p)
Q. 找出没有使用天津产的零件的工程名称;
select jname from s,spj,j where s.sno=spj.sno and j.jno=spj.jno and s.sno not in( select sno from s where city!=‘天津’ ) group by jname
R. 求没有使用天津供应商生产的红色零件的工程号;
select spj.jno from s,spj,p where s.sno=spj.sno and p.pno=spj.pno and spj.pno not in( select spj.pno from p,s,spj where s.sno=spj.sno and p.pno=spj.jno and s.city=‘天津’ and p.color=‘红’ )
S. 求和“东方红”在同一个城市的供应商的名称;
select sname from s where city in( select city from s where sname=‘东方红’) and sname!=‘东方红’
T. 求和“螺母”的颜色相同的零件的的编号、名称以及重量;
select pno,pname,weight from p where color in( select color from p where pname=‘螺母’) and pname!=‘螺母’
U. 取出上海供应商不提供任何零件的工程代号;
select jno from s,spj where spj.sno=s.sno and jno not in( select jno from s,spj where spj.sno=s.sno and s.city=‘上海’) group by jno
使用EXISTS关键字:(选做)
V. 求使用了所有零件的工程号;
W. 求至少用了供应商S1所提供的所有零件的工程号;
使用比较运算符(含ANY、ALL):
X. 求出重量最重的零件的编号、名称以及重量;
lect pno,pname,weight from p where weight>=All( select weight from p)
Y. 求比S1供应商提供的所有零件都重的零件的编号、名称以及重量。
select pno,pname,weight from p where weight>All( select weight from p where pno in( select pno from spj where sno=‘S1’))