En indledende SQL-tutorial: Sådan skriver du simple forespørgsler

En indledende SQL-tutorial: Sådan skriver du simple forespørgsler

Kildeknude: 3067316

Ever heard of SQL? You may have heard about it in the context of data analysis but never thought it would apply to you as a marketer. Or, you may have thought, “That’s for the advanced data users. I could never do that.”

kvinde bruger sql-forespørgsler

Well, you couldn’t be more wrong. The most successful marketers are data-driven, and one of the most important parts of being data-driven is collecting data from databases quickly. SQL is the most popular tool out there for doing just that.

Download nu: Introduktion til dataanalyse [Gratis vejledning]

If your company already stores data in a database, you may need to learn SQL to access the data. But don‘t worry — you’re in the right place to start. Let’s jump right in.

Sådan forespørges en SQL-database

  1. Sørg for, at du har et databasestyringsprogram (f.eks. MySQL Workbench, Sequel Pro).
  2. Hvis ikke, skal du downloade en databasestyringsapplikation og samarbejde med din virksomhed om at forbinde din database.
  3. Forstå din database og dens hierarki.
  4. Find ud af, hvilke felter der er i dine tabeller.
  5. Begynd at skrive en SQL-forespørgsel for at hente dine ønskede data.

Med SQL behøver du ikke at downloade og åbne et enormt Excel-regneark for at få de svar, du søger.

Du kan stille spørgsmål som "Hvilke kunder har købt en rød jumpsuit inden for de seneste seks måneder?" og SQL henter dataene fra din database og returnerer dem til dig, uden at du behøver at gennemsøge en CSV manuelt.

Hvorfor bruge SQL?

SQL er et nyttigt værktøj for virksomheder, der bruger data (tip, de fleste af dem gør). Her er nogle eksempler og grunde til, hvorfor du måske ønsker at hoppe på SQL-toget.

  • Dine data er mere sikre i SQL, da det er sværere for brugere at ved et uheld at slette dem eller ødelægge dem sammenlignet med et Excel-ark
  • SQL giver dig mulighed for at administrere datasæt, der overstiger tusindvis af poster
  • SQL tillader flere brugere at få adgang til den samme database problemfrit
  • Rollebaserede autorisationer giver dig mulighed for at kontrollere synligheden af ​​følsomme data
  • SQL muliggør kraftfuld datavisualisering
  • SQL håndhæver dataintegritet, så dine data altid er nøjagtige og konsistente

SQL-databasehierarkiet

En SQL-database er en relationsdatabase, hvilket betyder, at data er struktureret i tabeller, der er relateret til hinanden baseret på foruddefinerede relationer.

Oplysninger i en SQL-database er struktureret hierarkisk, svarende til et stamtræ, hvilket betyder, at elementer på øverste niveau har et bredere omfang og forgrener sig nedad i flere, mere specifikke underenheder.

I forbindelse med SQL er det øverste niveau databaseserver, Også kaldet instans. Din instans er hvor alle dine data er gemt. Inden for en instans kan der være flere databaser, der hver indeholder data organiseret ud fra en bred kategorisering.

En database er opdelt i tabeller. Tabellen er, hvor de faktiske data lever. Når du er på tabelniveau, organiseres data efter kolonner , rækker og anbragt indenfor felter, næsten nøjagtigt som et Excel-regneark.

Lad os foregive, at vi arbejder med flere databaser om mennesker i USA. Indtastning af forespørgslen "VIS DATABASER;" afslører hver database i dit system, inklusive en med titlen Ny England.

En database indeholder tabeller, og i disse tabeller er dine data.

Hvis vi bruger forespørgslen "VIS TABELLER i NewEngland;", er resultatet tabeller for hver stat i New England:

people_connecticut, people_maine, people_massachusetts, people_newhampshire, people_rhodeisland og people_vermont.

