SQL: ORDER BY voit lajitella ha­ku­tu­lok­set omien tar­pei­de­si mukaan joko nouse­vas­sa tai las­ke­vas­sa jär­jes­tyk­ses­sä. Koh­de­ta­be­lin tietojen lajittelu riveiksi ja sa­rak­keik­si voi tehdä tu­lok­sis­ta sel­keäm­piä ja helpommin luettavia. Tämä puo­les­taan optimoi ja nopeuttaa tietojen ana­ly­soin­tia ja kyselyjä mo­ni­mut­kai­sis­sa tie­to­ko­ko­nai­suuk­sis­sa.

Mikä on SQL ORDER BY?

SQL ORDER BY avulla voit lajitella tietoja ja tuloksia sekä yk­sin­ker­tai­sis­ta että mo­ni­mut­kai­sis­ta tie­to­jou­kois­ta. Komennon avulla voit määrittää, miten tiedot jär­jes­te­tään koh­de­ta­be­lis­sa. Lisäksi voit määrittää, la­ji­tel­laan­ko tiedot nouse­vas­sa vai las­ke­vas­sa jär­jes­tyk­ses­sä. ORDER BY saat selkeitä ja help­po­lu­kui­sia ky­se­ly­tu­lok­sia.

Ole­tusar­voi­ses­ti ORDER BY palauttaa tulokset nouse­vas­sa jär­jes­tyk­ses­sä, eli A–Z tai pie­nim­mäs­tä suu­rim­paan arvoon. Jos haluat tulokset las­ke­vas­sa jär­jes­tyk­ses­sä, voit käyttää va­lin­nais­ta avain­sa­naa DESC. Voit määrittää tu­lok­sil­le yhden tai useamman koh­de­sa­rak­keen.

SQL ORDER BY on tärkeä jär­jes­tel­mäl­lis­ten ja nopeiden kyselyjen suo­rit­ta­mi­ses­sa. Sitä käytetään usein yhdessä SELECT-, WHERE- ja muiden SQL-ope­raat­to­rei­den sekä GROUP BY:n kal­tais­ten funk­tioi­den kanssa.

Vinkki

Haluatko oppia ym­mär­tä­mään SQL: ää paremmin, mutta et tiedä mistä aloittaa? Esi­merk­ke­jä sisältävä SQL-joh­dan­tom­me helpottaa tämän suositun tie­to­kan­ta­kie­len oppimisen aloit­ta­mis­ta.

Mikä on SQL ORDER BY:n syntaksi?

SQL ORDER BY:n syntaksi on seuraava:

SELECT  ColumnA, ColumnB, …  or *
FROM  Table
ORDER BY  ColumnA, ColumnB, …  (optional: ASC or DESC)
sql
Huomio

Jos syötät vain yhden sarakkeen numeron ORDER BY jälkeen, saat yhden sarakkeen, jossa tulokset on lajiteltu. Jos syötät useamman kuin yhden sarakkeen, tulokset la­ji­tel­laan sarakkeen A pe­rus­teel­la. Jos sa­rak­kees­sa A on joissakin riveissä ident­ti­siä mer­kin­tö­jä, kyseiset rivit la­ji­tel­laan sarakkeen B pe­rus­teel­la.

Voit laajentaa tätä syntaksia li­sää­mäl­lä siihen uusia ope­raat­to­rei­ta ja pa­ra­met­re­ja. Esi­mer­kik­si lause­ket­ta WHERE voidaan käyttää mää­rit­te­le­mään kri­tee­re­jä, jotka rajaavat ha­ku­tu­lok­sia. Syntaksi, jossa yh­dis­ty­vät ORDER BY ja WHERE, näyttää tältä:

SELECT  ColumnA, ColumnB, …  or *
FROM  Table
WHERE  ColumnA  =  'SearchCondition'
ORDER BY  ColumnA, ColumnB, …  (optional: ASC or DESC)
sql

Voit käyttää myös seuraavia pa­ra­met­re­ja:

  • SELECT: SELECT-lauseella voit määrittää, mitä tietoja haluat ana­ly­soi­da. Käytä tähteä *, jos haluat hakea koko tie­to­jou­kon, tai kirjoita sa­rak­kei­den nimet, jos haluat käsitellä vain niitä sa­rak­kei­ta.
  • FROM: Määrittää, mistä tau­lu­kos­ta haluat hakea tietoja.
  • WHERE: WHERE on va­lin­nai­nen lause, jolla mää­ri­tel­lään hakuehdot, jotka rajaavat tuloksia. WHERE lauseessa voit käyttää ope­raat­to­rei­ta, kuten =, LIKE tai NOT.
  • ORDER BY: Määrittää, minkä sarakkeen pe­rus­teel­la haluat lajitella tulokset. Jos et lisää ASC tai DESC, tulokset la­ji­tel­laan ole­tuk­se­na nouse­vas­sa jär­jes­tyk­ses­sä.
Huomio

