努力将我的头围绕这个数据库查询

哲学家

我已经完成了斯坦福大学的关系代数课程,并且很难理解其中一个问题,尽管我已经找到了答案。

这是模式:

/* Delete the tables if they already exist */
drop table if exists Person;
drop table if exists Frequents;
drop table if exists Eats;
drop table if exists Serves;

/* Create the schema for our tables */
create table Person(name text, age int, gender text);
create table Frequents(name text, pizzeria text);
create table Eats(name text, pizza text);
create table Serves(pizzeria text, pizza text, price decimal);

/* Populate the tables with our data */
insert into Person values('Amy', 16, 'female');
insert into Person values('Ben', 21, 'male');
insert into Person values('Cal', 33, 'male');
insert into Person values('Dan', 13, 'male');
insert into Person values('Eli', 45, 'male');
insert into Person values('Fay', 21, 'female');
insert into Person values('Gus', 24, 'male');
insert into Person values('Hil', 30, 'female');
insert into Person values('Ian', 18, 'male');

insert into Frequents values('Amy', 'Pizza Hut');
insert into Frequents values('Ben', 'Pizza Hut');
insert into Frequents values('Ben', 'Chicago Pizza');
insert into Frequents values('Cal', 'Straw Hat');
insert into Frequents values('Cal', 'New York Pizza');
insert into Frequents values('Dan', 'Straw Hat');
insert into Frequents values('Dan', 'New York Pizza');
insert into Frequents values('Eli', 'Straw Hat');
insert into Frequents values('Eli', 'Chicago Pizza');
insert into Frequents values('Fay', 'Dominos');
insert into Frequents values('Fay', 'Little Caesars');
insert into Frequents values('Gus', 'Chicago Pizza');
insert into Frequents values('Gus', 'Pizza Hut');
insert into Frequents values('Hil', 'Dominos');
insert into Frequents values('Hil', 'Straw Hat');
insert into Frequents values('Hil', 'Pizza Hut');
insert into Frequents values('Ian', 'New York Pizza');
insert into Frequents values('Ian', 'Straw Hat');
insert into Frequents values('Ian', 'Dominos');

insert into Eats values('Amy', 'pepperoni');
insert into Eats values('Amy', 'mushroom');
insert into Eats values('Ben', 'pepperoni');
insert into Eats values('Ben', 'cheese');
insert into Eats values('Cal', 'supreme');
insert into Eats values('Dan', 'pepperoni');
insert into Eats values('Dan', 'cheese');
insert into Eats values('Dan', 'sausage');
insert into Eats values('Dan', 'supreme');
insert into Eats values('Dan', 'mushroom');
insert into Eats values('Eli', 'supreme');
insert into Eats values('Eli', 'cheese');
insert into Eats values('Fay', 'mushroom');
insert into Eats values('Gus', 'mushroom');
insert into Eats values('Gus', 'supreme');
insert into Eats values('Gus', 'cheese');
insert into Eats values('Hil', 'supreme');
insert into Eats values('Hil', 'cheese');
insert into Eats values('Ian', 'supreme');
insert into Eats values('Ian', 'pepperoni');

insert into Serves values('Pizza Hut', 'pepperoni', 12);
insert into Serves values('Pizza Hut', 'sausage', 12);
insert into Serves values('Pizza Hut', 'cheese', 9);
insert into Serves values('Pizza Hut', 'supreme', 12);
insert into Serves values('Little Caesars', 'pepperoni', 9.75);
insert into Serves values('Little Caesars', 'sausage', 9.5);
insert into Serves values('Little Caesars', 'cheese', 7);
insert into Serves values('Little Caesars', 'mushroom', 9.25);
insert into Serves values('Dominos', 'cheese', 9.75);
insert into Serves values('Dominos', 'mushroom', 11);
insert into Serves values('Straw Hat', 'pepperoni', 8);
insert into Serves values('Straw Hat', 'cheese', 9.25);
insert into Serves values('Straw Hat', 'sausage', 9.75);
insert into Serves values('New York Pizza', 'pepperoni', 8);
insert into Serves values('New York Pizza', 'cheese', 7);
insert into Serves values('New York Pizza', 'supreme', 8.5);
insert into Serves values('Chicago Pizza', 'cheese', 7.75);
insert into Serves values('Chicago Pizza', 'supreme', 8.5);