Til sidst skal du finde ud af, hvilke felter der er i tabellerne. Felter er de specifikke stykker data, som du kan trække fra din database.

For example, if you want to pull someone’s address, the field name may not just be “address” — it may be separated into address_city, address_state, address_zip. To figure this out, use the query “Describe people_massachusetts;”.

Dette giver en liste over alle de data, du kan trække ved hjælp af SQL.

Let’s do a quick review of the hierarchy using our New England example:

  • Vores database er Ny England.
  • Vores tabeller i den database er people_connecticut, people_maine, people_massachusetts, people_newhampshire, people_rhodeisland og people_vermont.
  • Vores felter i people_massachusetts-tabellen inkluderer: address_city, address_state, address_zip, hair_color, age, first_name og last_name.

Lad os nu skrive nogle simple SQL-forespørgsler for at hente data fra vores Ny England databasen.

Sådan skriver du SQL-forespørgsler

Før vi begynder, skal du sikre dig, at du har et databasestyringsprogram, der giver dig mulighed for at trække data fra din database. Nogle muligheder omfatter MySQL or Efterfølger Pro.

Start by downloading one of these options, then talk to your company’s IT department about how to connect to your database. Your option will depend on your product’s back end, so check with your product team to ensure you select the correct one.

To learn how to write an SQL query, let’s use the following question:

Hvem er de mennesker med rødt hår i Massachusetts, der blev født i 2003?

Brug af SELECT-kommandoen

SELECT vælger de felter, du vil have vist i dit diagram. Dette er det specifikke stykke information, du vil trække fra din database. I eksemplet ovenfor ønsker vi at finde mennesker som opfylder resten af ​​kriterierne.

Forespørgsel 1:

SELECT

fornavn,

efternavn

;

Brug af FROM-kommandoen

FROM udpeger den tabel, du vil hente dataene fra.

I det tidligere afsnit lærte vi, at der var seks tabeller for hver af de seks stater i New England: people_connecticut, people_maine, people_massachusetts, people_newhampshire, people_rhodeisland og people_vermont.

Fordi vi leder efter folk specifikt i Massachusetts, henter vi data fra den specifikke tabel.

Her er vores SQL-forespørgsel:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

;

Brug af WHERE-kommandoen

WHERE allows you to filter a query to be more specific. In our example, we want to filter our query to include only people with red hair who were born in 2003. Let’s start with the red hair filter.

Forespørgsel 2:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

;

hair_color kunne have været en del af din indledende SELECT-erklæring, hvis du ville se på alle mennesker i Massachusetts og deres hårfarve. Men hvis du vil filtrere for at se kun personer med rødt hår, kan du gøre det med en WHERE-erklæring.

Brug af BETWEEN-kommandoen

Udover lig med (=), er BETWEEN en anden operator, du kan bruge til betingede forespørgsler. En BETWEEN-sætning er sand for værdier, der falder mellem de angivne minimums- og maksimumværdier.

I vores tilfælde kan vi bruge BETWEEN til at trække poster fra et bestemt år, som 2003.

Forespørgsel 3:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

;

Brug AND kommandoen

OG giver dig mulighed for at tilføje yderligere kriterier til din WHERE-erklæring. Husk, vi ønsker at filtrere efter personer, der havde rødt hår ud over personer, der er født i 2003. Eftersom vores WHERE-udtalelse er optaget af rødt hår-kriterierne, hvordan kan vi så filtrere efter et specifikt fødselsår?

Det er her, AND-sætningen kommer ind i billedet. I dette tilfælde er AND-sætningen en datoegenskab — men det behøver den ikke nødvendigvis at være. (Bemærk: Tjek formatet på dine datoer med dit produktteam for at sikre, at de er korrekte.)

Forespørgsel 4:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

;

Brug af OR-kommandoen

