4.1 LIMIET

Als u verwacht dat uw SQL-query te veel gegevens oplevert, kunt u het maximale aantal vooraf beperken. Tabellen kunnen immers duizenden of zelfs miljoenen rijen bevatten.

SQL maakt het heel eenvoudig om het aantal rijen in het resultaat van een query te beperken met behulp van de LIMIT. Dit trefwoord wordt helemaal aan het einde van de SQL-query gebruikt en ziet er als volgt uit:

LIMIT quantity

Laten we een query schrijven voor de producttabel, die een lijst bevat met de producten van onze winkel. Maar aangezien we een zeer succesvolle winkel hebben en we veel producten verkopen, willen we alleen de eerste 10 regels van het antwoord krijgen. Dit is hoe dat verzoek eruit zou zien:

SELECT * FROM product
LIMIT 10

En we krijgen het volgende zoekresultaat:

ID kaart naam merk prijs graaf
1 Tafel Ikea 20.00 uur 15
2 Stoel Ikea 5.00 45
3 Bank Ikea 80.00 10
4 Bed Ikea 75.00 10
5 Kast Bosch 125.00 15
6 Plank Plank 25.00 uur 114
7 TV LG 350.00 4
8 Lamp LG 15.00 uur 100
9 Dressoir Ikea 99.00 10
10 Bord Bosch 199.00 10

Nu zullen we alleen de eerste 5 rijen opvragen. Dit is hoe dat verzoek eruit zou zien:

SELECT * FROM product
LIMIT 5

We krijgen het volgende zoekresultaat:

ID kaart naam merk prijs graaf
1 Tafel Ikea 20.00 uur 15
2 Stoel Ikea 5.00 45
3 Bank Ikea 80.00 10
4 Bed Ikea 75.00 10
5 Kast Bosch 125.00 15

4.2 VERSCHILLEN

De vorige keer hebben we geleerd hoe we het aantal regels in de serverreactie kunnen beperken. En nu kunnen we, in plaats van duizenden rijen uit de producttabel, de eerste 10 rijen ophalen en aan de gebruiker tonen. Het is perfect. Maar hoe geven we de tweede 10 rijen weer? En de derde?

Als we schrijven LIMIT 20, of LIMIT 30, retourneert de server dan niet respectievelijk 20 en 30 rijen?

Het is voor dit geval dat SQL een speciaal trefwoord heeft OFFSETwaarmee je de server kunt vragen om N regels over te slaan in zijn antwoord. Dit trefwoord wordt helemaal aan het einde van de SQL-query gebruikt (na LIMIT) en ziet er als volgt uit:

OFFSET quantity

Laten we een query op de producttabel schrijven en proberen records 11 tot 15 te krijgen. Met andere woorden, we vragen de server om 5 rijen naar ons terug te sturen, maar slaan eerst de eerste 10 rijen van het antwoord over. Dit is hoe dat verzoek eruit zou zien:

SELECT * FROM product
LIMIT 5
OFFSET 10

We krijgen het volgende zoekresultaat:

ID kaart naam merk prijs graaf
elf Fauteuil Bosch 44.00 uur 8
12 bloempot Slimme bloem 99.00 9
13 Stellage Ikea 100.00 10

De server heeft slechts 3 rijen geretourneerd, wat betekent dat er in totaal 13 rijen in onze tabel waren. De server heeft de eerste 10 overgeslagen en de volgende 5 geretourneerd.

4.3 SELECTEER DISTINCT

Een ander handig zoekwoord is DISTINCT. Het wordt gebruikt wanneer er dubbele records in de tabel staan ​​en we de duplicaten willen verwijderen.

Waar komen duplicaten vandaan in onze tabel? Er zijn mogelijk geen duplicaten in de tabel, maar als resultaat van de query is het eenvoudig. Laten we een query schrijven die de merken retourneert van alle producten die we verkopen. Dit is hoe dat verzoek eruit zou zien:

SELECT brand FROM product

