题目:自己设计一个小型数据库。

个人比较喜欢看电影,于是用Python爬了豆瓣Top250的电影,做了一个关于电影的小型数据库,这里只举一小部分作为例子。

关系模式:

 

电影名称关系模式

TITLE(MNO,MNAME)

电影评分关系模式

RATING(MNO,MSCORE)

电影标签关系模式

TAG(MNO,MTAG)

演员关系模式

ACTOR(NAME,BIRTH,STAR,BLOOD)

创建数据表:

CREATE TABLE TITLE(
MNO CHAR(10) PRIMARY KEY,
MNAME CHAR(50) UNIQUE,
);

CREATE TABLE RATING(
MNO CHAR(10) PRIMARY KEY,
MSCORE FLOAT(10),
);

CREATE TABLE TAG(
MNO CHAR(10) PRIMARY KEY,
MTAG CHAR(20),
);

插入数据:

INSERT INTO TITLE(MNO,MNAME)
VALUES
(1,'肖申克的救赎'),
(2,'霸王别姬'),
(3,'这个杀手不太冷'),
(4,'阿甘正传'),
(5,'美丽人生'),
(6,'千与千寻'),
(7,'泰坦尼克号'),
(8,'辛德勒的名单'),
(9,'盗梦空间'),
(10,'机器人总动员');
SELECT * FROM TITLE

INSERT INTO RATING(MNO,MSCORE)
VALUES
(1,9.6),
(2,9.5),
(3,9.4),
(4,9.4),
(5,9.5),
(6,9.3),
(7,9.3),
(8,9.4),
(9,9.3),
(10,9.3);

INSERT INTO TAG(MNO,MTAG)
VALUES
(1,'犯罪'),
(2,'同性'),
(3,'犯罪'),
(4,'剧情'),
(5,'剧情'),
(6,'动画'),
(7,'灾难'),
(8,'剧情'),
(9,'科幻'),
(10,'动画');

(1)选择评分大于等于9.4的电影;

SELECT TITLE.MNAME,RATING.MSCORE
FROM TITLE,RATING
WHERE TITLE.MNO=RATING.MNO AND MSCORE>=9.4;

(2)选择分类为'剧情'的电影;

SELECT TITLE.MNAME,TAG.MTAG
FROM TITLE,TAG
WHERE TITLE.MNO=TAG.MNO AND MTAG='剧情';

(3)更新第十部电影的分类为'科幻',评分为9.1;

UPDATE TAG
SET MTAG='科幻'
WHERE MNO=10;

UPDATE RATING
SET MSCORE=9.1
WHERE MNO=10;

(4)选择排名第10的电影;

SELECT MNAME,MTAG,MSCORE
FROM TITLE,TAG,RATING
WHERE TITLE.MNO=10 AND TAG.MNO=10 AND RATING.MNO=10;

(5)自然连接;

SELECT TITLE.MNO,TITLE.MNAME,RATING.MSCORE,TAG.MTAG
FROM TITLE,RATING,TAG
WHERE TITLE.MNO=RATING.MNO AND RATING.MNO=TAG.MNO;

(6)删除排名第十的电影;

DELETE
FROM TITLE
WHERE TITLE.MNO=10;

DELETE
FROM RATING
WHERE RATING.MNO=10;

DELETE
FROM TAG
WHERE TAG.MNO=10;

SELECT TITLE.MNO,TITLE.MNAME,RATING.MSCORE,TAG.MTAG
FROM TITLE,RATING,TAG
WHERE TITLE.MNO=RATING.MNO AND RATING.MNO=TAG.MNO;

完整程序:

CREATE DATABASE ***;

CREATE TABLE TITLE(
MNO CHAR(10) PRIMARY KEY,
MNAME CHAR(50) UNIQUE,
);

CREATE TABLE RATING(
MNO CHAR(10) PRIMARY KEY,
MSCORE FLOAT(10),
);

CREATE TABLE TAG(
MNO CHAR(10) PRIMARY KEY,
MTAG CHAR(20),
);

INSERT INTO TITLE(MNO,MNAME)
VALUES
(1,'肖申克的救赎'),
(2,'霸王别姬'),
(3,'这个杀手不太冷'),
(4,'阿甘正传'),
(5,'美丽人生'),
(6,'千与千寻'),
(7,'泰坦尼克号'),
(8,'辛德勒的名单'),
(9,'盗梦空间'),
(10,'机器人总动员');
SELECT * FROM TITLE

INSERT INTO RATING(MNO,MSCORE)
VALUES
(1,9.6),
(2,9.5),
(3,9.4),
(4,9.4),
(5,9.5),
(6,9.3),
(7,9.3),
(8,9.4),
(9,9.3),
(10,9.3);

INSERT INTO TAG(MNO,MTAG)
VALUES
(1,'犯罪'),
(2,'同性'),
(3,'犯罪'),
(4,'剧情'),
(5,'剧情'),
(6,'动画'),
(7,'灾难'),
(8,'剧情'),
(9,'科幻'),
(10,'动画');

--选择评分大于等于9.4的电影
SELECT TITLE.MNAME,RATING.MSCORE
FROM TITLE,RATING
WHERE TITLE.MNO=RATING.MNO AND MSCORE>=9.4;

--选择分类为'剧情'的电影
SELECT TITLE.MNAME,TAG.MTAG
FROM TITLE,TAG
WHERE TITLE.MNO=TAG.MNO AND MTAG='剧情';

--更新第十部电影的分类为'科幻',评分为9.1
UPDATE TAG
SET MTAG='科幻'
WHERE MNO=10;

UPDATE RATING
SET MSCORE=9.1
WHERE MNO=10;

--选择排名第10的电影
SELECT MNAME,MTAG,MSCORE
FROM TITLE,TAG,RATING
WHERE TITLE.MNO=10 AND TAG.MNO=10 AND RATING.MNO=10;

--自然连接
SELECT TITLE.MNO,TITLE.MNAME,RATING.MSCORE,TAG.MTAG
FROM TITLE,RATING,TAG
WHERE TITLE.MNO=RATING.MNO AND RATING.MNO=TAG.MNO;

--删除排名第十的电影
DELETE
FROM TITLE
WHERE TITLE.MNO=10;

DELETE
FROM RATING
WHERE RATING.MNO=10;

DELETE
FROM TAG
WHERE TAG.MNO=10;

SELECT TITLE.MNO,TITLE.MNAME,RATING.MSCORE,TAG.MTAG
FROM TITLE,RATING,TAG
WHERE TITLE.MNO=RATING.MNO AND RATING.MNO=TAG.MNO;

版权声明:本文为博主原创文章,未经博主允许不得转载。