Tie­to­kan­nas­ta riippuen ORDER BY la­jit­te­lee NULL-arvot joko au­to­maat­ti­ses­ti tai valitun la­jit­te­lu­jär­jes­tyk­sen mu­kai­ses­ti. SQLite-, MySQL- ja SQL Server -tie­to­kan­nois­sa NULL-arvot kä­si­tel­lään pie­nim­pi­nä arvoina. Tämä tar­koit­taa, että ne näkyvät nouse­vas­sa tu­lok­sis­sa en­sim­mäi­si­nä. Oracle- ja PostgreSQL-tie­to­kan­nois­sa NULL-arvot kä­si­tel­lään suu­rim­pi­na arvoina. Siksi ne näkyvät nouse­vas­sa tu­lok­sis­sa vii­mei­si­nä.

Mihin SQL ORDER BY voidaan käyttää?

Tässä on muutamia käytännön esi­merk­ke­jä SQL ORDER BYn käytöstä:

  • Tuo­te­tie­to­jen lajittelu tuo­te­ni­men, luokan tai hinnan pe­rus­teel­la
  • Ta­pah­tu­mien lajittelu summan, päi­vä­mää­rän tai nimen pe­rus­teel­la
  • Ti­lauk­sien lajittelu summan tai arvioiden pe­rus­teel­la
  • Työn­te­ki­jöi­den lajittelu palkan, so­pi­mus­ten, suo­ri­tus­ky­vyn tai osaston mukaan
  • Va­ras­to­ti­lan­teen luet­te­loin­ti määrän tai nimen pe­rus­teel­la
  • Lä­he­tys­ten lajittelu pos­ti­nu­me­ron tai seu­ran­ta­nu­me­ron pe­rus­teel­la
  • Asia­kas­luet­te­loi­den lajittelu alueen tai iän mukaan

Esi­merk­ke­jä SQL ORDER BY:stä

Siirrymme nyt kolmeen esi­merk­kiin, joissa käytetään ORDER BY.

Tuot­tei­den lajittelu hinnan mukaan

Tässä esi­mer­kis­sä la­jit­te­lem­me ”Hair”-luokan tuotteet nouse­vas­sa jär­jes­tyk­ses­sä hinnan mukaan. Mää­ri­täm­me nu­me­roil­la FROM ja WHERE, mitkä tuotteet haluamme lajitella. Nu­me­roil­la ORDER BY ja ASC mää­ri­täm­me, että haluamme lajitella ne nouse­vas­sa jär­jes­tyk­ses­sä hinnan mukaan. Syntaksi on seuraava:

SELECT  *
FROM  Products
WHERE  Category  = 'Hair'
ORDER BY  Price  ASC;
sql

Asiak­kai­den suo­dat­ta­mi­nen

Oletetaan, että työs­ken­te­let tau­lu­kos­sa nimeltä ”Asiakkaat” ja haluat lajitella kaikki Isosta-Bri­tan­nias­ta kotoisin olevat asiakkaat nimen mukaan. Haluat lajitella heidät kään­tei­ses­sä aak­kos­jär­jes­tyk­ses­sä Z:sta A:han, joten lisäät komentoon ORDER BY DESC.

SELECT  *
FROM  Customers
WHERE  Country = 'UK'
ORDER BY  Name  DESC;
sql

Lajittelu useiden luokkien pe­rus­teel­la

Tässä esi­mer­kis­sä haluat lajitella ”Elekt­ro­niik­ka”-luokan tuotteet ti­laus­mää­rän mukaan. Jos ti­laus­mää­rät ovat samat, haluat lajitella tuotteet sen mukaan, mistä maasta tilaus on peräisin.

SELECT  *
FROM  Products
WHERE  Category  =  'Electronics'
ORDER BY  OrderQuantity ASC,  Country  DESC;
sql

Onko SQL ORDER BY:lle vaih­toeh­to­ja?

SQL:ssä ei ole ORDER BY vaih­toeh­to­ja, joilla olisi sama toiminto. GROUP BY on kuitenkin SQL-komento, jota käytetään usein yhdessä ORDER BY kanssa. GROUP BY voidaan käyttää tie­tuei­den ryh­mit­te­le­mi­seen luokkien pe­rus­teel­la, ja ORDER BY voidaan lisäksi lajitella kyseiset tietueet.

Esimerkki: Oletetaan, että haluat ryh­mi­tel­lä asiak­kai­den ti­laus­mää­rät maittain ja lajitella ne sitten kes­ki­mää­räi­sen ti­laus­mää­rän mukaan käyt­tä­mäl­lä AVG-yh­teen­las­ku­toi­min­toa. Syntaksi olisi seuraava:

SELECT  Country, AVG(OrderQuantity)
FROM  Customers
WHERE  Category = 'Electronics'
GROUP BY  Country
ORDER BY  AVG(OrderQuantity) ASC;
sql

Voit myös käyttää HAVING-lause­ket­ta suo­dat­taak­se­si la­ji­tel­lut tietueet ha­kueh­to­jen ja -olo­suh­tei­den pe­rus­teel­la. LIMIT voidaan käyttää tu­los­jou­kon ra­joit­ta­mi­seen tiettyyn määrään.

Siirry pää­va­lik­koon