SQL语句题目练习

SQL语句题目练习

1、有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式:

题目1
这里插入LaTeX公式有点不太美观就直接上题目了。

(1)

说实话,关系代数这块有几个星期没碰都快忘光了233.
σ是选择的意思,这里的意思是从S中选择A是10的S.

	SELECT *
	FROM S
	WHERE A='10';
(2)

Π是投影的意思,那么就是S上A、B的投影。

	SELECT A,B
	FROM S;
(3)

⋈下面未加条件,是自然连接的意思,它会把重复的属性去掉,而且进行比较的分量必须是相同的属性组。

	SELECT A,B,S.D,S.D,E,F
	FROM S,T
	WHERE S.C=T.C AND S.D=T.D;
(4)

这里是一个等值连接,把条件加入到WHERE子句中即可。

	SELECT *
	FROM S,T
	WHERE S.C=T.C;
(5)

同上一题差不多。

	SELECT *
	FROM S,T
	WHERE S.A<T.E;
(6)

这题的意思是S上C、D的投影和T的笛卡尔积。

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

2、用SQL语句建立第2章习题6中的4个表;针对建立的4个表用SQL完成第二章习题6中的查询。

emmm,看来我又要把那个题出来一遍了,等会啊。
1
2
3

我在下面敲代码的时候大小写切换手都抽筋了,大家一定不要学我,属性名全大写算了
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)求供应工程J1零件的供应商号码SNO;
	SELECT DISTINCT Sno /*去除掉了重复的SNO*/
	FROM SPJ 
	WHERE Jno='J1';
(2) 求供应工程J1零件P1的供应商号码SNO;
	SELECT DISTINCT Sno /*去除掉了重复的SNO*/
	FROM SPJ 
	WHERE Jno='J1' AND Pno='P1';
(3) 求供应工程J1零件为红色的供应商号码SNO;
	SELECT Sno 
	FROM SPJ,P 
	WHERE Jno='J1'AND SPJ.Pno=P.Pno 
		  AND Color='红';	/*给的限定条件是J1以及颜色为红*/
(4) 求没有使用天津供应商生产的红色零件的工程号JNO;
	SELECTDISTINCT Jno 
	FROM SPJ  
	WHERE Jno NOTIN/*查询未使用的*/
		(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
	WHERE Pno >ALL	/*这里我不确定可不可以这样写,因为没有数据让我实践*/
		/*S1供应的零件是P1和P2,我这里的意思是查询Pno是P1和P2的JNO*/
		(SELECT DISTINCT Pno
		FROM SPJ
		WHERE Sno='S1')

3、针对上题中的四个表试用SQL语言完成以下各项操作:

(1)找出所有供应商的姓名和所在城市
	SELECT Sname,City 
	FROM S;
(2)找出所有零件的名称、颜色、重量
	SELECT Pname,Color,Weight 
	FROM P;
(3)找出使用供应商S1所供应零件的工程号码
	SELECT DISTINCT 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 DISTINCT Jno 
	FROM SPJ 
	WHERE Jno NOT IN
		 (SELECT DISTINCT Jno
		  FROM SPJ,S
		  WHERE S.Sno=SPJ.Sno 
		  		AND S.City='天津';
(8) 把全部红色零件的颜色改成蓝色
	UPDATE P
	SET Color='蓝'
	WHERE Color='红';
(9) 由S5供给J4的零件改为由S3供应
	UPDATE SPJ
	SET Sno='S3'
	WHERE Sno='S5' AND Jno='S4' 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);

4、请为三建工程项目及建立一个供应情况的视图,包括供应商代码(Sno)、零件代码(Pno)、供应数量(QTY)

三建工程的供应情况视图:

	CREATE VIEW SANJIAN
	AS SELECT Sno,SPJ.Pno,QTY
	   FROM SPJ,J
	   WHERE SPJ.Jno=J.Jno AND J.Jname='三建';
(1) 找出三建工程项目使用的各种零件代码及其数量
	SELECT DISTINCT Pno,QTY 
	FROM SANJIAN
(2) 找出供应商S1的供应情况
	SELECT DISTINCT *
	FROM SANJIAN
	WHERE Sno='S1';

这几个题目中我觉得有点问题的就是2中的第5小题,其他的基本看着题目都能写出来。

 
 
参考文献:
[1]萨师煊,王珊,数据库系统概论.5版.北京:高等教育出版社,2014.
[2]David老师的PPT.

发布了9 篇原创文章 · 获赞 13 · 访问量 5601

猜你喜欢

转载自blog.csdn.net/FDR_Enterprise/article/details/105185624