问题 1:使用 SQL CREATE TABLE 语句创建一个表 MOVSTARDIR,其中包含电影编号、明星编号、导演编号和 4 个表演奖项的属性。主键是电影编号、明星编号和导演编号(均为 3 个),并强制执行参照完整性。导演编号是该电影的导演,该明星必须在那部电影中出现。使用 INSERt INTO 加载 MOVSTARDIR(从现有表)。
我的答案:
CREATE TABLE MOVSTARDIR
(MVNUM SHORT NOT NULL, STARNUM SHORT NOT NULL, DIRNUM SHORT NOT NULL, BESTF TEXT, BESTM TEXT, SUPM TEXT, SUPF TEXT)
ALTER TABLE MOVSTARDIR
ADD PRIMARY KEY (MVNUM,STARNUM,DIRNUM)
INSERT INTO MOVSTARDIR
SELECT MOVIE.MVNUM,STAR.STARNUM,DIRECTOR.DIRNUM... BESTF,BESTM,SUPM,SUPF
FROM MOVSTAR, DIRECTOR, MOVIE
WHERE MOVSTAR.MVNUM=MOVIE.MVNUM
AND MOVIE.DIRNUM=DIRECTOR.DIRNUM`
*它给了我一个错误,说“create table”语句有问题,它在 SQL 语句中突出显示了“alter”这个词。另外我如何添加参照完整性?*
问题 2:列出 MOVSTARDIR 中的导演,以及从表中包含的 4 个奖项类别中获得的总奖项。列出导演姓名(不是编号),以及 4 个类别中每个类别的人数以及所有 4 个类别的总和。按董事姓名对报告进行分组(即每位董事一行,每位董事出现一次),并按总和(降序)排序。仅显示总和大于 3 的行。
SELECT DISTINCT DIRNAME, COUNT(BESTF) AS BESTFE, COUNT(BESTM) AS BESTML,
COUNT(SUPM) AS SUPML, COUNT(SUPF) AS SUPFE,
(COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF)) AS TOTAL
FROM MOVSTARDIR, DIRECTOR
WHERE MOVSTARDIR.DIRNUM=DIRECTOR.DIRNUM
AND ((BESTM IS NOT NULL) OR (BESTF IS NOT NULL) OR (SUPM IS NOT NULL)
OR (SUPF IS NOT NULL))
GROUP BY DIRNAME
HAVING (COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF)) 3
ORDER BY (COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF))DESC`
*问题在于它列出了所有记录,而不仅仅是获胜* 如果需要数据库,我可以通过电子邮件发送数据库。