Hittills har vi skapat en databas, lagt till två tabeller och infogat data i båda tabellerna. Nu ska vi titta på hur man hämtar den informationen. Men inte bara hämta data, men för att fråga databasen för det.
SQL står för Structured Query Language . Det är Frågan bit som gör SQL så kraftfullt. SQL är ett språk som gör att du kan köra frågor mot din databas. Det låter dig fråga databasen för de data du vill ha.
SQL SELECT Uttalande
När det gäller att fråga din MySQL-databas, SQL SELECT uttalande gör det hela möjligt. Detta är sannolikt din vanligaste SQL-sats när du arbetar med MySQL. SELECT statement låter dig beskriva för MySQL exakt vilken data du vill att den ska hämta.
Tänk på följande SQL-sats:
SELECT * FROM Fruit;
Här är resultatet:
Detta är SELECT uttalande när det är som enklast. Ovanstående SQL-sats hämtar alla poster från
Fruit
bord.
Asterisken (* ) säger till MySQL att returnera alla kolumner. Detta sparar oss tid och ansträngning. Utan detta skulle vi behöva skriva namnen på alla kolumner som vi skulle vilja ha returnerat.
Med det sagt kan du också säga till MySQL att endast returnera de kolumner som du vill returnera. Detta görs genom att bara namnge de kolumner som du vill ha returnerat. Så här:
SELECT FruitId, FruitName FROM Fruit;
Här är resultatet:
Ovanstående SQL-sats väljer FruitId och FruitName kolumner från Fruit bord.
Att göra detta kan minska röran så att du bara ser de kolumner som du är intresserad av. Det kan också öka prestandan, eftersom MySQL (och alla program du använder) inte behöver använda värdefulla resurser för att returnera onödiga data.
Återigen hämtar den här frågan alla poster från tabellen — MySQL kommer att returnera alla poster om inget annat anges.
VAR Klausul
Du kan lägga till WHERE klausul för att begränsa resultatuppsättningen till endast de poster som du är intresserad av. Så här:
SELECT * FROM Fruit WHERE UnitId = 1;
Resultat:
Ovanstående fråga returnerar alla poster från
Fruit
tabell där
UnitId
kolumnen har värdet 1 .
Undersökningar — Kapslade SELECT Uttalanden
Tänk om vi inte kände till
UnitId
? Tänk om vi bara visste att leta efter de poster med enhetsnamnet Piece ?
Lätt! Vi skulle kunna skriva om exemplet ovan för att använda en kapslad SELECT uttalande (annan känd som en underfråga ) som frågar efter en annan tabell (
Enheterna
tabell). Om du gör detta kommer vi att kunna använda det faktiska enhetens namn (istället för dess ID) eftersom den andra tabellen innehåller detta i UnitName fält:
SELECT * FROM Fruit
WHERE UnitId =
(SELECT UnitId
FROM Units
WHERE UnitName = 'Piece'); Resultat:
Här använder vi en kapslad SELECT uttalande (dvs. en SELECT sats i en SELECT uttalande) för att fråga
Enheter
tabell för
UnitId
av posten som innehåller Piece som dess
UnitName
värde. Vi kan göra detta eftersom
Fruit.UnitId
kolumnen är en främmande nyckel till
Units.UnitId
kolumn.
Här är fler exempel på underfrågor om du är intresserad.
Använda en SQL JOIN
Om vi tar det ett steg längre kan vi skriva om vår kapslade SELECT uttalande till en INNER JOIN .
I SQL, en JOIN gör att du kan söka efter flera tabeller som delar data. I vårt fall delar båda tabellerna UnitId så man kan säga att de är "anslutna" av detta fält.
Det finns olika typer av kopplingar i SQL, men vi är främst intresserade av INNER JOIN för nu.
INNER JOIN syntax går så här:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Så vi skulle kunna skriva om vår underfråga från föregående exempel till följande:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Resultat:
Vi angav Fruit.* istället för bara * eftersom vi bara ville returnera alla kolumner från
Fruit
tabell. Om vi hade använt * , skulle frågan ha returnerat alla kolumner från båda tabellerna.
Kolla även in LEFT JOIN och RIGHT JOIN för att se hur du kan få olika data beroende på typen av koppling.
Subquery kontra JOIN ?
Nu när du har sett två metoder för att uppnå samma resultat, undrar du förmodligen vilken som är bättre?
Underfrågor tenderar att vara mer läsbara (och kanske lättare att förstå), vilket kan göra det lättare för nybörjare att förstå.
Men många SQL-programmerare hittar JOIN är effektivare och presterar bättre. Om du stöter på prestandaproblem med dina frågor eller en applikation, försök konvertera eventuella underfrågor till JOIN s eller vice versa (i vissa fall kan en underfråga fungera bättre).
Det kan också finnas fall där en underfråga är ditt enda alternativ, så detta är också ett övervägande.
Fler operatörer
Våra frågor hittills har alla innehållit ett likhetstecken (= ). Detta kallas en operatör . Mer specifikt är det en jämförelseoperator eftersom det jämför ett uttryck med ett annat.
Det finns många fler operatörer som du kan använda i dina frågor. Dessa kan i hög grad hjälpa till att begränsa resultatuppsättningen till endast de poster som du behöver. Det är inte ovanligt att en databas innehåller miljontals poster. Även om du bara har tusentals poster, skulle det vara en mycket skrämmande uppgift att försöka hitta en post (eller till och med bara en handfull) bland tusentals om du inte hade dessa operatörer till ditt förfogande.
Här är några av de vanligaste SQL-operatorerna.
> Operatör
Du kan använda
SELECT * FROM Fruit WHERE Inventory > 10;
< Operatör
Du kan använda < operatör för att välja data som är mindre än ett givet värde.
SELECT * FROM Fruit WHERE Inventory < 10;
<> Operatör
Du kan använda
SELECT * FROM Fruit WHERE Inventory <> 10;
>= Operatör
Du kan använda >= operator för att välja data som är större än eller lika med ett givet värde.
SELECT * FROM Fruit WHERE Inventory >= 10;
<= Operatör
Du kan använda <= operator för att välja data som är mindre än eller lika med ett givet värde.
SELECT * FROM Fruit WHERE Inventory <= 10;
AND Operatör
Du kan lägga till en AND operatorn till WHERE klausul för att begränsa ditt val till endast de poster som uppfyller två villkor (eller fler om du inkluderar fler OCH operatörer).
Här är ett exempel:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
ELLER Operatör
Du kan använda en ELLER operatör för att bredda ditt urval till mer än ett kriterium. Som namnet antyder, ELLER sats låter dig välja data där kriteriet antingen är detta ELLER det där. Så AND operatörens gränser ditt val och ELLER operatör breddas det.
Här är ett exempel:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
MELLAN Operatör
Använd BETWEEN operatorn för att välja data som ligger mellan två givna värden.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT Operatör
Använd NOT operatör för att välja data som inte är motsvarande ett givet villkor.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');