MySQL实现关系代数运算

MySQL实现关系代数运算

笛卡尔积

  • 两表的所有元组
select * from department;

select * from instructor;

  • 笛卡尔积结果
select * from instructor, department;

并运算

  • 两表的所有元组
select * from department

table

select * from department0

table0

  • 并运算结果
select * from department
union
select * from department0;

UnionResult

交运算

  • 两表的所有元组
    tables
  • 交运算
select * from department
inner join department0 on department.building = department0.building;

IntersectionResult

差运算

  • 两表的所有元组
    tables2

  • 差运算 NOT IN

select * from department
where building not in
(select building from department0);

、

  • 差运算 LFET JOIN

select * from department
left join department0 on department.building = department0.building
where department0.building is null;

选择


  • 选择结果


投影


  • 投影结果
select name from instructor;

自然连接


  • 自然连接结果

select * from course natural join department;

初始化数据库

create table department
(dept_name varchar(20),
building varchar(15),
budget numeric(12, 2),
primary key (dept_name));

create table course(
course_id varchar(7),
title varchar(50),
credits numeric(2, 0),
primary key (course_id),
foreign key(dept_name) references department(dept_name));

create table instructor(
ID varchar(5),
name varchar(20) not null,
dept_name varchar(20),
salary numeric(8,2),
primary key(ID),
foreign key(dept_name) references department(dept_name));

create table section(
course_id varchar(8),
sec_id varchar(8),
semester varchar(6),
year numeric(4,0),
building varchar(15),
room_number varchar(7),
time_slot_id varchar(4),
primary key(course_id, sec_id, semester, year),
foreign key (course_id) references course(course_id));

create table teaches(
ID varchar(5),
course_id varchar(8),
sec_id varchar(8),
semester varchar(6),
year numeric(4, 0),
primary key(ID, course_id, sec_id, semester, year),
foreign key(course_id, sec_id, semester, year) references section(course_id, sec_id, semester, year),
foreign key(ID) references instructor(ID));

insert into department
(dept_name, building, budget)
values
('CS', 'CS Building', 10000);

insert into department
(dept_name, building, budget)
values
('SE', 'SE Building', 10000);

insert into course
(course_id, title, dept_name, credits)
values
('10001', 'DS', 'CS', 5);

insert into course
(course_id, title, dept_name, credits)
values
('10002', 'OS', 'CS', 5);

insert into course
(course_id, title, dept_name, credits)
values
('10003', 'SE', 'SE', 5);

insert into instructor
(ID, name, dept_name, salary)
values
('10001', 'Mozart', 'CS', 10000);

insert into instructor
(ID, name, dept_name, salary)
values
('10002', 'Dennis', 'CS', 20000);

insert into instructor
(ID, name, dept_name, salary)
values
('10003', 'Kim', 'SE', 15000);

insert into section
(course_id, sec_id, semester, year, building, room_number, time_slot_id)
values
('10001', '10001', '1', 2020, 'CS Building', '101', '001');

insert into section
(course_id, sec_id, semester, year, building, room_number, time_slot_id)
values
('10002', '10002', '1', 2020, 'CS Building', '103', '002');

insert into section
(course_id, sec_id, semester, year, building, room_number, time_slot_id)
values
('10003', '10003', '1', 2020, 'SE Building', '203', '003');

insert into teaches
(ID, course_id, sec_id, semester, year)
values
('10002', '10001', '10001', '1', 2020);

insert into teaches
(ID, course_id, sec_id, semester, year)
values
('10001', '10002', '10002', '1', 2020);

insert into teaches
(ID, course_id, sec_id, semester, year)
values
('10003', '10003', '10003', '1', 2020);

鸣谢

数据库系统概论(第5版)
数据库系统概念(原书第6版)

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值