SQLZOO: liituge ise märkmetega

Sqlzoo Self Join Notes



Ise liituma

Edinburghi bussid
pilt
1, mitu peatust on andmebaasis.

SELECT COUNT(*) FROM stops

2, leidke peatuse Craiglockhart ID väärtus



SELECT id FROM stops WHERE name = 'Craiglockhart'

3 、 Andke teenuse ‘4’ ’LRT’ peatuste ID ja nimi.



SELECT id, name FROM route JOIN stops ON (id = stop) WHERE num = 4 AND company = 'LRT' ORDER BY pos

4 shown Kuvatud päring annab marsruutide arvu, mis külastavad kas London Roadi (149) või Craiglockharti (53). Käivitage päring ja märkige, et nende peatuste lingil olevate teenuste arv on 2. Lisage HAVING-klausel, et väljund piirduda nende kahe marsruudiga.



SELECT company, num, COUNT(*) FROM route WHERE stop = 149 OR stop = 53 GROUP BY company, num HAVING COUNT(*) = 2

5. Tehke näidatud iseliitumine ja jälgige, et b.stop annab kõik kohad, kuhu saate Craiglockhartist pääseda, marsruute muutmata. Muutke päringut nii, et see näitaks teenuseid Craiglockhartist London Roadini.

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

6 shown Kuvatud päring sarnaneb eelmisega, kuid peatuste tabeli kahe eksemplari ühendamise abil võime peatustele viidata pigem nime kui numbri järgi. Muutke päringut nii, et kuvatakse teenused ‘Craiglockhart’ ja ‘London Road’ vahel. Kui teil on neist kohtadest kõrini, proovige ‘Fairmilehead’ ‘Tollcross’ vastu

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'

7 、 Esitage loetelu kõigist teenustest, mis ühendavad peatusi 115 ja 137 (‘Haymarket’ ja ‘Leith’)



SELECT company, num FROM route WHERE num IN (SELECT a.num FROM route AS a, route AS b WHERE a.company = b.company AND a.num = b.num AND a.stop = '115' AND b.stop = '137') GROUP BY num, company

8 、 Andke nimekiri teenustest, mis ühendavad peatusi Craiglockhart ja Tollcross

SELECT b.company, b.num FROM route a JOIN route b ON (a.company = a.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 = 'Tollcross'

9 、 Esitage selge nimekiri peatustest, kuhu pääseb Craiglockhartist, sõites ühe bussiga, sealhulgas ka Craiglockhart, mida pakub LRT ettevõte. Lisage ettevõtte ja bussi nr. vastavate teenuste

SELECT stopb.name, a.company, a.num FROM route AS a JOIN route AS b ON (a.company = b.company AND a.num = b.num) JOIN stops AS stopa ON (stopa.id = a.stop) JOIN stops AS stopb ON (stopb.id = b.stop) WHERE stopa.name = 'Craiglockhart'

10 、 Leidke marsruudid, mis hõlmavad kahte bussi, mis võivad sõita Craiglockhartist Lochendi.
Näita bussi nr. ja buss esimese bussi jaoks, ümberistumise peatuse nimi,
ja buss nr. ja seltskond teisele bussile.

SELECT v1.r1num, v1.r1com, v1.trans1, v2.r4num, v2.r4com FROM (SELECT s1.name AS begin, r1.num AS r1num, r1.company AS r1com, s2.name AS trans1 FROM route r1 JOIN route r2 ON r1.company = r2.company AND r1.num = r2.num JOIN stops s1 ON s1.id = r1.stop JOIN stops s2 ON s2.id = r2.stop WHERE s1.name = 'Craiglockhart') AS v1 JOIN(SELECT s3.name AS trans2, r4.num AS r4num, r4.company AS r4com, s4.name AS final FROM route r3 JOIN route r4 ON r3.company = r4.company AND r3.num = r4.num JOIN stops s3 ON s3.id = r3.stop JOIN stops s4 ON s4.id = r4.stop WHERE s4.name = 'Lochend') AS v2 ON v1.trans1 = v2.trans2 ORDER BY r1num, trans1, r4num