OR kan også bruges med en WHERE-sætning. Med AND skal begge betingelser være sande for at blive vist i resultaterne (f.eks. skal hårfarven være rød og skal være født i 2003). Med OR skal begge betingelser være sande for at blive vist i resultaterne (f.eks. skal hårfarven være rød or skal være født i 2003).

Sådan ser en OR-erklæring ud i aktion.

Forespørgsel 5:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

OR

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

;

Brug af NOT-kommandoen

NOT bruges i en WHERE-sætning til at vise værdier, hvor den angivne betingelse er usand. Hvis vi ville trække alle Massachusetts indbyggere op uden rødt hår, kan vi bruge følgende forespørgsel.

Forespørgsel 6:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR IKKE

hårfarve = 'rød'

;

Brug af ORDER BY-kommandoen

Calculations and organization also can be done within a query. That‘s where the ORDER BY and GROUP BY functions come in. First, we’ll look at our SQL queries with the ORDER BY and then GROUP BY functions. Then, we’ll briefly examine the difference between the two.

An ORDER BY clause allows you to sort by any of the fields that you have specified in the SELECT statement. In this case, let’s order by last name.

Forespørgsel 7:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

BESTIL BY

efternavn

;

Brug af GROUP BY-kommandoen

GROUP BY ligner ORDER BY, men samler lignende data. For eksempel, hvis du har nogen dubletter i dine data, kan du bruge GROUP BY til at tælle antallet af dubletter i dine felter.

Forespørgsel 8:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

GROUP BY

efternavn

;

BESTIL AF VS. GRUPPE EFTER

For at vise forskellen mellem en ORDER BY-sætning og en GROUP BY-sætning, lad os kort gå uden for vores Massachusetts-eksempel for at se på et meget simpelt datasæt. Nedenfor er en liste over fire medarbejderes ID-numre og navne.

Hvis vi skulle bruge en ORDER BY-sætning på denne liste, ville medarbejdernes navne blive sorteret i alfabetisk rækkefølge. Resultatet ville se sådan ud:

Hvis vi i stedet brugte en GROUP BY-sætning, ville medarbejderne blive talt baseret på antallet af gange, de optrådte i den indledende tabel. Bemærk, at Peter optrådte to gange i den indledende tabel, så resultatet ville se sådan ud:

Med mig indtil videre? Okay, lad os vende tilbage til den SQL-forespørgsel, vi har lavet om rødhårede Massachusetts-folk født i 2003.

Brug af LIMIT-funktionen

Det kan tage lang tid at køre dine forespørgsler, afhængigt af mængden af ​​data, du har i din database. Dette kan være frustrerende, især hvis du har lavet en fejl i din forespørgsel og nu skal vente, før du fortsætter. Hvis du vil teste en forespørgsel, lader LIMIT-funktionen dig begrænse antallet af resultater, du får.

For eksempel, hvis vi har mistanke om, at tusindvis af mennesker har rødt hår i Massachusetts, vil vi måske prøve vores forespørgsel ved hjælp af LIMIT, før vi kører den fuldt ud for at sikre, at vi får de oplysninger, vi ønsker. Lad os for eksempel sige, at vi kun ønsker at se de første 100 personer i vores resultat.

Forespørgsel 8:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

BESTIL BY

efternavn

GRÆNSE

100

;

Brug af kommandoen INSERT INTO

Udover at hente information fra en relationsdatabase, kan SQL også bruges til at ændre indholdet af en database.

Du skal selvfølgelig have tilladelse til at ændre din virksomheds data. Men hvis du nogensinde har ansvaret for at administrere indholdet af en database, deler vi nogle forespørgsler, du bør vide.

Først er INSERT INTO-sætningen til at sætte nye værdier ind i din database.

Hvis vi ønsker at tilføje en ny person til Massachusetts-tabellen, kan vi gøre det ved først at angive navnet på den tabel, vi ønsker at ændre, og felterne i tabellen, vi vil tilføje til.

Dernæst skriver vi VALUE med hver respektive værdi, vi vil tilføje.

