SQLZOO SELF JOIN 参考答案(含表格样式和解题思路)

本文详细介绍了SQLZOO中关于SELF JOIN的一系列问题,涉及如何使用SQL查询从数据库中获取特定路线信息。内容涵盖如何找出数据库中的停靠站数量,查找特定站台的id,列出特定服务的停靠站,以及如何展示两个站点间的公交线路等复杂查询。解题思路强调了使用DISTINCT、HAVING、JOIN等SQL关键字的重要性,并给出了具体的查询语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.
首先放上数据源信息,然后需要了解这个数据库的构成,在ROUTE中,一个NUM 和COMOANY构成了一个主键。这就说明一个后面的POS 和 STOP 会有重复(因为可能有2个公司的公交车走两趟非常相似的公司,或者一个公司内2趟公有几站是重合的),这个也是运用自连接的主要场合(有一对多的映射)

题目如下:
1.How many stops are in the database.

这里为防止计算重复id, 加了DISTINCT

SELECT DISTINCT count(id)
FROM stops

2.Find the id value for the stop ‘Craiglockhart’

SELECT id
FROM stops
WHERE name LIKE "Craiglockhart"

3.Give the id and the name for the stops on the ‘4’ ‘LRT’ service.

这里需要注意的是‘4’ 和 4
根据题意,应该是带单引号的4,当我直接输入4的时候,MYSQL自动排序了。可能由于数据类型不同操作不同吧。

#子查询
SELECT id,name
FROM stops
WHERE id IN 
(SELECT stop
FROM route
WHERE num='4'
AND company LIKE 'LRT'
)
#或者JOIN
SELECT id,name 
FROM stops s join route r
ON s.id=r.stop
WHERE r.num='4'AND r.company LIKE 'LRT' 
  1. The query shown gives the number of routes that visit either London Road (149) or Craiglockhart (53). Run the query and notice the two services that link these stops have a count of 2. Add a HAVING clause to restrict the output to these two routes.

number of routes: 运用count函数

SELECT company, num, COUNT(*)
FROM route 
WHERE stop=149 OR stop=53
GROUP BY company, num
Having COUNT(*)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值