数据库第三次实验

SQL Serve中的连接查询

一、            实验目的:

1.  掌握采用Transact-SQL实现连接查询。

2.  掌握等值连接(自然连接)、自身连接、外连接和复合条件连接的查询方法。

二、          实验内容:

按照学生课程数据库studb和SPJ数据库完成以下查询:

(1)   查询使用红色零件的工程名称。

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

(3)   查询供应工程J1红色零件的供应商号SNO,请用两种方法实现。

(4)   求供应工程J1零件的供应商的完整信息。

(5)   查询使用北京供应商供应零件的工程信息。

(6)   查询选修3号课程且成绩在85分以上的所有学生。

(7)   查询先行课的学分为4的课程信息。

(8)   查询课程与其间接先行课的名称。

(9)   查询其他系中比计算机科学系所有学生年龄都小的学生完整信息,用两种方法实现。

(10)查询其他系中比计算机科学系某一学生年龄大的学生姓名与年龄,用两种方法实现。

(11)查询至少用了供应商S1所供应的所有零件的工程号JNO,用带EXISTS谓词的子查询实现。

(12)查询参与了全部项目的供应商编号SNO,用带EXISTS谓词的子查询实现。

(13)查询所有使用了P3零件的工程号JNO,用带EXISTS谓词的子查询实现。

(14)查询所有没有使用了P3零件的工程号JNO,用带EXISTS谓词的子查询实现。

三、实验要求:

1.  写出正确的Transact-SQL命令。

2.  无须截屏记录正确的查询结果。要求记录实验过程中发生的有学习意义的错误及错误信息。

3.  写好实验小结

4.  下课后直接提交实验报告

create database SPJ
ON(
	NAME=SPJdata,
	FILENAME='D:\project\SPJdata.mdf',
	SIZE=5mb,
	FILEGROWTH=2MB
),
(
	NAME='SPJlog',
	FILENAME='D:\project\SPJlog.ldf',
	SIZE=5MB,
	MAXSIZE=10MB,
	FILEGROWTH=10MB
)
GO


use SPJ;
create table S
(
	SNO char(4) PRIMARY KEY,
	SNAME char(10),
	STATUS char(10),
	CITY char(5),
)


create table P
(
	PNO char(4) PRIMARY KEY,
	PNAME char(10) NOT NULL,
	COLOR char(10),
	WEIGHT SMALLINT,
)


create table J
(
	JNO char(4) PRIMARY KEY,
	JNAME char(10),
	CITY char(10),
	
)


create table SPJ(
	SNO char(4),
	PNO char(4),
	JNO char(4),
	QTY INT,
	FOREIGN KEY (SNO) REFERENCES S(SNO),
	FOREIGN KEY (PNO) REFERENCES P(PNO),
	FOREIGN KEY (JNO) REFERENCES J(JNO),
)
insert into S(SNO,SNAME,STATUS,CITY)
			Values('S1','精益','20','天津')


insert into S(SNO,SNAME,STATUS,CITY)
			Values('S2','盛锡','10','北京')


insert into S(SNO,SNAME,STATUS,CITY)
			Values('S3','东方红','30','北京')


insert into S(SNO,SNAME,STATUS,CITY)
			Values('S4','丰泰盛','20','天津')


insert into S(SNO,SNAME,STATUS,CITY)
			Values('S5','为民','30','上海')




insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P1','螺母','红',12)


insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P2','螺栓','绿',17)


insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P3','螺丝刀','蓝',14)
			
insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P4','螺丝刀','红',14)
			
insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P5','凸轮','蓝',40)


insert into P(PNO,PNAME,COLOR,WEIGHT)
			Values('P6','齿轮','红',30)




insert into J(JNO,JNAME,CITY)
			Values('J1','三建','北京')
			
insert into J(JNO,JNAME,CITY)
			Values('J2','一汽','长春')
			
insert into J(JNO,JNAME,CITY)
			Values('J3','弹簧厂','天津')
			
insert into J(JNO,JNAME,CITY)
			Values('J4','造船厂','天津')
			
insert into J(JNO,JNAME,CITY)
			Values('J5','机车厂','唐山')
			
insert into J(JNO,JNAME,CITY)
			Values('J6','无线电厂','常州')
			
insert into J(JNO,JNAME,CITY)
			Values('J7','半导体厂','南京')


insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S1','P1','J1',200)


insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S1','P1','J3',100)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S1','P1','J4',700)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S1','P2','J2',100)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P3','J1',400)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P3','J2',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P3','J4',500)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P3','J5',400)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P5','J1',400)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S2','P5','J2',100)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S3','P1','J1',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S3','P3','J1',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S4','P5','J1',100)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S4','P6','J3',300)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S4','P6','J4',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S5','P2','J4',100)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S5','P3','J1',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S5','P6','J2',200)
			
insert into SPJ(SNO,PNO,JNO,QTY)
			Values('S5','P6','J4',500)


select * from SPJ
select * from p
select * from S
select * from J


/*(1)查询使用红色零件的工程名称。*/
select distinct jname from j,p,spj where spj.pno=p.pno and spj.jno=j.jno and color='红';


/*(2)查询每个工程的信息及相应的供应信息(包括列出尚未被供应零件的那些工程)*/
select j.jno,jname,city,sno,pno,qty from j left outer join spj on (spj.jno=j.jno);


/*(3)查询供应工程J1红色零件的供应商号SNO,请用两种方法实现。*/
select sno from spj,p where spj.pno=p.pno and jno='j1' and color = '红';
select sno from spj,p,j where j.jno='j1' and color='红' and p.pno=spj.pno and spj.jno=j.jno;