Forespørgsel 9:

INDSÆT IND

people_massachusetts (address_city, address_state, address_zip, hair_color, age, first_name, last_name)

VÆRDIER

(Cambridge, Massachusetts, 02139, blondine, 32, Jane, Doe)

;

Alternativt, hvis du tilføjer en værdi til hvert felt i tabellen, behøver du ikke at angive felter. Værdierne vil blive tilføjet til kolonner i den rækkefølge, de er anført i forespørgslen.

Forespørgsel 10:

INDSÆT IND

people_massachusetts

VÆRDIER

(Cambridge, Massachusetts, 02139, blondine, 32, Jane, Doe)

;

Hvis du kun ønsker at tilføje værdier til bestemte felter, skal du angive disse felter. Lad os sige, at vi kun vil indsætte en post med fornavn, efternavn og adressetilstand - vi kan bruge følgende forespørgsel.

Forespørgsel 11:

INDSÆT IND

people_massachusetts (fornavn, efternavn, adresse_stat)

VÆRDIER

(Jane, Doe, Massachusetts)

;

Brug af UPDATE-kommandoen

Du kan bruge UPDATE, hvis du vil erstatte eksisterende værdier i din database med andre. Hvad hvis nogen f.eks. er registreret i databasen med rødt hår, når de rent faktisk har brunt hår? Vi kan opdatere denne post med UPDATE- og WHERE-udsagn.

Forespørgsel 12:

OPDATER

people_massachusetts

SET

hårfarve = 'brun'

HVOR

fornavn = 'Jane'

AND

last_name = 'Doe'

;

Eller lad os sige, at der er et problem i din tabel, hvor nogle værdier for "address_state" vises som "Massachusetts", og andre vises som "MA". For at ændre alle forekomster af "MA" til "Massachusetts", kan vi bruge en simpel forespørgsel og opdatere flere poster samtidigt.

Forespørgsel 13:

OPDATER

people_massachusetts

SET

address_state = 'Massachusetts'

HVOR

adresse_tilstand = MA

;

Vær forsigtig, når du bruger UPDATE. Hvis du ikke angiver, hvilke poster der skal ændres med en WHERE-sætning, ændrer du alle værdier i tabellen.

Brug af kommandoen DELETE

DELETE fjerner poster fra din tabel. Som med UPDATE skal du sørge for at inkludere en WHERE-sætning, så du ikke ved et uheld sletter hele din tabel.

Eller, hvis vi tilfældigvis finder flere poster i vores people_massachusetts-tabel, som faktisk boede i Maine, kan vi slette disse poster hurtigt ved at målrette adresse_state-feltet.

Forespørgsel 13:

SLET FRA

people_massachusetts

HVOR

address_state = 'maine'

;

Bonus: Avancerede SQL-tip

Now that you’ve learned how to create a simple SQL query, let’s discuss some other tricks that you can use to take your queries up a notch, starting with the asterisk.

* (stjerne)

Når du tilføjer et stjernetegn til din SQL-forespørgsel, fortæller det forespørgslen, at du vil inkludere alle kolonnerne med data i dine resultater.

In the Massachusetts example we‘ve been using, we’ve only had two column names: first_name and last_name. But let’s say we had 15 columns of data that we want to see in our results — it would be a pain to type all 15 column names in the SELECT statement. Instead, if you replace the names of those columns with an asterisk, the query will know to pull all of the columns into the results.

Here’s what the SQL query would look like.

Forespørgsel 13:

SELECT

*

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

BESTIL BY

efternavn

GRÆNSE

100

;

% (procentsymbol)

Procentsymbolet er et jokertegn, hvilket betyder, at det kan repræsentere et eller flere tegn i en databaseværdi. Jokertegn er nyttige til at finde poster, der deler fælles tegn. De bruges typisk sammen med LIKE-operatoren til at finde et mønster i dataene.

