PTA题解 删除选修C语言课程的女生成绩记录
本题目要求编写DELETE语句,删除选修’C语言’课程的女生的选课记录。
表结构:
请在这里写定义表结构的SQL语句。例如:
CREATE TABLE stu
(
sno
char(4) NOT NULL,
sname
char(8) NOT NULL,
sex
tinyint(1) DEFAULT NULL, --0为女生,1为男生。
mno
char(2) DEFAULT NULL,
birdate
datetime DEFAULT NULL,
memo
text,
PRIMARY KEY (sno
)
);
CREATE TABLE cou
(
cno
char(4) NOT NULL,
cname
varchar(30) NOT NULL,
credit
smallint(6) DEFAULT NULL,
ptime
char(5) DEFAULT NULL,
teacher
char(10) DEFAULT NULL,
PRIMARY KEY (cno
)
)
CREATE TABLE sc
(
sno
char(4) NOT NULL,
cno
char(4) NOT NULL,
grade
decimal(6,1) DEFAULT NULL,
PRIMARY KEY (sno
,cno
),
CONSTRAINT fk_sc_cno
FOREIGN KEY (cno
) REFERENCES cou
(cno
),
CONSTRAINT fk_sc_sno
FOREIGN KEY (sno
) REFERENCES stu
(sno
)
)
表样例
请在这里给出上述表结构对应的表样例。例如
stu表:
cou表:
sc表:
输出样例:
删除记录后,sc表如下:
题解
首先看题目,所需要的内容是三张表,这边需要采用连接的方式,个人倾向于用左连接。进行表与表之间的左连接的时候是以写在左边的表为主导。因为要三张表的左连接,所以在中间位置的那张表必须有连接另外两张表的相同元素,
如sc表的sno对应stu表的sno,sc表的cno对应cou表的cno。
连接完之后继续看题目,发现这道题是删除,创建表的时候有外键元素,所以得先取消外键。使用的mysql语句是
SET FOREIGN_KEY_CHECKS=0;
然后编写删除语句:
DELETE stu,cou,sc from cou left join sc on cou.cno=sc.cno left join stu on sc.sno=stu.sno where stu.sex=0 and cou.cname=‘C语言’
用这两个语句就可以ac这道pta题目