Hier beginnen? Deze les maakt deel uit van een volledige tutorial in het gebruik van SQL voor Data-analyse. Kijk naar het begin.
in deze les behandelen we:
- filteren in de ON-clausule
- filteren in de WHERE-clausule
- oefenproblemen
filteren in de ON-clausule
normaal wordt filteren verwerkt in de WHERE
– clausule zodra de twee tabellen al zijn samengevoegd. Het is echter mogelijk dat u een of beide tabellen wilt filteren voordat u ze samenvoegt., U wilt bijvoorbeeld alleen onder bepaalde omstandigheden overeenkomsten tussen de tabellen maken.,
Via Crunchbase gegevens, laten we nog eens kijken naar de LEFT JOIN
voorbeeld van een eerdere les (dit keer voegen we een ORDER BY
component):
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink ORDER BY 1
Vergelijk de volgende query uit om de vorige en je zal zien dat alles wat in de tutorial.crunchbase_acquisitions
tafel kwam op, behalve voor de rij voor die company_permalink
'/company/1000memories'
:
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink AND acquisitions.company_permalink != '/company/1000memories' ORDER BY 1
Wat gebeurt bovenstaande is dat de voorwaardelijke instructie AND...
geëvalueerd voordat de join optreedt., Je kunt het zien als eenWHERE
clausule die alleen van toepassing is op een van de tabellen. U kunt zien dat dit alleen gebeurt in een van de tabellen omdat de 1000memories permalink nog steeds wordt weergegeven in de kolom die trekt uit de andere tabel:
Filtering in de WHERE clausule
Als u hetzelfde filter verplaatst naar de WHERE
clausule, zult u merken dat het filter gebeurt nadat de tabellen zijn samengevoegd., Het resultaat is dat de rij 1000memories wordt samengevoegd met de oorspronkelijke tabel, maar dan volledig wordt gefilterd (in beide tabellen) in de WHERE
clausule voordat de resultaten worden weergegeven.
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink WHERE acquisitions.company_permalink != '/company/1000memories' OR acquisitions.company_permalink IS NULL ORDER BY 1
u kunt zien dat de 1000memories-regel niet wordt geretourneerd (het zou tussen de twee gemarkeerde regels hieronder zijn geweest). Merk ook op dat filteren in de WHERE
clausule ook null waarden kan filteren, dus we hebben een extra regel toegevoegd om ervoor te zorgen dat de nulls worden opgenomen.,
verscherp uw SQL-vaardigheden
voor deze set oefenproblemen introduceren we een nieuwe dataset: tutorial.crunchbase_investments
. Deze tabel is ook afkomstig van Crunchbase en bevat veel van dezelfde informatie als de tutorial.crunchbase_companies
gegevens. Het is echter anders gestructureerd: het bevat Één rij per investering. Er kunnen meerdere investeringen per bedrijf zijn—het is zelfs mogelijk dat één investeerder meerdere keren in hetzelfde bedrijf zou kunnen investeren. De kolomnamen spreken voor zich., Belangrijk is dat company_permalink
in de tutorial.crunchbase_investments
tabelafbeeldingen aan permalink
in de tutorial.crunchbase_companies
tabel. Houd er rekening mee dat sommige willekeurige gegevens uit deze tabel zijn verwijderd omwille van deze les.
het is zeer waarschijnlijk dat u een verkennende analyse op deze tabel moet doen om te begrijpen hoe u de volgende problemen kunt oplossen.,
Practice Problem
Schrijf een query die de naam van een bedrijf, “status” (gevonden in de Companies table), en het aantal unieke beleggers in dat bedrijf toont. Order door het aantal beleggers van de meeste naar minst. Beperken tot alleen bedrijven in de staat New York.
probeer het uit Zie het antwoord
Practice Problem
Schrijf een query die een lijst geeft van beleggers op basis van het aantal bedrijven waarin ze zijn belegd. Neem een rij voor bedrijven zonder investeerder, en orde van de meeste bedrijven aan de minste.,
probeer het uit Zie het antwoord
Leave a Reply