我正在努力解决问题6。问题如下:查找所有仅由24岁以下的人食用的披萨,或在所有送达地点的价格都低于10美元的披萨。

现在,我了解了查询。它基本上分为两个部分:

  1. 未满24岁的人食用的披萨
  2. 价格低于10美元的披萨

我什至理解答案,即(所有比萨饼和价格大于10美元的比萨饼之间的差异)和(人们所吃的所有比萨饼与24岁以上的人们所吃的所有比萨饼之间的差异)的联合

(\project_{pizza} (Serves) \diff \project_{pizza} (\select_{price>='10'} Serves))
\union
(\project_{pizza} (Eats) \diff \project_{pizza} (\select_{age>='24'} Person \join Eats))

但是,我不明白为什么相反的查询没有给出相同的答案,即(价格低于10美元的比萨饼)和(年龄小于24岁的人吃的比萨饼)的并集。

(\project_{pizza} (\select_{price<'10'} Serves))
\union
(\project_{pizza} (\select_{age<'24'} Person \join Eats))

为什么第二个查询给出的答案与第一个查询不同。据我说,他们俩都应该给出相同的答案。

所有答复表示赞赏。

Terje D.

您的第一个查询找到的披萨

不花费更多的$ 10的任何地方,或者是没吃过任何24岁以上的人,

而您上一次查询时发现的比萨

销售低于$ 10的地方,或者是吃一些低于24人。

对于在某些地方售价低于10美元而在其他地方售价高于10美元,或者被年龄在24岁以下且年龄更大的一些人食用的披萨,这些查询将给出不同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

把我的头围绕着面向文档的数据库

来自分类Dev

我应该如何规范这个数据库设计?

来自分类Dev

如何创建这个数据库?

来自分类Dev

围绕存储和查询双向关系的数据库性能

来自分类Dev

从多个数据库查询数据

来自分类Dev

从多个数据库查询数据

来自分类Dev

将我的Javascript函数实现为数据库查询结果

来自分类Dev

我如何改进这个数据库,表之间的关系是否正常?

来自分类Dev

我做这个数据库规范化问题对吗?

来自分类Dev

脚本->查询多个数据库

来自分类Dev

MySQL查询多个数据库

来自分类Dev

将我的DeviceToken移到我的数据库中

来自分类Dev

无法将我的头围绕在 array_filter()

来自分类Dev

这个数据库表的最佳索引是什么?

来自分类Dev

尝试将我的sqlite数据库导入Android

来自分类Dev

将我的MySQL数据库连接到phpMyAdmin

来自分类Dev

如何将我的 mysql 数据库与节点连接?

来自分类Dev

将我的网站连接到数据库

来自分类Dev

为什么我的SQL查询在一个数据库中这么慢?

来自分类Dev

努力进行数据库设计

来自分类Dev

将我的本地数据库(Mysql)复制到远程数据库(phpmyadmin)

来自分类Dev

如何将我的代码从sqlite数据库更改为.mdf数据库?

来自分类Dev

如何跨多个数据库查询数据?

来自分类Dev

SQLAlchemy:难以查询我的数据库

来自分类Dev

SQLAlchemy:难以查询我的数据库

来自分类Dev

如何查询我的 Firebase 数据库?

来自分类Dev

查询以获取每个数据库的日期时间

来自分类Dev

对每个数据库运行查询(mysql)

来自分类Dev

Laravel ::合并两个数据库查询对象