/*(4)求供应工程J1零件的供应商的完整信息。*/
select distinct s.sno,sname,status,city from s,spj where s.sno=spj.sno and jno='j1';


/*(5)查询使用北京供应商供应零件的工程信息。*/
select * from J where jno in (select distinct jno from s,spj where s.city = '北京' and s.sno=spj.sno);


/*(11)查询至少用了供应商S1所供应的所有零件的工程号JNO,用带EXISTS谓词的子查询实现。*/
SELECT * FROM J WHERE NOT EXISTS (SELECT FIRST.PNO FROM SPJ FIRST
WHERE FIRST.SNO='S1' AND NOT EXISTS (SELECT * FROM SPJ SECOND WHERE J.JNO=SECOND.JNO AND FIRST.PNO=SECOND.PNO AND SECOND.SNO='S1'))
/*(12)查询参与了全部项目的供应商编号SNO,用带EXISTS谓词的子查询实现。*/
SELECT S.SNO FROM S WHERE NOT EXISTS (SELECT * FROM SPJ WHERE S.SNO=SPJ.SNO)
/*(13)查询所有使用了P3零件的工程号JNO,用带EXISTS谓词的子查询实现。*/
select distinct jno from spj spj1 where exists (select* from spj where spj1.pno='p3')
/*(14)查询所有没有使用了P3零件的工程号JNO,用带EXISTS谓词的子查询实现。*/
SELECT J.JNO FROM J WHERE NOT EXISTS(SELECT *FROM SPJ WHERE J.JNO=SPJ.JNO AND SPJ.PNO='P3')
create database Studata
ON(
	NAME=Studat,
	FILENAME='D:\project\Studat.mdf',
	SIZE=5mb,
	FILEGROWTH=2MB
),
(
	NAME='Stulog',
	FILENAME='D:\project\Stulog.ldf',
	SIZE=5MB,
	MAXSIZE=10MB,
	FILEGROWTH=10MB
)
GO

use Studata;

create table s(
	class char(5),
	Sno char(2),
	name char(10)unique,
	Sex char(2),
	Age INT,
	PRIMARY KEY(class,Sno),
)

insert into s(class,Sno,name,Sex,Age)
			values('95031','25','李明','男',21)

insert into s(class,Sno,name,Sex,Age)
			values('95101','10','王丽','女',20)

insert into s(class,Sno,name)
			values('95031','30','郑和')

alter table s
alter column Age SMALLINT;

alter table s
ADD comedate datetime ;

alter table s
Drop CONSTRAINT PK__s__7C8480AE;

create clustered INDEX inxage
ON s(age desc)

drop index s.inxage;

drop table s;



create table Student(
	Sno char(9)PRIMARY KEY,
	Sname char(20) unique,
	Ssex char(2),
	Sage SMALLINT,
	Sdept char(20)
);

create table Course(
	Cno char(4)PRIMARY KEY,
	Cname char(40) NOT NUll,
	Cpno char(4),
	Ccredit SMALLINT,
	FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);

create table SC
(
	Sno char(9),
	Cno char(4),
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY (Sno) REFERENCES Student(Sno),
	FOREIGN KEY (Cno) REFERENCES Course(Cno),
);

/*Student表*/
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215121','李勇','男',20,'CS')
			
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215122','刘晨','女',19,'CS')

insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215123','王敏','女',18,'MA')

insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215125','张立','男',19,'IS')

/* Course表*/	
insert into Course(Cno,Cname,Ccredit)
			Values('6','数据处理',2)

insert into Course(Cno,Cname,Ccredit)
			Values('2','数学',2)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('7','PASCAL语言','6',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('5','数据结构','7',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('4','操作系统','6',3)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('1','数据库','5',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('3','信息系统','1',4)	
			
/*SC表*/
insert into SC(Sno,Cno,Grade)
			Values('201215121','1',92)

insert into SC(Sno,Cno,Grade)
			Values('201215121','2',85)

insert into SC(Sno,Cno,Grade)
			Values('201215121','3',88)

insert into SC(Sno,Cno,Grade)
			Values('201215122','2',90)

insert into SC(Sno,Cno,Grade)
			Values('201215122','3',80)

select * from SC
select * from Course

/*(6)查询选修3号课程且成绩在85分以上的所有学生。*/
select sc.sno from sc,student where sc.sno=student.sno and cno='3' and grade>'85'

/*(7)查询先行课的学分为4的课程信息。*/
select first.cno,first.cname,first.cpno,first.ccredit 
from course first,course second where first.cpno=second.cno and second.ccredit='4'; 

/*(8)查询课程与其间接先行课的名称。*/
select first.cname,third.cname from course first,course second,course third where first.cpno=second.cno and second.cpno=third.cno ;

/*(9)查询其他系中比计算机科学系所有学生年龄都小的学生完整信息,用两种方法实现。*/
select * from student where sage<all(select sage from student where sdept='cs')and sdept<>'cs';
select distinct first.*from student first,student second where first.sdept<>'cs' and second.sdept='cs' and not exists(
select second.*from student second where first.sage>second.sage);

/*(10)查询其他系中比计算机科学系某一学生年龄大的学生姓名与年龄,用两种方法实现。*/
select sname,sage from student where sage>any(select sage from student where sdept='cs') and sdept<>'cs';
select first.sname,first.sage from student first,student second where second.sdept='cs'  AND first.sdept<>'cs' and first.sage>second.sage;


猜你喜欢

转载自blog.csdn.net/qq_37804064/article/details/79884676