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');