For eksempel, hvis vi ønskede at få navnene på hver person i vores tabel, hvis postnummer begynder med "02", kan vi skrive følgende forespørgsel.

Forespørgsel 14:

SELECT

fornavn,

efternavn

HVOR

adresse_zip SOM '02%'

;

Her står "%" for enhver gruppe af cifre, der følger efter "02", så denne forespørgsel viser enhver post med en værdi for adresse_zip, der begynder med "02".

SIDSTE 30 DAGE

Da jeg begyndte at bruge SQL regelmæssigt, fandt jeg ud af, at en af ​​mine go-to-forespørgsler involverede at finde ud af, hvilke personer der foretog en handling eller opfyldte et bestemt sæt kriterier inden for de sidste 30 dage.

Let’s pretend today is December 1, 2021. You kunne opret disse parametre ved at lade fødselsdatoen spænde mellem 1. november 2021 og 30. november 2021. Den SQL-forespørgsel ville se sådan ud:

Forespørgsel 15:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2021-11-01' OG '2021-11-30'

BESTIL BY

efternavn

GRÆNSE

100

;

But that would require considering which dates cover the last 30 days, and you’d have to constantly update this query.

I stedet, for at få datoerne til automatisk at spænde over de sidste 30 dage, uanset hvilken dag det er, kan du skrive dette under OG: fødselsdato >= (DATE_SUB(CURDATE(),INTERVAL 30))

(Note: You’ll want to double-check this syntax with your product team because it may differ based on the software you use to pull your SQL queries.)

Din fulde SQL-forespørgsel ville derfor se ud som følger.

Forespørgsel 16:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

HVOR

hårfarve = 'rød'

AND

fødselsdato >= (DATE_SUB(CURDATE(),INTERVAL 30))

BESTIL BY

efternavn

GRÆNSE

100

;

COUNT

I nogle tilfælde vil du måske tælle antallet af gange, et kriterium for et felt vises. Lad os f.eks. sige, at du vil tælle antallet af gange, de forskellige hårfarver vises for de personer, du opregner fra Massachusetts.

I dette tilfælde vil COUNT være praktisk, så du ikke manuelt behøver at tilføje antallet af personer med forskellige hårfarver eller eksportere disse oplysninger til Excel.

Here’s what that SQL query would look like:

Forespørgsel 17:

SELECT

hårfarve,

COUNT(hårfarve)

FRA

people_massachusetts

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

GROUP BY

hårfarve

;

AVG

AVG beregner gennemsnittet af en attribut i resultaterne af din forespørgsel, eksklusive NULL-værdier (tom). I vores eksempel kunne vi bruge AVG til at beregne gennemsnitsalderen for indbyggere i Massachusetts i vores forespørgsel.

Sådan kan vores SQL-forespørgsel se ud:

Forespørgsel 18:

SELECT

AVG(alder)

FRA

people_massachusetts

;

SUM

SUM er en anden simpel beregning, du kan lave i SQL. Den beregner den samlede værdi af alle attributter fra din forespørgsel. Så hvis vi ønskede at sammenlægge alle aldre for indbyggere i Massachusetts, kan vi bruge følgende forespørgsel.

Forespørgsel 19:

SELECT

SUM(alder)

FRA

people_massachusetts

;

Bruger MIN og MAX

MIN og MAX er to SQL-funktioner, der giver dig de mindste og største værdier af et givet felt. Vi kan bruge det til at identificere de ældste og yngste medlemmer af vores Massachusetts-tabel:

Følgende forespørgsel vil give os rekorden for de yngste mennesker.

Forespørgsel 20:

SELECT

MIN(alder)

FRA

people_massachusetts

;

Og denne forespørgsel giver os den ældste:

Forespørgsel 21:

SELECT

MAX(alder)

FRA

people_massachusetts

;

Brug af JOIN-kommandoen

