针对stu数据库中的student、course和sc三个表实现以下查询:
1、插入一门新课程记录
课程号:2001,课程名:C程序设计,学分:3。
INSERT INTO coursefcy(cno,cname,ccredit) VALUES(2001,'C语言程序',3)
2、所有学生都选2001号课程,将选课记录插入到SC中。
INSERT INTO scfcy(sno,cno)
SELECT sno,cno
FROM studentfcy,coursefcy
WHERE cno=2004
//在coursefcy表中应存在cno=2004
NSERT INTO sc(sno,cno)
Select sno,’8’
From student
INSERT INTO sc(sno,cno)
Select sno,cno='8'
From studen
问题:1
不会显示出全部数据。
问题2:
因为cno=22222不存在表couresefcy中
3、将8号课程的学分改为4分。
UPDATE coursefcy
SET ccredit=4
where cno=2001 //cno是int类型
4、将所在系为‘cs’并且年龄小于20岁的学生的所在系改为‘ma’。
UPDATE student
SET sdept='ma'
WHERE sdept='cs' and sage<20
UPDATE studentfcy
SET sdept='ma'
WHERE sdept='CS' and sage<20
该结果会将数据改为“ma”,但当查询MA/ma时,都会被识别
5、删掉所有年龄小于20岁、并且所在系为‘cs’的学生记录。
DELETE
FROM studentfcy
WHERE sage<20 and sdept='cs'
在第4题以后,就不存在年龄小于20的cs学生
6、将刘晨所选课程的成绩都提高10分。
UPDATE scfcy
set grade=grade+10
WHERE sno IN
(
SELECT sno
FROM studentfcy
WHERE sname='王红梅'
)
SELECT cno,grade
FROM scfcy
WHERE sno=2008000000
grade的范围不是有限制吗1-100但如果出错会发生什么????
执行该 SQL 语句后,当向表 `SC` 中插入数据时,如果 `grade` 字段的取值不在 0 到 100 的范围内,就会触发 CHECK 约束的检查并导致插入失败。
7、删除‘C程序设计’课程的选课记录。
DELETE
FROM scfcy
WHERE cno IN(
SELECT cno
FROM coursefcy
WHERE cname='Course {2004}')
8、将年龄最小的学生的所在系去掉。
等价于删除该系所有学生?
将所在系置为NULL/NUll/null
理解题意,只是把年龄最小的学生信息中的所在系置空
UPDATE studentfcy
SET sdept=NUll
where sno IN(
SELECT sno
FROM studentfcy
WHERE sage<=ALL(
SELECT sage FROM studentfcy))
UPDATE studentfcy
SET sdept=null
WHERE sage=
(SELECT min(sage) FROM studentfcy )
可能会遇到错误信息为 "You can't specify target table 'studentfcy' for update in FROM clause",这是因为 MySQL 不支持在子查询中更新涉及到的数据表,而上述 SQL 中的子查询中引用了主查询的数据表 studentfcy,导致出现了这个错误。
为了避免这个错误,可以将子查询中查询结果保存到一个临时表中,然后再将这个临时表与 studentfcy 表进行关联,从而进行更新操作。
在这个 SQL 语句中,我们将原来的子查询中查询结果保存到一个名为 tmp 的临时表中,然后将这个临时表与 studentfcy 表进行关联,通过 WHERE 子句中的sno IN (...) 条件来限制要更新的学生记录。这样就可以避免上述错误。
UPDATE studentfcy
SET sdept=NUll
where sno IN(
SELECT tmp.sno
FROM (
SELECT sno
FROM studentfcy
WHERE sage<=ALL(
SELECT sage FROM studentfcy))as tmp)
UPDATE studentfcy
SET sdept=null
WHERE sage in
(SELECT min_sage FROM
(SELECT MIN(sage)as min_sage FROM studentfcy) as a)
Every derived table must have its own alias(sql语句错误解决方法)
在做多表查询,或者查询的时候产生新的表的时候会出现这个错误:Every derived table must have its own alias(每一个派生出来的表都必须有一个自己的别名)。