Indtil videre har vi oprettet en database, tilføjet to tabeller og indsat data i begge tabeller. Nu skal vi se på, hvordan man henter disse data. Men ikke bare hente dataene, men for at forespørge databasen for det.
SQL står for Structured Query Language . Det er Forespørgslen bit, der gør SQL så kraftfuld. SQL er et sprog, der giver dig mulighed for at køre forespørgsler mod din database. Det giver dig mulighed for at forespørge databasen for de data, du ønsker.
SQL SELECT
Erklæring
Når det kommer til at forespørge i din MySQL-database, SQL SELECT
statement gør det hele muligt. Dette er sandsynligvis din mest brugte SQL-sætning, når du arbejder med MySQL. SELECT
statement giver dig mulighed for at beskrive til MySQL præcis, hvilke data du vil have den skal hente.
Overvej følgende SQL-sætning:
SELECT * FROM Fruit;
Her er resultatet:
Dette er SELECT
udsagn på sit enkleste. Ovenstående SQL-sætning henter alle poster fra
Fruit
tabel.
Stjernen (*
) fortæller MySQL at returnere alle kolonner. Dette sparer os for tid og kræfter. Uden dette ville vi skulle skrive navnene på alle kolonner, vi gerne vil have returneret.
Når det er sagt, kan du også bede MySQL om kun at returnere de kolonner, som du ønsker at returnere. Dette gøres ved kun at navngive de kolonner, som du gerne vil have returneret. Sådan:
SELECT FruitId, FruitName FROM Fruit;
Her er resultatet:
Ovenstående SQL-sætning vælger FruitId og FruitName kolonner fra Fruit tabel.
Dette kan reducere rod, så du kun ser de kolonner, som du er interesseret i. Det kan også øge ydeevnen, fordi MySQL (og enhver applikation, du bruger) ikke behøver at bruge værdifulde ressourcer for at returnere unødvendige data.
Igen henter denne forespørgsel alle poster fra tabellen — MySQL vil returnere alle poster, medmindre andet er angivet.
HVOR Klausul
Du kan tilføje WHERE
klausul for at indsnævre resultatsættet til kun de poster, som du er interesseret i. Sådan:
SELECT * FROM Fruit WHERE UnitId = 1;
Resultat:
Ovenstående forespørgsel returnerer alle poster fra
Fruit
tabel, hvor
UnitId
kolonne har en værdi på 1
.
Underforespørgsler — Indlejret SELECT
Udtalelser
Hvad hvis vi ikke kendte
UnitId
? Hvad hvis vi kun vidste at lede efter de poster med enhedsnavnet Piece
?
Let! Vi kunne omskrive ovenstående eksempel til at bruge en indlejret SELECT
sætning (også kendt som en underforespørgsel ), der forespørger efter en anden tabel (
Enhederne
bord). Hvis du gør dette, kan vi bruge det faktiske enheds navn (i stedet for dets ID), fordi den anden tabel indeholder dette i UnitName
felt:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Resultat:
Her bruger vi en indlejret SELECT
sætning (dvs. en SELECT
sætning i en SELECT
sætning) for at forespørge
Enhederne
tabel for
UnitId
af posten, der indeholder Piece
som dens
UnitName
værdi. Vi kan gøre dette, fordi
Fruit.UnitId
kolonnen er en fremmednøgle til
Units.UnitId
kolonne.
Her er flere eksempler på underforespørgsler, hvis du er interesseret.
Brug af en SQL JOIN
Hvis vi tager det et skridt videre, kunne vi omskrive vores indlejrede SELECT
sætning til en INNER JOIN
.
I SQL er en JOIN
giver dig mulighed for at forespørge på flere tabeller, der deler data. I vores tilfælde deler begge tabeller UnitId
så man kan sige, at de er "tilsluttet" af dette felt.
Der er forskellige typer joinforbindelser i SQL, men vi er primært interesserede i INNER JOIN
for nu.
INNER JOIN
syntaks ser sådan ud:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Så vi kunne omskrive vores underforespørgsel fra det forrige eksempel til følgende:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Resultat:
Vi specificerede Fruit.*
i stedet for bare *
fordi vi kun ønskede at returnere alle kolonner fra
Fruit
bord. Hvis vi havde brugt *
, ville forespørgslen have returneret alle kolonner fra begge tabeller.
Tjek også LEFT JOIN
og RIGHT JOIN
for at se, hvordan du kan få forskellige data afhængigt af jointype.
Underforespørgsel vs JOIN
?
Nu hvor du har set to metoder til at opnå det samme resultat, spekulerer du sikkert på, hvilken der er bedst?
Underforespørgsler har en tendens til at være mere læsbare (og måske nemmere at forstå), hvilket kan gøre det lettere for begyndere at forstå.
Men mange SQL-programmører finder JOIN
er mere effektiv og yder bedre. Hvis du støder på ydeevneproblemer med dine forespørgsler eller en applikation, prøv at konvertere eventuelle underforespørgsler til JOIN
s eller omvendt (i nogle tilfælde kunne en underforespørgsel fungere bedre).
Der kan også være tilfælde, hvor en underforespørgsel er din eneste mulighed, så dette er også en overvejelse.
Flere operatører
Vores forespørgsler indtil videre har alle indeholdt et lighedstegn (=
). Dette kaldes en operatør . Mere specifikt er det en sammenligningsoperator da det sammenligner et udtryk med et andet.
Der er mange flere operatører, som du kan bruge i dine forespørgsler. Disse kan hjælpe meget med at indsnævre resultatsættet til kun de poster, du har brug for. Det er ikke ualmindeligt, at en database indeholder millioner af poster. Selvom du kun har tusindvis af poster, ville det være en meget skræmmende opgave at prøve at finde én post (eller endda bare en håndfuld) blandt tusinder, hvis du ikke havde disse operatører til din rådighed.
Her er nogle af de mere almindeligt anvendte SQL-operatorer.
> Operatør
Du kan bruge
SELECT * FROM Fruit WHERE Inventory > 10;
< Operatør
Du kan bruge <
operatør for at vælge data, der er mindre end en given værdi.
SELECT * FROM Fruit WHERE Inventory < 10;
<> Operatør
Du kan bruge
SELECT * FROM Fruit WHERE Inventory <> 10;
>=
Operatør
Du kan bruge >=
operator for at vælge data, der er større end eller lig med en given værdi.
SELECT * FROM Fruit WHERE Inventory >= 10;
<=
Operatør
Du kan bruge <=
operator for at vælge data, der er mindre end eller lig med en given værdi.
SELECT * FROM Fruit WHERE Inventory <= 10;
AND
Operatør
Du kan tilføje en AND
operator til WHERE
klausul for at begrænse dit valg til kun de poster, der opfylder to betingelser (eller flere, hvis du inkluderer flere AND
operatører).
Her er et eksempel:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
ELLER Operatør
Du kan bruge en ELLER operatør for at udvide dit udvalg til mere end ét kriterium. Som navnet antyder, er
ELLER
klausul lader dig vælge data, hvor kriteriet enten er dette ELLER at. Så AND
operatør grænser dit valg og ELLER
operatør udvides det.
Her er et eksempel:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
MELLEM Operatør
Brug BETWEEN
operatør for at vælge data, der er mellem to givne værdier.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT Operatør
Brug NOT
operatør for at vælge data, der ikke er svarende til en given betingelse.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');