引自免费微信小程序:皆我百晓生
要使用关系代数查询2014年5月30日从"昆明"出发的所有乘客姓名,我们可以按照以下步骤构建表达式:
- 从
Train
表中选择始发地为"昆明"的记录:π Start, Tno (Train) [Start = "昆明"]
- 确定在2014年5月30日出发的班次:
π Tno (1) [Time = '2014-05-30']
(这里假设Time
字段是日期类型,格式为'YYYY-MM-DD') - 使用这些班次与
Order
表进行内连接,找出相应的订单:σ Tno = Tno (Order)
- 再次通过内连接找到对应的乘客信息:
σ Cid = Cid (Customer)
- 最后,投影出乘客姓名:
π Cname (4)
将上述步骤组合成一个完整的查询表达式:
π Cname (
σ Cid = Cid (
σ Tno = Tno (
π Tno (
π Start, Tno (Train) [Start = "昆明"]
) [Time = '2014-05-30']
)
Customer
)
)
这段关系代数可以转换为SQL查询语句:
SELECT DISTINCT C.name
FROM Customer AS C
JOIN Order AS O ON C.id = O.customer_id
JOIN Train AS T ON T.train_number = O.train_number
WHERE T.starting_city = '昆明' AND DATE_FORMAT(O.time, '%Y-%m-%d') = '2014-05-30';
注意:这里的SQL查询假设了表名和字段名的命名规则,可能需要根据实际数据库中的表结构进行调整。例如,表名可能是customer
, order
, 和 train
,而字段名可能是id
, name
, phone
, train_number
, departure_city
, arrival_city
, booking_time
等。请确保替换正确的表名和字段名。