sql >> Databasteknik >  >> RDS >> Mysql

MySQL-frågor

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 > operatör för att välja data som är större än ett givet värde.

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 <> operatör för att välja data som är både mindre än och större än 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 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');

  1. Partitionsfunktion COUNT() OVER möjlig med DISTINCT

  2. Hur återställer man data från en raderad Docker-behållare? Hur återansluter man den till data?

  3. Använder ORDER BY och GROUP BY tillsammans

  4. Hur lägger man till ett specifikt antal tomma rader i sqlite?