一、有两个关系S(A,B,C,D)和T(C,D,E,F),写出下列查询等价的SQL表达式
(1)
select *
from S
where A='10';
select A,B
from S;
select A,B,S.C,S.D,E,F
from S,T
where S.C = T.C and S.D = T.D;//因为是自然链接所以需要去掉重复列。
select *
from S,T
where S.C = T.C;
select *
from S,T
where S.A < T.E;
select S.C,S.D,T.*
from S,T;----这个刚开始其实看着有点晕的,但是(其实是第二章忘了hhh),回头看其实并不难,就是一个笛卡尔积的语句。
二、用SQL语句建立第二章习题6中的4个表;针对建立的4个表用SQL完成第二章习题6中的查询
--建立S表:
create table S(Sno char(2) unique,
Sname char(6),
Status char(2),
City char(4));
--建立P表
create table P(Pno char(2) unique,
Pname char(6),
COLOR char(2),
WEIGHT int);
--建立J表:
create table J(Jno char(2) unique,
JNAME char(8),
CITY char(4));
--建立SPJ表:
create table SPJ( Sno char(2),Pno char(2),
Jno char(2),QTY int);
复习一下建表知识点
1、create table 表名()
2、列名 类型
3、列定义之间要加“ ,”
4、unique表示唯一 primary key表示主键 (加在列后面)
5、foreign key(a) references B(c)这应该在最后一行,因为是表级完整条件。
insert into S
values('S1','精益',20,'天津');
insert into S
values('S2','盛锡',10,'北京');
insert into S
values('S3','东方红',30,'北京');
insert into S
values('S4','丰泰盛',20,'天津');
insert into S
values('S5','为民',30,'上海');
insert into P
values('P1','螺母','红',12);
insert into P
values('P2','螺栓','绿',17);
insert into P
values('P3','螺丝刀','蓝',14);
insert into P
values('P4','螺丝刀','红',14);
insert into P
values('P5','凸轮','蓝',40);
insert into P
values('P6','齿轮','红',30);
-------------------------------
后面的就参照着写吧(下午继续写的时候忘记保存了),感觉有点傻hhh。
针对建立的4各表用SQL完成第二章习题6中的查询:
(1)求供应工程J1零件的供应商号码SNO;
select DIST SNO
from SPJ
where JNO='J1';
(2)求供应工程J零件P1的供应商号码SNO;
select DIST SNO
from SPJ
where JNO = 'J1' and PNO = 'P1';
(3)求供应工程JI零件为红色的供应商号码SNO;
select SNO
from SPJ,P
where JNO='J1' and SPJ.PNO = P.PNO
and COLOR = '红';
-----涉及到两个表应该先链接后查询。
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
select JNO
from SPJ
where JNO not in (
select JNO
from SPJ,P,S
where S.CITY='天津' and COLOR = '红' and
S.SNO = SPJ.SNO and P.PNO = SPJ.PNO
);
(5)求至少用了供应商S1所供应的全部零件的工程号JNO.
select Jno from SPJ A
where A.Sno='S1' and not exists(
select Pno from SPJ B
where B.Sno='S1' and not exists(
select Jno from SPJ C
where C.Pno=B.Pno and C.Jno=a.Jno
))
针对上面的四个表用SQL完成以下各项操作:
(1)找出所有供应商的姓名和所在地
select SNAME,CITY
FROM S;
(2)找出所有零件的名称、颜色、重量
select PNAME,COLOR,WEIGHT
from P;
(3)找出使用供应商S1所供应零件的工程号码
select JNO
from SPJ
where SNO = 'S1';
(4)找出工程项目J2使用的各种零件的名称及其数量
select PNAME,QTY
from SPJ,P
where P.PNO = SPJ.PNO and SPJ.JNO = 'J2';
(5)找出上海厂商供应的所有零件号码
select PNO
from SPJ,S
where S.SNO = SPJ.SNO and CITY = '上海';
(6)找出使用上海产的零件的工程名称
select JNAME
from SPJ,S,J
where S.SNO = SPJ.SNO and S.CITY = '上海' and J.JNO = SPJ.JNO;
(7)找出没有使用天津产的零件的工程号码
select JNO
from SPJ
where JNO not in (
select DIST JNO
from SPJ,S
where S.SNO = SPJ.SNO and S.CITY = '天津'
) ;
(8)把全部红色零件颜色改为蓝色
update P
set COLOR = '蓝'
where COLOR = '红';
(9)由S5共给J4的零件P6改为由S3供应,作必要的修改
update SPJ
set SNO = 'S3'
where SNO = 'S5' and JNO = 'J4' and PNO = 'P6';
(10)从供应商关系中删除S2的记录,并从供应情况中删除相应的记录
delete from S where SNO = 'S2';
delete from SPJ where SNO = 'S2';
(11)请将(S2 , J6 , P4, 200) 插入供应关系情况
insert into SPJ
values('S2' , 'J6' , 'P4' , 200);
三、为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。
create view V
as
select SNO,SPJ.PNO,QTY
from SPJ,J
where SPJ.JNO = J.JNO and J.JNAME = '三建';----先链接再选择。
- 基于上面的视图完成以下查询:
(1)找出三建工程项目使用的各种零件代码及其数量
select PNO,QTY
from Three;
(2)找出供应商S1的供应情况
select * from Three
where SNO = 'S1';
总结: