반응형
SQL 11 – Self Join
Database
Problems
문제 1. 데이터베이스에 있는 stops의 수를 보여주세요.
정답
1
2
3
|
SELECT COUNT(id)
FROM stops
|
cs |
문제 2. stop 'Craiglockhart'의 ID 값을 찾습니다. Find the id value for the stop 'Craiglockhart'
정답
1
2
3
4
5
|
select id
from stops
where name = 'Craiglockhart'
|
cs |
문제 3. '4' 'LRT' 서비스의 정류장 아이디와 이름을 알려주세요.
정답
1
2
3
4
5
6
7
|
select id, name
from stops JOIN route ON (id = stop)
where num = 4 AND company = 'LRT'
order by pos
|
cs |
문제 4. 표시된 쿼리는 런던 로드(149개) 또는 크레이그록하트(53개)를 방문하는 경로 수를 나타냅니다. 쿼리를 실행하고 이러한 중지를 연결하는 두 서비스의 카운트가 2인 것을 확인합니다. 출력을 이 두 경로로 제한하려면 HAVING 절을 추가하십시오.
정답
1
2
3
4
|
SELECT company, num,count(*)
FROM route WHERE stop=149 OR stop=53
GROUP BY company, num
HAVING count(*) = 2
|
cs |
문제 5. Execute the self join shown and observe that b.stop gives all the places you can get to from Craiglockhart, without changing routes. Change the query so that it shows the services from Craiglockhart to London Road.
표시된 자체 결합을 실행하고 경로를 변경하지 않고 b.stop이 크레이그록하트에서 갈 수 있는 모든 위치를 제공하는지 관찰합니다. Craiglockhart에서 London Road까지의 서비스를 표시하도록 쿼리를 변경합니다.
정답
1
2
3
4
5
6
7
|
SELECT a.company, a.num, a.stop, b.stop
FROM route a JOIN route b ON
(a.company=b.company AND a.num=b.num)
WHERE a.stop=53 and b.stop =149;
|
cs |
문제 6. 표시된 쿼리는 이전 쿼리와 유사하지만 두 개의 정지 테이블 사본을 결합하면 번호가 아닌 이름으로 정지를 참조할 수 있습니다. 'Craiglockhart'와 'London Road' 사이의 서비스가 표시되도록 쿼리를 변경합니다. 만약 당신이 이러한 장소에 지쳤다면, '톨크로스'에 대항하여 '페어마일헤드'를 시도해 보세요.
정답
1
2
3
4
5
6
7
8
9
10
11
|
SELECT a.company, a.num, stopa.name, stopb.name
FROM route a JOIN route b ON
(a.company=b.company AND a.num=b.num)
JOIN stops stopa ON (a.stop=stopa.id)
JOIN stops stopb ON (b.stop=stopb.id)
WHERE stopa.name = 'Craiglockhart' and stopb.name = 'London Road';
|
cs |
문제 7. 115번과 137번 정류장을 연결하는 모든 서비스 목록을 제공합니다('헤이마켓' 및 '리스')
Give a list of all the services which connect stops 115 and 137 ('Haymarket' and 'Leith')
정답
1
2
3
|
SELECT DISTINCT a.company, a.num
FROM route a JOIN route b ON (a.num =b.num AND a.company=b.company)
WHERE a.stop = 115 AND b.stop =137;
|
cs |
문제 8. 'Craiglockhart' 및 'Tollcross' 스톱을 연결하는 서비스 목록을 제공합니다.
Give a list of the services which connect the stops 'Craiglockhart' and 'Tollcross'
정답
1
2
3
4
5
6
7
8
9
|
SELECT a.company, a.num
FROM route a JOIN route b ON (a.num = b.num AND a.company = b.company)
JOIN stops c on a.stop = c.id
JOIN stops d on b.stop = d.id
WHERE c.name ='Craiglockhart' AND d.name = 'Tollcross';
|
cs |
문제 9. LRT 회사가 제공하는 'Craiglockhart' 자체 버스를 포함하여 'Craiglockhart'에서 한 번에 도착할 수 있는 정류장의 명확한 목록을 제공하십시오. 관련 서비스의 회사 및 버스 번호를 포함하세요.
Give a distinct list of the stops which may be reached from 'Craiglockhart' by taking one bus, including 'Craiglockhart' itself, offered by the LRT company. Include the company and bus no. of the relevant services.
정답
1
2
3
4
5
6
7
8
9
10
11
|
select d.name,a.company,a.num
from route a join route b
on a.num =b.num and a.company = b.company
join stops c on (a.stop = c.id)
join stops d on (b.stop = d.id)
where c.name ='Craiglockhart';
|
cs |
문제 10. Craiglockhart에서 Lochend까지 가는 버스 두 대가 관련된 경로를 찾아보세요.
버스 번호와 첫 번째 버스 회사, 환승 정류장 이름을 보여주세요.
그리고 두 번째 버스는 회사도 있습니다.
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
SELECT DISTINCT x.num, x.company, name, y.num, y.company
FROM (SELECT a.num, a.company, b.stop
FROM route a JOIN route b ON a.num = b.num AND a.company = b.company
AND a.stop != b.stop
WHERE a.stop = (SELECT id
FROM stops
WHERE name ='Craiglockhart'
)
) as x
JOIN (SELECT c.num, c.company, c.stop
FROM route c JOIN route d ON c.num = d.num AND c.company = d.company
AND c.stop != d.stop
WHERE d.stop = (SELECT id
FROM stops
WHERE name = 'Lochend'
)
) as y
ON x.stop = y.stop
JOIN stops ON x.stop = stops.id
ORDER BY x.num, stops.name, y.num
|
cs |
반응형
'공부 > SQL' 카테고리의 다른 글
Programmers 프로그래머스 SQL 문제풀이 02 (0) | 2022.01.21 |
---|---|
Programmers 프로그래머스 SQL 문제풀이 01 (0) | 2022.01.21 |
SQL 10 – Window functions (0) | 2022.01.13 |
SQL 09 – Numeric Examples (0) | 2022.01.13 |
SQL 08 – More JOIN operations (0) | 2022.01.13 |
댓글