Tot nu toe hebben we een database gemaakt, twee tabellen toegevoegd en gegevens in beide tabellen ingevoegd. Nu gaan we kijken hoe we die gegevens kunnen ophalen. Maar niet alleen ophalen de gegevens, maar om op te vragen de database ervoor.
SQL staat voor Structured Query Language . Het is de Query bit dat SQL zo krachtig maakt. SQL is een taal waarmee u query's kunt uitvoeren tegen uw database. Hiermee kunt u query's de database voor de gegevens die u wilt.
De SQL SELECT
Verklaring
Als het gaat om het opvragen van uw MySQL-database, is de SQL SELECT
verklaring maakt het allemaal mogelijk. Dit is waarschijnlijk uw meest gebruikte SQL-instructie wanneer u met MySQL werkt. De SELECT
statement stelt u in staat om aan MySQL precies te beschrijven welke gegevens u wilt ophalen.
Overweeg de volgende SQL-instructie:
SELECT * FROM Fruit;
Dit is het resultaat:
Dit is de SELECT
verklaring op zijn eenvoudigst. De bovenstaande SQL-instructie haalt alle records op uit de
Fruit
tafel.
Het sterretje (*
) vertelt MySQL om alle kolommen te retourneren. Dit bespaart ons tijd en moeite. Zonder dit zouden we de namen moeten schrijven van alle kolommen die we willen hebben geretourneerd.
Dat gezegd hebbende, kun je MySQL ook vertellen om alleen die kolommen te retourneren die je wilt retourneren. Dit doet u door alleen die kolommen een naam te geven die u wilt retourneren. Zoals dit:
SELECT FruitId, FruitName FROM Fruit;
Dit is het resultaat:
De bovenstaande SQL-instructie selecteert de FruitId en FruitName kolommen uit de Fruit tafel.
Dit kan de rommel verminderen, zodat u alleen die kolommen ziet waarin u geïnteresseerd bent. Het kan ook de prestaties verbeteren, omdat MySQL (en elke toepassing die u gebruikt) geen waardevolle bronnen hoeft te gebruiken om onnodige gegevens te retourneren.
Nogmaals, deze zoekopdracht haalt alles op records uit de tabel — MySQL retourneert alle records, tenzij anders aangegeven.
De WHERE
Clausule
U kunt de WHERE
. toevoegen clausule om het resultaat te beperken tot alleen die records waarin u geïnteresseerd bent. Als volgt:
SELECT * FROM Fruit WHERE UnitId = 1;
Resultaat:
De bovenstaande query retourneert alle records van de
Fruit
tabel waarin de
UnitId
kolom heeft een waarde van 1
.
Subquery's — Geneste SELECT
Verklaringen
Wat als we de
UnitId
. niet wisten ? Wat als we alleen wisten te zoeken naar die records met een eenheidsnaam van Piece
?
Eenvoudig! We zouden het bovenstaande voorbeeld kunnen herschrijven om een geneste SELECT
. te gebruiken statement (ook wel bekend als een subquery ) die een andere tabel doorzoekt (de
Units
tafel). Als u dit doet, kunnen we de werkelijke eenheid naam gebruiken (in plaats van zijn ID) omdat de tweede tabel dit bevat in de UnitName
veld:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Resultaat:
Hier gebruiken we een geneste SELECT
statement (d.w.z. een SELECT
statement binnen een SELECT
statement) om de
Eenheden
. op te vragen tabel voor de
UnitId
van het record dat Piece
. bevat als zijn
UnitName
waarde. We kunnen dit doen omdat
Fruit.UnitId
kolom is een externe sleutel voor de
Units.UnitId
kolom.
Hier zijn meer voorbeelden van subquery's als je geïnteresseerd bent.
Een SQL JOIN
gebruiken
Als we nog een stap verder gaan, kunnen we onze geneste SELECT
. herschrijven statement in een INNER JOIN
.
In SQL, een JOIN
stelt u in staat om meerdere tabellen te doorzoeken die gegevens delen. In ons geval delen beide tabellen de UnitId
dus je zou kunnen zeggen dat ze "verbonden" zijn door dit veld.
Er zijn verschillende soorten joins in SQL, maar we zijn vooral geïnteresseerd in de INNER JOIN
voor nu.
De INNER JOIN
syntaxis gaat als volgt:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Dus we zouden onze subquery uit het vorige voorbeeld kunnen herschrijven naar het volgende:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Resultaat:
We specificeerden Fruit.*
in plaats van alleen *
omdat we alleen alle kolommen van de
Fruit
. wilden retourneren tafel. Als we *
. hadden gebruikt , de zoekopdracht zou alle kolommen van beide tabellen hebben geretourneerd.
Bekijk ook de LEFT JOIN
en RIGHT JOIN
om te zien hoe u verschillende gegevens kunt krijgen, afhankelijk van het type deelname.
Subquery vs JOIN
?
Nu je twee methoden hebt gezien om hetzelfde resultaat te bereiken, vraag je je waarschijnlijk af welke beter is?
Subquery's zijn meestal beter leesbaar (en misschien gemakkelijker te begrijpen), waardoor het voor beginners gemakkelijker te begrijpen is.
Veel SQL-programmeurs vinden echter JOIN
is efficiënter en presteert beter. Als u prestatieproblemen ondervindt met uw zoekopdrachten of een toepassing, probeer dan eventuele subquery's om te zetten in JOIN
s of vice versa (in sommige gevallen zou een subquery beter kunnen presteren).
Er kunnen ook gevallen zijn waarin een subquery uw enige optie is, dus dit is ook een overweging.
Meer operators
Onze zoekopdrachten tot nu toe bevatten allemaal een gelijkteken (=
). Dit heet een operator . Meer specifiek is het een vergelijkingsoperator omdat het de ene uitdrukking met de andere vergelijkt.
Er zijn veel meer operators die u in uw query's kunt gebruiken. Deze kunnen enorm helpen bij het beperken van de resultatenset tot alleen die records die u nodig hebt. Het is niet ongebruikelijk dat een database miljoenen records bevat. Zelfs als je maar duizenden records hebt, zou het een zeer ontmoedigende taak zijn om één record (of zelfs maar een handvol) tussen duizenden te vinden als je deze operators niet tot je beschikking had.
Hier zijn enkele van de meest gebruikte SQL-operators.
De >
Operator
U kunt de >
. gebruiken operator om gegevens te selecteren die groter zijn dan een bepaalde waarde.
SELECT * FROM Fruit WHERE Inventory > 10;
De <
Operator
U kunt de <
. gebruiken operator om gegevens te selecteren die minder zijn dan een bepaalde waarde.
SELECT * FROM Fruit WHERE Inventory < 10;
De <>
Operator
U kunt de <>
. gebruiken operator om gegevens te selecteren die zowel kleiner zijn dan en groter dan een bepaalde waarde.
SELECT * FROM Fruit WHERE Inventory <> 10;
De >=
Operator
U kunt de >=
. gebruiken operator om gegevens te selecteren die groter zijn dan of gelijk zijn aan een bepaalde waarde.
SELECT * FROM Fruit WHERE Inventory >= 10;
De <=
Operator
U kunt de <=
. gebruiken operator om gegevens te selecteren die kleiner zijn dan of gelijk zijn aan een bepaalde waarde.
SELECT * FROM Fruit WHERE Inventory <= 10;
De AND
Operator
U kunt een AND
. toevoegen operator naar de WHERE
clausule om uw selectie te beperken tot alleen die records die aan twee voorwaarden voldoen (of meer als u meer AND
opneemt exploitanten).
Hier is een voorbeeld:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
De OR
Operator
U kunt een OR
. gebruiken operator om uw selectie uit te breiden tot meer dan één criterium. Zoals de naam al doet vermoeden, is de OR
clausule laat u gegevens selecteren waarbij het criterium dit OF . is Dat. Dus de AND
operator limieten uw selectie en de OR
operator verbreedt het.
Hier is een voorbeeld:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
De BETWEEN
Operator
Gebruik de BETWEEN
operator om gegevens te selecteren die tussen twee gegeven waarden liggen.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
De NOT
Operator
Gebruik de NOT
operator om gegevens te selecteren die niet . zijn gelijk aan een bepaalde voorwaarde.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');