SQL语句(查询、新建表、删除表、更新表、新建视图)

这篇博客详细介绍了SQL语句的使用,包括创建SPJ表,进行数据查询,如查找特定供应商的工程,查询特定城市供应商的零件,更新供应关系等。还涉及到教学数据库的操作,如查询学生选课、修改成绩和创建视图。最后,通过视图查询三建工程项目的零件使用和供应商供应详情。

SQL语句(一):

涉及:查询、新建表、删除表、更新表、新建视图操作

1、注意:只需要创建SPJ表即可,但要记得外键和主键用SQL语句建立2.8中的四个表

(这里只需要给出SPJ表的创建脚本即可),

S(SNO,SNAME,STATUS,SCITY);

P(PNO,PNAME,COLOR,WEIGHT);

J(JNO,JNANE,JCITY);

SPJ(SNO,PNO,JNO,QTY)。

其中在SPJ表中,SNO、PNO和JNO是外键分别参照S、P、J中的相应字段。


create table SPJ

(SNO INT NOT NULL,

PNO INT  NOT  NULL,

JNO INT  NOT NULL,

FOREIGN KEY(SNO) REFERENCES S(SNO),

FOREIGN KEY(PNO) REFERENCES P(PNO),

FOREIGN KEY(JNO) REFERENCES J(JNO)

);

2、做下面的查询时,大家记得distinct的使用。

针对上题中四个表,用SQL语句完成下述操作(2-9题)。

找出使用供应商S1所供零件的工程号码。

SELECT JNO FROM SPJ    

WHERE SNO = 'S1';

3、找出工程项目J2使用的各种零件名称及其数量。

SELECT P.PNAME,SPJ.QTY

FROM P,SPJ

WHERE P.PNO = SPJ.PNO

AND SPJ.JNO = 'J2';

4、找出上海厂商供应的所有零件号码。

SELECT DISTINCT PNO

FROM SPJ

WHERE SNO IN(

SELECT SNO

FROM S

WHERE CITY = '上海');

5、找出使用上海产的零件的工程名称。

SELECT J.NAME

FROM J,SPJ,S

WHERE J.JNO = SPJ.JNO

AND SPJ.SNO = S.SNO

ANDS.CITY = '上海';

6、找出没有使用天津产零件的工程号码

SELECT JNO

FROM J

WHERE NOT EXISTS

(

SELECT *

FROM SPJ

WHERE SPJ.JNO = J.JNO

AND SNO IN(

SELECT SNO

FROM S

WHERE CITY = '天津')

);

7、将由供应商S5供给工程代码为J4的零件P6改为由S3供应。

UPDATE SPJ

SET SNO = S3

WHERE SNO = 'S5' AND JNO = 'J4' AND PNO = 'P6';

8、从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。

DELETE 

FROM SPJ

WHERE SNO = 'S2';

DELETE

FROM S

WHERE SNO = 'S2';

9、请将(S2,J6,P4,500)插入供应情况表。

INSERT INTO SPJ(SNO,JNO,PNO,QTY)

VALUES(S2,J6,P4,500)

10、对于教学数据库的三个基本表:

S(S# ,SNAME ,AGE ,SEX)

SC(S# ,C# ,GRADE)

C(C# ,CNAME ,TEACHER)试用SQL语句表达下列查询(10-18):

10、查询姓刘的老师所授课程的课程号和课程名

SELECT C#,CNAME

FROM C

WHERE TEACHER = ‘刘’;

11、查询年龄大于23岁的男同学的学号和姓名。

SELECT s#, sname

FROM S

WHERE age>23 AND sex='男';

12、查询学号为S3学生所学课程的课程号、课程名和任课教师名。

SELECT * 

FROM C,SC

WHERE C.C# = SC.C# AND SC.S# = 'S3';

13、查询“张小飞”没有选修的课程号和课程名。

SELECT C#,CNAME

FROM C

WHERE NOT EXISTS

(SELECT * FROM S, SC

WHERE sc.s#=s.s#

AND sc.c#=c.c# AND s.sname='张小飞');

14、查询至少选修了3门课程的学生的学号和姓名。

SELECT S.S#,S.SNAME

FROM S,SC

WHERE S.S#=SC.S#

GROUP BY S.S#

HAVING count(*)>=3;

15、在SC中删除尚无成绩的选课元组。

delete from SC

where SC.GRADE in null;

16、把“高等数学”课的所有不及格成绩都改为60。

update SC

set SC.GRADE = 60

where SC.GRADE < 60 and SC.CNO in (

select CNO

from C

where C.CNAME = '高等数学');

17、把低于所有人总平均成绩的女同学的成绩提高5%。

update SC

set SC.GRADE = SC.GRADE * (1 + 5%)

where SC.SNO in (select SNO 

from S

where S.SEX = '女')

and SC.GRADE < (select avg(GRADE)

from SC);

18、向C中插入元组(‘C8’,‘VC++’,‘王昆’)。

insert into C

values ('C8', 'VC++', '王昆');

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

CREATE VIEW 三建 AS SELECT SNO,PNO,QTY FROM SPJ,J 

WHERE SPJ.JNO=J.JNO AND J.JNAME ='三建';

20、针对上题(19题)所创建的视图完成查询:(1)找出三建工程项目使用的各种零件代码及其数量;

SELECT PNO,SUM(QTY)AS QTY FROM 三建

GROUP BY PNO

21、针对上题(19题)所创建的视图完成查询:找出供应商S1的供应情况。

SELECT *FROM 三建

WHERE SNO ='S1';
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值