We krijgen het volgende zoekresultaat:

merk
Ikea
Ikea
Ikea
Ikea
Bosch
Bosch
LG
LG
Ikea
Bosch
Bosch
Slimme bloem
Ikea

Het is gemakkelijk te zien dat er dubbele rijen in deze tabel staan. Het is om ervoor te zorgen dat er geen duplicaten zijn en dat u het trefwoord moet gebruiken DISTINCT. Zo ziet het gecorrigeerde verzoek eruit:

SELECT DISTINCT brand
FROM product

We krijgen het volgende zoekresultaat:

merk
Ikea
Bosch
LG
Slimme bloem

Zo veel beter. Is het niet? ;)

4.4 BESTELLEN DOOR

En uiteindelijk gingen we sorteren . Om de resultaten van een zoekopdracht te sorteren, moet u het trefwoord gebruiken ORDER BY. Technisch gezien zijn dit twee woorden, maar de essentie is niet belangrijk. Twee woorden, één operator.

Het moet na het trefwoord worden geschreven WHERE, maar vóór LIMITen OFFSET. ORDER BYAls u achter schrijft LIMIT, zal de SQL-server u gewoon een foutmelding terugsturen.

Over het algemeen ziet deze operator er zo uit:

ORDER BY column order

Waar kolom de naam is van de kolom in de tabel / sorteerresultaat. En de volgorde is de sorteervolgorde.

De sorteervolgorde kan uit drie typen bestaan:

  • ASC(van oplopend) - oplopend;
  • DESC(van aflopend) - aflopend;
  • Niet gespecificeerd - zal worden gebruiktASC

Laten we een query schrijven die een lijst met producten retourneert, gesorteerd op prijs in oplopende volgorde. Dit is hoe dat verzoek eruit zou zien:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

We krijgen het volgende zoekresultaat:

ID kaart naam merk prijs graaf
2 Stoel Ikea 5.00 45
8 Lamp LG 15.00 uur 100
1 Tafel Ikea 20.00 uur 15
6 Plank Bosch 25.00 uur 114
elf Fauteuil Bosch 44.00 uur 8
4 Bed Ikea 75.00 10
3 Bank Ikea 80.00 10
12 bloempot Slimme bloem 99.00 9
9 Dressoir Ikea 99.00 10
13 Stellage Ikea 100.00 10

We krijgen hetzelfde resultaat als we de sorteervolgorde niet specificeren - we slaan het woord over ASC.

4.5 ORDER BY over meerdere kolommen

Met de operator ORDER BYkunt u het resultaat sorteren op meerdere kolommen. Dit kan erg handig zijn als de eerste kolom veel dubbele elementen bevat. De algemene vorm van deze operator is als volgt:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

Met andere woorden, als je na het sorteren op de eerste kolom meerdere identieke waarden in de buurt hebt, dan worden ze gesorteerd op de tweede kolom, enzovoort.

Laten we een zoekopdracht schrijven die onze producten op merk sorteert, en voor producten met hetzelfde merk - in aflopende volgorde van hun nummer. Dit is hoe dat verzoek eruit zou zien:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

We krijgen het volgende zoekresultaat:

ID kaart naam merk prijs graaf
6 Plank Bosch 25.00 uur 114
5 Kast Bosch 125.00 15
10 Bord Bosch 199.00 10
elf Fauteuil Bosch 44.00 uur 8
2 Stoel Ikea 5.00 45
1 Tafel Ikea 20.00 uur 15
9 Dressoir Ikea 99.00 10
13 Stellage Ikea 100.00 10
4 Bed Ikea 75.00 10
3 Bank Ikea 80.00 10
8 Lamp LG 15.00 uur 100
7 TV LG 350.00 4
12 bloempot Slimme bloem 99.00 9

Kijk goed naar de tabel - de rijen zijn gesorteerd op merknaam (alfabetische volgorde) en rijen met dezelfde merknaam zijn gesorteerd op productnummer in aflopende volgorde (laatste kolom).