Der kan være et tidspunkt, hvor du har brug for at få adgang til oplysninger fra to forskellige tabeller i én SQL-forespørgsel. I SQL kan du bruge en JOIN-klausul til at gøre dette.

(For dem der kender til Excel-formler, det svarer til at bruge VLOOKUP-formlen, når du skal kombinere oplysninger fra to forskellige ark i Excel.)

Let‘s say we have one table that has data on all Massachusetts residents’ user IDs and birthdates. In addition, we have an entirely separate table containing all Massachusetts residents’ user IDs and their hair color.

If we want to determine the hair color of Massachusetts residents born in 2003, we’d need to access information from both tables and combine them. This works because both tables share a matching column: user IDs.

Our SELECT statement will also change slightly because we‘re calling out fields from two different tables. Instead of just listing out the fields we want to include in our results, we’ll need to specify which table they’re coming from.

(Bemærk: Stjernefunktionen kan være nyttig her, så din forespørgsel inkluderer begge tabeller i dine resultater.)

For at angive et felt fra en specifik tabel, skal vi bare kombinere tabellens navn med feltets navn. For eksempel ville vores SELECT-sætning sige "table.field" - med punktum, der adskiller tabel- og feltnavnene.

We’re also assuming a few things in this case:

  1. Fødselsdatotabellen i Massachusetts indeholder følgende felter: fornavn, efternavn, bruger-id, fødselsdato
  2. Massachusetts hårfarvetabellen indeholder følgende felter: bruger_id, hårfarve

Din SQL-forespørgsel ville se ud som følger.

Forespørgsel 21:

SELECT

fødselsdato_massachusetts.first_name,

fødselsdato_massachusetts.efternavn

FRA

birthdate_massachusetts JOIN haircolor_massachusetts BRUG (bruger_id)

HVOR

hårfarve = 'rød'

AND

fødselsdato MELLEM '2003-01-01' OG '2003-12-31'

BESTIL BY

efternavn

;

Denne forespørgsel vil forbinde de to tabeller ved hjælp af feltet "user_id", som vises i både birthdate_massachusetts-tabellen og haircolor_massachusetts-tabellen. Du kan så se en tabel over personer født i 2003 med rødt hår.

Brug af en CASE-erklæring

Brug en CASE-sætning, når du vil returnere forskellige resultater til din forespørgsel baseret på, hvilken betingelse der er opfyldt. Forholdene vurderes i rækkefølge. Det tilsvarende resultat returneres, når en betingelse er opfyldt, og alle følgende betingelser springes over.

Du kan inkludere en ELSE-betingelse i slutningen, hvis ingen betingelser er opfyldt. Uden en ELSE vil forespørgslen returnere NULL, hvis ingen betingelser er opfyldt.

Her er et eksempel på brug af CASE til at returnere en streng baseret på forespørgslen.

Forespørgsel 22:

SELECT

fornavn,

efternavn

FRA

people_massachusetts

CASE

NÅR hair_color = 'brun' SÅ 'Denne person har brunt hår.'

NÅR hair_color = 'blond' SÅ 'Denne person har blond hår.'

NÅR hair_color = 'rød' SÅ 'Denne person har rødt hår.'

ELSE 'Hårfarve ikke kendt.'

SLUT

;

Grundlæggende SQL-forespørgsler, marketingfolk bør kende

Tillykke! Du er klar til at køre dine egne SQL-forespørgsler.

Selvom der er meget mere, du kan gøre med SQL, håber jeg, at du fandt denne oversigt over det grundlæggende nyttigt, så du kan få dine hænder snavsede.

Med et stærkt fundament af det grundlæggende kan du navigere i SQL bedre og arbejde hen imod nogle af de mere komplekse eksempler.

Redaktørens bemærkning: Dette indlæg blev oprindeligt offentliggjort i marts 2015 og er blevet opdateret med henblik på omfattende.

Ny opfordring til handling

Tidsstempel:

Mere fra HubSpot