sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsler

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 > operatør for at vælge data, der er større end en given værdi.

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 <> operatør for at vælge data, der både er mindre end og større end en given værdi.

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

  1. Kan ikke få spring boot til automatisk at oprette databaseskema

  2. Halloween-problemet – del 2

  3. Oracle Database BLOB til InputStream i Java?

  4. Undertrykk advarselsmeddelelser ved hjælp af mysql inde fra Terminal, men adgangskode skrevet i bash-script